From 664ff9b491b8cdfc1c5ba2b2ca7f1a1a059c239f Mon Sep 17 00:00:00 2001
From: mwang <8205347@qq.com>
Date: Sat, 4 May 2019 23:17:28 +0800
Subject: [PATCH] add top to shelf

---
 .../novelbook/android/Activity_ChgSource.java |   6 +-
 .../com/novelbook/android/BookActivity.java   |   4 +-
 .../android/Fragments/Fragment_Shelf.java     |  68 ++++++-
 .../android/Fragments/Fragment_bookStore.java |   4 +-
 .../android/Fragments/Fragment_booklist.java  |   7 +-
 .../android/Fragments/Fragment_paihang.java   |   1 +
 .../com/novelbook/android/ReadActivity.java   |   2 +
 .../android/adapter/BookListAdapter.java      |  44 +++++
 .../android/adapter/MyViewHolder.java         |  15 ++
 .../android/netutils/HttpMethods.java         |  56 ++++++
 .../com/novelbook/android/utils/BookUtil.java | 115 +++++++++---
 .../novelbook/android/utils/FileUtils.java    |  11 ++
 .../com/novelbook/android/utils/Fileutil.java |   2 +-
 .../novelbook/android/utils/PageFactory.java  |  37 ++--
 .../main/res/layout/activity_chgsource.xml    |   8 +-
 .../main/res/layout/fragment_book_store.xml   |   2 +-
 .../fragment_shelf_botoomsheetdialog.xml      | 172 ++++++++----------
 .../src/main/res/layout/recycle_list_item.xml |  14 +-
 .../res/layout/recycle_list_item_horizon.xml  |  45 ++++-
 .../main/res/layout/recycle_list_one_item.xml |   5 +-
 .../src/main/res/mipmap-mdpi/star_active.png  | Bin 0 -> 985 bytes
 .../main/res/mipmap-mdpi/star_inactive.png    | Bin 0 -> 1184 bytes
 zhuike/src/main/res/values/colors.xml         |   1 +
 zhuike/src/main/res/values/styles.xml         |  18 +-
 24 files changed, 475 insertions(+), 162 deletions(-)
 create mode 100644 zhuike/src/main/res/mipmap-mdpi/star_active.png
 create mode 100644 zhuike/src/main/res/mipmap-mdpi/star_inactive.png

diff --git a/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java b/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java
index 0599ffe..47c03af 100644
--- a/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java
+++ b/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java
@@ -178,9 +178,13 @@ public class Activity_ChgSource extends Activity_base {
               if(TextUtils.isEmpty(title)) {
                   title = mDatas.get(position).getDomain();
               }
+         //  title += mDatas.get(position).getDomain();
             Log.d(TAG, String.format("onBindViewHolder: domain is '%s', title is '%s'",domain ,title));
             if(mDatas.get(position).getDomain().equals(domain)){
-                title +=" (当前源)";
+            //     title +=" (当前源)";
+                holder.tvTitle.setTextColor(getResources().getColor( R.color.colorPrimaryDark));
+            }else{
+                holder.tvTitle.setTextColor(getResources().getColor( R.color.blacktitle));
             }
 
             holder.tvTitle.setText(title); //.getName()
diff --git a/zhuike/src/main/java/com/novelbook/android/BookActivity.java b/zhuike/src/main/java/com/novelbook/android/BookActivity.java
index 94249b1..84a45e1 100644
--- a/zhuike/src/main/java/com/novelbook/android/BookActivity.java
+++ b/zhuike/src/main/java/com/novelbook/android/BookActivity.java
@@ -280,7 +280,7 @@ public class BookActivity extends   Activity_base {
                 .load( Uri.decode(NetUtil.getCoverUrl(mNovel.getCover())))
                 .dontAnimate()
                //  .error(R.mipmap.side_bg2)
-                  .transform(new GaoSiTransForm(this, 100, 3)) // "14":模糊度;"3":图片缩放3倍后再进行模糊
+                  .transform(new GaoSiTransForm(this, 150, 5)) // "14":模糊度;"3":图片缩放3倍后再进行模糊
                 .into(imageViewHead);
 
 
@@ -291,7 +291,7 @@ public class BookActivity extends   Activity_base {
     }
 
     void setShelfButtonText() {
-        String title = mNovel.isOnShelf() ? "移除书架" : "加入书架";
+        String title = mNovel.isOnShelf() ? "移出书架" : "加入书架";
         btnShelf.setText(title);
     }
 
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java
index 62e5a0c..cb2a24d 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java
@@ -22,6 +22,7 @@ import android.widget.CompoundButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.novelbook.android.Main2Activity;
 import com.novelbook.android.R;
@@ -33,7 +34,9 @@ import com.novelbook.android.netutils.HttpMethods;
 import com.novelbook.android.netutils.NetUtil;
 import com.novelbook.android.netutils.OnSuccessAndFaultListener;
 import com.novelbook.android.netutils.OnSuccessAndFaultSub;
+import com.novelbook.android.utils.CommonUtil;
 import com.novelbook.android.utils.Constants;
+import com.novelbook.android.utils.FileUtils;
 import com.novelbook.android.utils.GsonUtil;
 import com.novelbook.android.utils.ImageUtil;
 import com.novelbook.android.utils.MyImageLoader;
@@ -338,6 +341,10 @@ void test(int maxAge){
         tvTitle.setText(bookLists.get(position).getName());
         TextView tvAuthor =(TextView) bottomSheetDialog.findViewById(R.id.tvAuthor);
         tvAuthor.setText(bookLists.get(position).getAuthor());
+        TextView tvLatest =(TextView) bottomSheetDialog.findViewById(R.id.txtLatestUpdate);
+        TextView tvLatestChapt =(TextView) bottomSheetDialog.findViewById(R.id.txtLatestCate);
+        tvLatestChapt.setText(bookLists.get(position).getChapterName());
+        tvLatest.setText(CommonUtil.getDateString( bookLists.get(position).getLastUpdateTime()) );
 
         ImageView imageView = (ImageView) bottomSheetDialog.findViewById(R.id.imageG1);
         ImageUtil.loadImage(activity,bookLists.get(position).getCover(),imageView);
@@ -348,6 +355,58 @@ void test(int maxAge){
                showBookDetail(bookLists.get(position));
             }
         });
+         TextView tvCache =(TextView) bottomSheetDialog.findViewById(R.id.tvCache);
+         long size = FileUtils.getCacheSize(bookLists.get(position).getId());
+         size = size/1024;
+         tvCache.setText(String.format("%sK",size));
+        LinearLayout llClearCache =(LinearLayout) bottomSheetDialog.findViewById(R.id.llClearCache);
+        llClearCache.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                FileUtils.clearChapterCache(bookLists.get(position).getId());
+                long size = FileUtils.getCacheSize(bookLists.get(position).getId());
+                size = size/1024;
+                tvCache.setText(String.format("%sK",size));
+                Toast.makeText(activity,"缓存清除成功",Toast.LENGTH_SHORT);
+            }
+        });
+
+        LinearLayout lltop =(LinearLayout) bottomSheetDialog.findViewById(R.id.llTop);
+        TextView tvTop =(TextView) bottomSheetDialog.findViewById(R.id.tvTop);
+        ImageView imgTop =(ImageView) bottomSheetDialog.findViewById(R.id.imageTop);
+        if(  bookLists.get(position).isTop()){
+
+            tvTop.setText("取消置顶");
+            imgTop.setImageResource(R.mipmap.star_inactive);
+
+        }else{
+            tvTop.setText("置顶显示");
+            imgTop.setImageResource(R.mipmap.star_active);
+        }
+
+        lltop.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+              if(  bookLists.get(position).isTop()){
+                  bookLists.get(position).setToDefault("isTop");
+                  tvTop.setText("置顶显示");
+                  imgTop.setImageResource(R.mipmap.star_active);
+
+              }else{
+                  bookLists.get(position).setTop(true);
+                  tvTop.setText("取消置顶");
+                  imgTop.setImageResource(R.mipmap.star_inactive);
+              }
+
+                bookLists.get(position).update( bookLists.get(position).getId());
+
+                loadNovelsOnShelf();
+                mAdapter.setData(bookLists);
+
+                Toast.makeText(activity,"缓存清除成功",Toast.LENGTH_SHORT);
+            }
+        });
+
+
+
 
 
 
@@ -533,7 +592,11 @@ void test(int maxAge){
             if(holder.checkBox!=null) holder.checkBox.setVisibility(View.VISIBLE);
             if (holder.imageView != null && !TextUtils.isEmpty(mDatas.get(position).getCover())) {
                 loader.displayImage(context, NetUtil.getCoverUrl(mDatas.get(position).getCover()) ,holder.imageView);
-
+            }
+            if( mDatas.get(position).isTop()){
+                holder.imageTop.setVisibility(View.VISIBLE);
+            }else{
+                holder.imageTop.setVisibility(View.GONE);
             }
             // 如果设置了回调,则设置点击事件
             if (mOnItemClickListener != null)
@@ -592,6 +655,9 @@ void test(int maxAge){
             CheckBox checkBox;
             @BindView(R.id.imageView)
             ImageView imageView;
+            @BindView(R.id.imageTop)
+            ImageView imageTop;
+
             @BindView(R.id.title)
             TextView tvTitle;
             @Nullable
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bookStore.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bookStore.java
index 90f11ff..c31f04c 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bookStore.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bookStore.java
@@ -70,7 +70,7 @@ public class Fragment_bookStore extends BasicFragment {
 
     @Override
     public void initData() {
-        mTitle = new String[]{"精选", "榜单","分类"};
+        mTitle = new String[]{"精选","分类", "榜单"};
 
     }
     public void onSexSwitch(){
@@ -96,8 +96,8 @@ public class Fragment_bookStore extends BasicFragment {
            // mTitle = new String[]{"精选", "榜单", "书单"};
             mFragments = new ArrayList<>();
             mFragments.add(new Fragment_jingxuan());
-            mFragments.add(new Fragment_bangdan());
             mFragments.add(FragmentCates.newInstance());
+            mFragments.add(new Fragment_bangdan());
 
          //   mFragments.add(new Fragment_shudan());
             Log.d(TAG,"initial fragments in tabs ");
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java
index e04918a..cdd0795 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_booklist.java
@@ -123,6 +123,7 @@ public class Fragment_booklist extends BasicFragment {
            if(!TextUtils.isEmpty(history)){
                listItem = listItem =R.layout.recycle_list_item_history;
             }
+
         }
     }
 
@@ -231,6 +232,7 @@ public class Fragment_booklist extends BasicFragment {
 
         if(!TextUtils.isEmpty(bangdan) && !TextUtils.isEmpty(fn)){ //榜单
            // showProgressDialog(true, "正在加载榜单");
+           mAdapter.setShowTop(true);
             BookSubscribe.getSiteRankDetail(fn,pageNo,Constants.SEX,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
                 @Override
                 public void onSuccess(String result) {
@@ -260,16 +262,19 @@ public class Fragment_booklist extends BasicFragment {
 
 
         }else  if(!TextUtils.isEmpty(fn)){ //首页 更多
+            mAdapter.setShowTop(true);
        //     showProgressDialog(true, "正在加载更多");
             BookSubscribe.getNovelPaihang(fn,Constants.SEX,new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
 
         }
         else if(!TextUtils.isEmpty((cate))) { //分类
+            mAdapter.setShowTop(true);
            // showProgressDialog(true, "正在加载分类");
             BookSubscribe.getCateNovelList(cate, pageNo, Constants.SEX, progress, new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
 
         }else if(!TextUtils.isEmpty(keyWord)){  //搜索
           //  showProgressDialog(true, "正在加载搜索");
+            mAdapter.setShowTop(true);
             BookSubscribe.getSearchNovelList( keyWord,pageNo, Constants.SEX, new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
         }else if(!TextUtils.isEmpty(history)){
            loadHistory();
@@ -350,7 +355,7 @@ public class Fragment_booklist extends BasicFragment {
      @Override
     public void onResume(){
         super.onResume();
-        pageNo=1;
+     //   pageNo=1;
 
         if(!TextUtils.isEmpty(history)){
            if(isFirstLoad) {
diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java
index 1f92e56..af5a13a 100644
--- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java
+++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java
@@ -175,6 +175,7 @@ final String TAG = Fragment_paihang.class.getSimpleName();
                                 Toast.LENGTH_SHORT).show();
                     }
                 });
+                mAdapter.setShowTop(true);
                 mAdapter.setShowFootView(true);
                 rvPaihang.setLayoutManager(new LinearLayoutManager(activity));
                 rvPaihang.setAdapter(mAdapter);
diff --git a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java
index 8bca722..5189e83 100644
--- a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java
+++ b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java
@@ -132,6 +132,8 @@ public class ReadActivity extends  Activity_base implements SpeechSynthesizerLis
             if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) {
                 Log.e(TAG,Intent.ACTION_BATTERY_CHANGED);
                 int level = intent.getIntExtra("level", 0);
+                Log.d(TAG, String.format("updateBattery onReceive: Intent.ACTION_BATTERY_CHANGED level %s ",level));
+
                 pageFactory.updateBattery(level);
             }else if (intent.getAction().equals(Intent.ACTION_TIME_TICK)){
                 Log.e(TAG,Intent.ACTION_TIME_TICK);
diff --git a/zhuike/src/main/java/com/novelbook/android/adapter/BookListAdapter.java b/zhuike/src/main/java/com/novelbook/android/adapter/BookListAdapter.java
index 2925d4a..288817d 100644
--- a/zhuike/src/main/java/com/novelbook/android/adapter/BookListAdapter.java
+++ b/zhuike/src/main/java/com/novelbook/android/adapter/BookListAdapter.java
@@ -58,6 +58,17 @@ public  class BookListAdapter extends RecyclerView.Adapter< RecyclerView.ViewHol
     private float percent =0;
     private int norecord =R.string.noRecord;
 
+    private boolean isShowTop=false;
+
+    public boolean isShowTop() {
+        return isShowTop;
+    }
+
+    public void setShowTop(boolean showTop) {
+        isShowTop = showTop;
+
+    }
+
     public void setNorecord(int norecord) {
         this.norecord = norecord;
     }
@@ -67,6 +78,7 @@ public  class BookListAdapter extends RecyclerView.Adapter< RecyclerView.ViewHol
     }
 
 
+
     public void setShowFootView(boolean showFootView) {
         this.showFootView = showFootView;
     }
@@ -211,6 +223,38 @@ public  class BookListAdapter extends RecyclerView.Adapter< RecyclerView.ViewHol
             if (holder.imageView != null && !TextUtils.isEmpty(mDatas.get(position).getCover())) {
                 ImageUtil.loadImage(context, mDatas.get(position).getCover(), holder.imageView);
             }
+            if (holder.imageTop != null) {
+                if( mDatas.get(position).isTop()){
+                    holder.imageTop.setVisibility(View.VISIBLE);
+                }else{
+                    holder.imageTop.setVisibility(View.GONE);
+                }
+
+            }
+            if(isShowTop) {
+                if (holder.imageTop1 != null) {
+                    if (position == 0) {
+                        holder.imageTop1.setVisibility(View.VISIBLE);
+                    } else {
+                        holder.imageTop1.setVisibility(View.GONE);
+                    }
+                }
+                if (holder.imageTop2 != null) {
+                    if (position == 1) {
+                        holder.imageTop2.setVisibility(View.VISIBLE);
+                    } else {
+                        holder.imageTop2.setVisibility(View.GONE);
+                    }
+                }
+                if (holder.imageTop3 != null) {
+                    if (position == 2) {
+                        holder.imageTop3.setVisibility(View.VISIBLE);
+                    } else {
+                        holder.imageTop3.setVisibility(View.GONE);
+                    }
+                }
+            }
+
             if (holder.imageUpdate != null) {
                 if( mDatas.get(position).isUpdated()){
                     holder.imageUpdate.setVisibility(View.VISIBLE);
diff --git a/zhuike/src/main/java/com/novelbook/android/adapter/MyViewHolder.java b/zhuike/src/main/java/com/novelbook/android/adapter/MyViewHolder.java
index 2e80349..47820ba 100644
--- a/zhuike/src/main/java/com/novelbook/android/adapter/MyViewHolder.java
+++ b/zhuike/src/main/java/com/novelbook/android/adapter/MyViewHolder.java
@@ -17,6 +17,21 @@ public  class MyViewHolder extends RecyclerView.ViewHolder {
         @BindView(R.id.imageUpdated)
         @Nullable
         ImageView imageUpdate;
+
+        @BindView(R.id.imageTop)
+        @Nullable
+        ImageView imageTop;
+
+        @BindView(R.id.imageTop1)
+        @Nullable
+        ImageView imageTop1;
+        @BindView(R.id.imageTop2)
+        @Nullable
+        ImageView imageTop2;
+        @BindView(R.id.imageTop3)
+        @Nullable
+        ImageView imageTop3;
+
         @BindView(R.id.title)
         TextView tvTitle;
         @Nullable
diff --git a/zhuike/src/main/java/com/novelbook/android/netutils/HttpMethods.java b/zhuike/src/main/java/com/novelbook/android/netutils/HttpMethods.java
index b697f02..bff4670 100644
--- a/zhuike/src/main/java/com/novelbook/android/netutils/HttpMethods.java
+++ b/zhuike/src/main/java/com/novelbook/android/netutils/HttpMethods.java
@@ -15,9 +15,18 @@ import com.novelbook.android.utils.FileUtils;
 
 import java.io.File;
 import java.io.IOException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
 import java.util.Locale;
 import java.util.concurrent.TimeUnit;
 
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
 import io.reactivex.Observable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.observers.DisposableObserver;
@@ -197,6 +206,34 @@ public class HttpMethods {
         okHttpBuilder.writeTimeout(DEFAULT_READ_TIMEOUT, TimeUnit.SECONDS);
         //错误重连
         okHttpBuilder.retryOnConnectionFailure(true);
+
+        // Install the all-trusting trust manager
+        final SSLContext sslContext;
+        try {
+            sslContext = SSLContext.getInstance("SSL");
+
+            sslContext.init(null, trustAllCerts,
+                    new java.security.SecureRandom());
+            // Create an ssl socket factory with our all-trusting manager
+            final javax.net.ssl.SSLSocketFactory sslSocketFactory = sslContext
+                    .getSocketFactory();
+
+          //  okHttpBuilder.sslSocketFactory(sslSocketFactory);
+           /* okHttpBuilder.hostnameVerifier(new HostnameVerifier() {
+
+                @Override
+                public boolean verify(String hostname, SSLSession session) {
+                    // TODO Auto-generated method stub
+                    return true;
+
+                }
+            });*/
+        } catch (NoSuchAlgorithmException | KeyManagementException e) {
+            e.printStackTrace();
+        }
+
+
+
         return  okHttpBuilder.build();
     }
 
@@ -271,6 +308,25 @@ public class HttpMethods {
         return userAgent;
     }
 
+    final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
+        @Override
+        public void checkClientTrusted(
+                java.security.cert.X509Certificate[] chain,
+                String authType) throws CertificateException {
+        }
+
+        @Override
+        public void checkServerTrusted(
+                java.security.cert.X509Certificate[] chain,
+                String authType) throws CertificateException {
+        }
+
+        @Override
+        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+            return null;
+        }
+    }};
+
 
 
 }
\ No newline at end of file
diff --git a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java
index ea0998b..b1361a5 100644
--- a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java
+++ b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java
@@ -41,12 +41,21 @@ import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.lang.ref.WeakReference;
 import java.nio.charset.Charset;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
 import okhttp3.Call;
 import okhttp3.Callback;
 import okhttp3.Request;
@@ -122,6 +131,7 @@ public class BookUtil {
     DownloadStatus downloadStatus = DownloadStatus.notStart;
 
     public Chapter getChapter(int chapId){
+        chapId = chapId >0 ?chapId : 1;
         if(chapId > mChapters.size() || mChapters.size() ==0){
             return Chapter.getChapter(mNovel.getId(), mNovel.getDomain(),chapId);
         }else{
@@ -391,7 +401,7 @@ public class BookUtil {
     public int getChapterNo() {
 
         if(chapterNo  > mChapters.size()){
-            Log.d(TAG, String.format(" prepare book  getChapterNo ,chapterNo %s,  getChapters().size() %s ,mChangeChapId %s" ,chapterNo , mChapters.size(),mChangeChapId)  );
+          //  Log.d(TAG, String.format(" prepare book  getChapterNo ,chapterNo %s,  getChapters().size() %s ,mChangeChapId %s" ,chapterNo , mChapters.size(),mChangeChapId)  );
             if(mChangeChapId>0){
                 return  mChangeChapId;
             }
@@ -399,7 +409,7 @@ public class BookUtil {
         }
         chapterNo =   chapterNo<=0 ?1 :chapterNo;
 
-                Log.d(TAG, String.format(" prepare book  getChapterNo ,chapterNo %s,  getChapters().size() %s " ,chapterNo , mChapters.size()) );
+       //         Log.d(TAG, String.format(" prepare book  getChapterNo ,chapterNo %s,  getChapters().size() %s " ,chapterNo , mChapters.size()) );
         return chapterNo;
     }
 
@@ -473,6 +483,45 @@ public class BookUtil {
         return  f.exists();
     }
 
+    public boolean retryDownLoadContent(int chaptId) {
+        if(chaptDownStatus.containsKey(chaptId)){
+           if( chaptDownStatus.get(chaptId) == DownloadStatus.failure){
+               if(fileRetryCnt.containsKey(chaptId)){
+                   if(fileRetryCnt.get(chaptId) < Constants.retryCnt){
+                       fileRetryCnt.put(chaptId,fileRetryCnt.get(chaptId)+1 );
+
+                   }else{
+                       return false;
+                   }
+               }else {
+                   fileRetryCnt.put(chaptId, 1 );
+               }
+
+           }else{
+               return false;
+           }
+        }else{
+            chaptDownStatus.put(chaptId,DownloadStatus.downloading);
+            fileRetryCnt.put(chaptId,11 );
+        }
+
+        if(fileRetryCnt.get(chaptId) < Constants.retryCnt) {
+            try {
+                loadChaptContent(chaptId);
+                chaptDownStatus.put(chaptId,DownloadStatus.downloading);
+            } catch (JSONException e) {
+                e.printStackTrace();
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
+            return  true;
+        }
+
+        return false;
+
+    }
+
 
     private class BookTask extends AsyncTask<String,Void,Boolean> {
        private String domain;
@@ -489,7 +538,7 @@ public class BookUtil {
                 Log.d(TAG, String.format("changing Source: target domain %s chaptId %s, chapt title %s,mChangeChapId %s "
                         ,domain,chapId,chapTitle,mChangeChapId)  );
 
-                int chId=chapterNo;
+                int chId=chapId;//chapterNo;
                 String title ="";
                 mChangeChapId = mChangeChapId >=1 ?mChangeChapId :1;//TODO: mChangeChapId 换源时不要变
                 if( mChapters.size() >= mChangeChapId && mChapters.get(mChangeChapId-1)!=null ){
@@ -517,17 +566,36 @@ public class BookUtil {
                         i = 1;
                         for (Chapter chapter : mChapters) {
                         //    Log.d(TAG, "changing Source: finding chapter   " + i + ":" + chapter.getChapterName());
-                            if (chapter.getChapterName().contains(mChangeTitle)) {
+                            if (   mChangeTitle.contains(chapter.getChapterName())
+                                    ||chapter.getChapterName().contains(mChangeTitle)
+                            ){
                                 Log.d(TAG, "changing Source:successed find chapter by original title  " + i + ":" + mChangeTitle);
                                 chId = i;
                                 title = chapter.getChapterName();
                                 break;
                             }
+
+                            i++;
+                        }
+
+                        i = 1;
+                        for (Chapter chapter : mChapters) {
+                            //    Log.d(TAG, "changing Source: finding chapter   " + i + ":" + chapter.getChapterName());
+                            if ( chapter.getChapterName().startsWith(mChangeTitle)
+                                    ||mChangeTitle.startsWith(chapter.getChapterName()  )
+
+                            ){
+                                Log.d(TAG, "changing Source:successed find chapter by original title  " + i + ":" + mChangeTitle);
+                                chId = i;
+                                title = chapter.getChapterName();
+                                break;
+                            }
+
                             i++;
                         }
                     }
 
-                    if (!title.contains(mChangeTitle)) {
+                   /* if (!title.contains(mChangeTitle)) {
                         i = 1;
                         for (Chapter chapter : mChapters) {
                           //  Log.d(TAG, "changing Source: finding chapter   " + i + ":" + chapter.getChapterName());
@@ -539,14 +607,14 @@ public class BookUtil {
                             }
                             i++;
                         }
-                    }
+                    }*/
 
 
                 }
                 chId = chId <= mChapters.size() ? chId: mChapters.size();
                 Log.d(TAG, "changing Source: to open chapter with new site source  "  + chId + " : "+ mChangeTitle );
                 pagefactory.changeChapter(chId);
-                mChangeChapId=0;
+              //  mChangeChapId=0;
                 Toast.makeText(mContext,"换源成功",Toast.LENGTH_LONG).show();
             }else{
                 Log.d(TAG, "changing Source:  failed "    );
@@ -591,9 +659,7 @@ public class BookUtil {
 
     /**
      * 新线程换源 ,handler 有问题
-     * @param domain
-     * @param chapId
-     * @param chapTitle
+
      */
  /*   public void changeSourceNewThread(String domain,int chapId,String chapTitle) {
           Log.d(TAG, String.format("changing Source: target domain %s chaptId %s, chapt title %s ",domain,chapId,chapTitle)  );
@@ -1387,7 +1453,7 @@ int muluRetryCount =0;
                         //   getTargetSites();
                     }
                     if( mChapters.size() ==0) {
-                        if (mMuluStatus == MuluStatus.isDone){
+                        if (mMuluStatus != MuluStatus.isDownloading){
                             getSiteRule();
                         }
                     }
@@ -1462,7 +1528,7 @@ int muluRetryCount =0;
                         error = "连不上网络";
 
                     }
-                    loadChaptContent(index);
+                   // loadChaptContent(index);
                     chaptDownStatus.put( index , DownloadStatus.failure);
 
                     Log.d(TAG, String.format("prepare book loadChaptContent retrying     " ));
@@ -1588,7 +1654,7 @@ private void loadChaptContent(final int chapterIndex) throws JSONException, Inte
 
             chaptDownStatus.put(index,DownloadStatus.failure);
           //  setDownloadFlag(true);
-            Log.d( TAG,String.format("prepare book loadChaptContent fail, isDownloadChapt: %s",false));
+            Log.d( TAG,String.format("prepare book loadChaptContent %s fail, isDownloadChapt: %s",index,false));
             e.printStackTrace();
            // throw new RuntimeException("Error during writing " + fileChapterName( index));
         }
@@ -1609,6 +1675,9 @@ private void loadChaptContent(final int chapterIndex) throws JSONException, Inte
 
                 try {
 
+                    if(mSiteRule==null){
+                        return;
+                    }
                  /* Charset charset = body.contentType().charset();
                   if(charset!=null){
                       String name = charset.displayName();
@@ -1679,24 +1748,28 @@ private void loadChaptContent(final int chapterIndex) throws JSONException, Inte
                 .url(url)
                 .removeHeader("Pragma");
 
-        for(int i=0;i<mSiteRule.getHeaders().length;i+=2){
-            builder.header(mSiteRule.getHeaders()[i],mSiteRule.getHeaders()[i+1]);
+        for (int i = 0; i < mSiteRule.getHeaders().length; i += 2) {
+            builder.header(mSiteRule.getHeaders()[i], mSiteRule.getHeaders()[i + 1]);
 
         }
 
 
 //                .header( "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
 //                .header( "Upgrade-Insecure-Requests", "1")
-              //   .header("content-type", "text/html; charset=utf-8")
-             //   .header("Content-Type", "text/plain; charset=utf-8")
-             //   .header( "Accept", "*/*")
-                ;
+        //   .header("content-type", "text/html; charset=utf-8")
+        //   .header("Content-Type", "text/plain; charset=utf-8")
+        //   .header( "Accept", "*/*")
+        ;
        /* if(mSiteRule!=null && !TextUtils.isEmpty(mSiteRule.getEncoding())  ){
             builder.header("Accept-Encoding",mSiteRule.getEncoding());
         }
-*/   if(maxAge>0) {
-            builder. header("Cache-Control", "public, max-age=" + maxAge);
+*/
+        if (maxAge > 0) {
+            builder.header("Cache-Control", "public, max-age=" + maxAge);
         }
+
+
+
         return builder.build();
 
     }
diff --git a/zhuike/src/main/java/com/novelbook/android/utils/FileUtils.java b/zhuike/src/main/java/com/novelbook/android/utils/FileUtils.java
index 2971e05..df99140 100644
--- a/zhuike/src/main/java/com/novelbook/android/utils/FileUtils.java
+++ b/zhuike/src/main/java/com/novelbook/android/utils/FileUtils.java
@@ -101,5 +101,16 @@ public class FileUtils {
         }
         return cachePath;
     }
+    public static File getNovelDir(int noveId){
+        File f = new File(BookUtil.chapterPath+noveId);
+        return  f;
+    }
+    public static void clearChapterCache(int novelId) {
 
+        Fileutil.deleteDir(getNovelDir(novelId));
+    }
+
+    public static long getCacheSize(int noveId) {
+      return   Fileutil.getDirSize(getNovelDir(noveId));
+    }
 }
diff --git a/zhuike/src/main/java/com/novelbook/android/utils/Fileutil.java b/zhuike/src/main/java/com/novelbook/android/utils/Fileutil.java
index b726790..ac9ef9c 100644
--- a/zhuike/src/main/java/com/novelbook/android/utils/Fileutil.java
+++ b/zhuike/src/main/java/com/novelbook/android/utils/Fileutil.java
@@ -48,7 +48,7 @@ public class Fileutil {
             if (file.isFile()) {
                 dirSize += file.length();
             } else if (file.isDirectory()) {
-                dirSize += file.length();
+              //  dirSize += file.length();
                 // 递归调用
                 dirSize += getDirSize(file);
             }
diff --git a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java
index 408a8f2..4bdc2d3 100644
--- a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java
+++ b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java
@@ -353,14 +353,20 @@ public class PageFactory implements ChangeSource{
         new Thread() {
             @Override
             public void run() {
+                super.run();
+
                 Log.d(TAG, String.format("prepare book to preRead chapter %s ,thread.name %s",chaptId,Thread.currentThread().getName()  ) );
                 File file = new File(getChapterFileName(chaptId));
                 if(file.exists()) {
                     chaptMap.put(chaptId, readChaptCache(chaptId));
-                    Log.d(TAG, String.format("prepare book to preLoad success " ) );
+
+                    Log.d(TAG, String.format("prepare book to preLoad %s done <-----",chaptId ) );
+                }else{
+                    Log.d(TAG, String.format("prepare book to trying download the chapt %s again........... ",chaptId ) );
+                    mBookUtil.retryDownLoadContent(chaptId) ;
                 }
-                Log.d(TAG, String.format("prepare book to preLoad done <-----" ) );
-                super.run();
+
+
             }}.start();
     }
 
@@ -555,7 +561,7 @@ public static boolean busy(){
         mBatterryPaint.setColor(m_textColor);
         batteryInfoIntent = context.getApplicationContext().registerReceiver(null,
                 new IntentFilter(Intent.ACTION_BATTERY_CHANGED)) ;//注册广播,随时获取到电池电量信息
-
+        level = batteryInfoIntent.getIntExtra( "level" , 0 );
         initBg(config.getDayOrNight());
         measureMarginWidth();
     }
@@ -615,7 +621,7 @@ public static boolean busy(){
         String status = "";
         switch (mStatus){
             case OPENING:
-                status = "正在拼命加载"+loadingTxt;
+                status = loadingTxt+ "正在拼命加载" ;
                 mAd.showRefresh(View.GONE);
                 break;
             case FAIL:
@@ -694,7 +700,7 @@ public static boolean busy(){
                         }
                         if(lastPageTime>0) {
                             long time = new Date().getTime() - lastPageTime;
-                            Log.d(TAG, String.format("prepare book read time last %s,current %s,spent %s",lastPageTime,new Date().getTime(), time));
+                   //         Log.d(TAG, String.format("prepare book read time last %s,current %s,spent %s",lastPageTime,new Date().getTime(), time));
                             if (time > 1000) {
                                 getNovel().setReadtime(getNovel().getReadtime() + time);
                             }
@@ -705,11 +711,11 @@ public static boolean busy(){
                         //	 * column won't be updated.
                         //   getNovel().save();
 
-                     Novel nv = LitePal.find(Novel.class,getNovel().getId());
+              /*       Novel nv = LitePal.find(Novel.class,getNovel().getId());
                         Log.d(TAG,String.format("prepare book %s ,%s isUpdated %s,saved isUpdated %s, saved lastchapt %s,lastpos %s, db lastchapt %s last pos %s",
                                 getNovel().getId(),
                                 getNovel().getName(),getNovel().isUpdated(),nv.isUpdated(),
-                                currentChapter,currentPage.getBegin(),nv.getLastReadChapt(),nv.getLastReadPos()));
+                                currentChapter,currentPage.getBegin(),nv.getLastReadChapt(),nv.getLastReadPos()));*/
 
                      lastPageTime = new Date().getTime();
 
@@ -785,9 +791,12 @@ public static boolean busy(){
         c.drawText(strPercent, mWidth - nPercentWidth, botoomY, mBatterryPaint);//x y为坐标值
         c.drawText(date, marginWidth ,botoomY, mBatterryPaint);
         // 画电池
-        level = batteryInfoIntent.getIntExtra( "level" , 0 );
+        Log.d(TAG, String.format("updateBattery to draw:   level1 %s ",level));
+      //  level = batteryInfoIntent.getIntExtra( "level" , 0 );
         int scale = batteryInfoIntent.getIntExtra("scale", 100);
         mBatteryPercentage = (float) level / scale;
+        Log.d(TAG, String.format("updateBattery to draw:   level2 %s ",level));
+
         float rect1Left = marginWidth + dateWith + statusMarginBottom;//电池外框left位置
         //画电池外框
         float width = CommonUtil.convertDpToPixel(mContext,20) - mBorderWidth;
@@ -1343,6 +1352,8 @@ if(book==null){
     public void updateBattery(int mLevel){
         mAd.hideSystemUI();
         if (currentPage != null && mBookPageWidget != null && !mBookPageWidget.isRunning()) {
+
+            Log.d(TAG, String.format("updateBattery: level old %s, new %s",level,mLevel));
             if (level != mLevel) {
                 level = mLevel;
                 currentPage(false);
@@ -1404,6 +1415,7 @@ if(book==null){
         mPaint.setTextSize(m_fontSize);
         calculateLineCount();
         measureMarginWidth();
+        chaptMap.clear();
         currentChaptPages =   loadCurrentChapt(currentChapter );
         currentPage = getPageForBegin(currentPage.getBegin());
         currentPage(true);
@@ -1415,6 +1427,7 @@ if(book==null){
         mPaint.setTextSize(m_fontSize);
         calculateLineCount();
         measureMarginWidth();
+        chaptMap.clear();
         currentChaptPages =   loadCurrentChapt(currentChapter );
         currentPage = getPageForBegin(currentPage.getBegin());
         currentPage(true);
@@ -1427,7 +1440,7 @@ if(book==null){
         mBatterryPaint.setTypeface(typeface);
         calculateLineCount();
         measureMarginWidth();
-
+        chaptMap.clear();
         currentPage = getPageForBegin(currentPage.getBegin());
         currentPage(true);
     }
@@ -1499,7 +1512,9 @@ if(book==null){
         Log.d(TAG, String .format("prepare Book: clearing book info %s" ,  getNovle().getName()));
         fileRetryCnt.clear();
         lastPageTime=0;
-        chaptMap.clear();
+       if(chaptMap!=null){
+           chaptMap.clear();
+       }
         //mBookUtil=null;
         currentChapter = 0;
         bookPath = "";
diff --git a/zhuike/src/main/res/layout/activity_chgsource.xml b/zhuike/src/main/res/layout/activity_chgsource.xml
index 4e20b17..6ce187a 100644
--- a/zhuike/src/main/res/layout/activity_chgsource.xml
+++ b/zhuike/src/main/res/layout/activity_chgsource.xml
@@ -6,14 +6,12 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:fitsSystemWindows="true"
+    android:clipToPadding="true"
     tools:context=".Activity_ChgSource">
 
     <android.support.design.widget.AppBarLayout
         android:id="@+id/appbar"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingTop="@dimen/appbar_padding_top"
-        android:theme="@style/ToolBarTheme.AppBarOverlay">
+        style="@style/barLayout">
 
         <android.support.v7.widget.Toolbar
             android:id="@+id/toolbar"
@@ -30,7 +28,7 @@
         android:id="@+id/recycleView"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_marginTop="60dp"
+        android:layout_marginTop="50dp"
         android:divider="@color/list_item_divider"
         >
     </android.support.v7.widget.RecyclerView>
diff --git a/zhuike/src/main/res/layout/fragment_book_store.xml b/zhuike/src/main/res/layout/fragment_book_store.xml
index 555c603..9cfa5e7 100644
--- a/zhuike/src/main/res/layout/fragment_book_store.xml
+++ b/zhuike/src/main/res/layout/fragment_book_store.xml
@@ -17,7 +17,7 @@
         app:tl_indicator_width="45dp"
         app:tl_textSelectColor="@color/tabSelected"
         app:tl_textUnselectColor="@color/grey"
-       app:tl_textsize="17sp"
+       app:tl_textsize="16sp"
         app:tl_textBold="SELECT"
         app:tl_tab_space_equal ="true"
         app:tl_indicator_bounce_enable ="true"
diff --git a/zhuike/src/main/res/layout/fragment_shelf_botoomsheetdialog.xml b/zhuike/src/main/res/layout/fragment_shelf_botoomsheetdialog.xml
index f584d11..f35dc6a 100644
--- a/zhuike/src/main/res/layout/fragment_shelf_botoomsheetdialog.xml
+++ b/zhuike/src/main/res/layout/fragment_shelf_botoomsheetdialog.xml
@@ -12,25 +12,30 @@
     <RelativeLayout
         android:id="@+id/top_layout"
         android:layout_width="match_parent"
-        android:layout_height="90dp"
+        android:layout_height="120dp"
         android:elevation="1dp"
         tools:ignore="UnusedAttribute">
 
-        <FrameLayout
+        <LinearLayout
+            android:clickable="true"
+            android:id="@+id/llBookdetail"
             android:layout_width="match_parent"
-            android:layout_height="75dp"
+            android:layout_height="100dp"
             android:background="@color/white"
             android:layout_alignParentBottom="true"
-            android:paddingStart="120dp"
+            android:paddingStart="100dp"
             android:paddingLeft="120dp"
+            android:orientation="horizontal"
             >
 
             <LinearLayout
-                android:layout_width="wrap_content"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center_vertical"
-                android:paddingBottom="15dp"
-
+                android:paddingStart="15dp"
+                android:paddingRight="10dp"
+                android:layout_weight="1"
+                android:background="@drawable/item_selector"
                 android:orientation="vertical">
 
                 <TextView
@@ -41,6 +46,7 @@
                     android:textColor="@color/colorPrimary"
                     android:textSize="16sp"
                     android:textStyle="bold"
+                    android:ellipsize="marquee"
                     tools:ignore="HardcodedText,TextViewEdits" />
 
 
@@ -52,15 +58,38 @@
                     android:text="金庸"
                     tools:ignore="HardcodedText" />
 
+                <TextView
+                android:layout_marginTop="2dp"
+                android:id="@+id/txtLatestCate"
+                style="@style/TextViewDesc"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:lines="1"
+                android:ellipsize="end"
+                android:text=""
+
+                />
+
+                <TextView
+                    android:id="@+id/txtLatestUpdate"
+                    style="@style/TextViewDesc.small"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:lines="1"
+                    android:text=""
+
+                    />
+
+
             </LinearLayout>
 
 
-        </FrameLayout>
+        </LinearLayout>
 
         <android.support.v7.widget.CardView
             android:id="@+id/cardView"
             android:layout_width="80dp"
-            android:layout_height="150dp"
+            android:layout_height="130dp"
             android:layout_marginEnd="14dp"
             android:layout_marginRight="14dp"
             android:layout_marginStart="20dp"
@@ -85,129 +114,74 @@
 
 
 
-
-
-
-
-
-
-
-
-
     <LinearLayout
 
         android:orientation="horizontal"
         android:layout_width="match_parent"
-        android:layout_height="200dp"
-        android:gravity="center"
+        android:layout_height="wrap_content"
+        android:gravity="bottom"
         android:background="@color/white"
+        android:padding="10dp"
+        android:paddingBottom="5dp"
         >
 
+
         <LinearLayout
             android:orientation="vertical"
             android:layout_width="60dp"
-            android:layout_height="70dp"
-            android:id="@+id/llBookdetail"
-            android:gravity="center"
+            android:layout_height="wrap_content"
+            android:id="@+id/llClearCache"
+            android:gravity="bottom"
             android:background="@drawable/item_selector"
             android:clickable="true"
-            android:layout_weight="1">
-            <ImageView
-
+            >
+            <TextView
+                android:id="@+id/tvCache"
                 android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:gravity="center"
-                android:src="@drawable/googleg_standard_color_18" />
+                android:layout_height="20dp"
+
+                android:layout_gravity="center"
+                android:text=""
+
+                android:textColor="#212121" />
 
             <TextView
-
                 android:layout_width="wrap_content"
-                android:layout_height="30dp"
+                android:layout_height="20dp"
 
-                android:gravity="center"
-                android:text="书籍详情"
+                android:layout_gravity="center"
+                android:text="清除缓存"
 
                 android:textColor="#212121" />
 
         </LinearLayout>.
+
         <LinearLayout
+            android:id="@+id/llTop"
             android:orientation="vertical"
-            android:layout_width="60dp"
-            android:layout_height="70dp"
-
-            android:gravity="center"
-            android:background="@drawable/item_selector"
-            android:clickable="true"
-            android:layout_weight="1">
-            <ImageView
-
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:gravity="center"
-                android:src="@drawable/googleg_standard_color_18" />
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="30dp"
-
-                android:gravity="center"
-                android:text="目录书摘"
-
-                android:textColor="#212121" />
-
-        </LinearLayout>.
-        <LinearLayout
-            android:orientation="vertical"
-            android:layout_width="60dp"
-            android:layout_height="70dp"
-            android:gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="bottom|center_horizontal"
 
             android:background="@drawable/item_selector"
             android:clickable="true"
-            android:layout_weight="1">
+            android:layout_marginStart="5dp"
+            android:layout_marginEnd="5dp"
+           >
             <ImageView
-
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
+                android:id="@+id/imageTop"
+                android:layout_width="30dp"
+                android:layout_height="30dp"
                 android:layout_weight="1"
                 android:gravity="center"
-                android:src="@drawable/googleg_standard_color_18" />
+                android:src="@mipmap/star_active" />
 
             <TextView
+                android:id="@+id/tvTop"
                 android:layout_width="wrap_content"
-                android:layout_height="30dp"
-
+                android:layout_height="20dp"
                 android:gravity="center"
-                android:text="查看书评"
-
-                android:textColor="#212121" />
-
-        </LinearLayout>.
-        <LinearLayout
-            android:orientation="vertical"
-            android:layout_width="60dp"
-            android:layout_height="70dp"
-            android:gravity="center"
-
-            android:background="@drawable/item_selector"
-            android:clickable="true"
-            android:layout_weight="1">
-            <ImageView
-
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:gravity="center"
-                android:src="@drawable/googleg_standard_color_18" />
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="30dp"
-
-                android:gravity="center"
-                android:text="下载本书"
+                android:text="置顶显示"
 
                 android:textColor="#212121" />
 
diff --git a/zhuike/src/main/res/layout/recycle_list_item.xml b/zhuike/src/main/res/layout/recycle_list_item.xml
index 843ca98..dc46186 100644
--- a/zhuike/src/main/res/layout/recycle_list_item.xml
+++ b/zhuike/src/main/res/layout/recycle_list_item.xml
@@ -20,13 +20,23 @@
         android:src="@drawable/googleg_standard_color_18" />
         <ImageView
             android:id="@+id/imageUpdated"
-             android:layout_width="38dp"
-            android:layout_height="38dp"
+             android:layout_width="35dp"
+            android:layout_height="35dp"
             android:layout_gravity="end"
             android:layout_marginTop="2dp"
             android:layout_marginRight="6dp"
             android:visibility="gone"
             android:src="@drawable/ic_book_update_flag" />
+        <ImageView
+            android:id="@+id/imageTop"
+            android:layout_width="15dp"
+            android:layout_height="15dp"
+            android:layout_gravity="start"
+            android:layout_marginTop="2dp"
+            android:layout_marginRight="6dp"
+            android:visibility="gone"
+            android:src="@mipmap/star_active" />
+
         <CheckBox
             android:id="@+id/id_check_box"
             android:layout_width="wrap_content"
diff --git a/zhuike/src/main/res/layout/recycle_list_item_horizon.xml b/zhuike/src/main/res/layout/recycle_list_item_horizon.xml
index 6e25ec6..ace57a5 100644
--- a/zhuike/src/main/res/layout/recycle_list_item_horizon.xml
+++ b/zhuike/src/main/res/layout/recycle_list_item_horizon.xml
@@ -10,10 +10,47 @@
     android:paddingBottom="4dp"
     android:paddingTop="4dp"
     android:layout_weight="1">
-    <ImageView
-        android:id="@+id/imageView"
-        style="@style/NovelImage.horizon"
-        android:src="@drawable/googleg_standard_color_18" />
+
+
+    <FrameLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content">
+
+        <ImageView
+            android:id="@+id/imageView"
+            style="@style/NovelImage.horizon"
+            android:src="@drawable/googleg_standard_color_18" />
+        <ImageView
+            android:id="@+id/imageTop1"
+            android:layout_width="25dp"
+            android:layout_height="25dp"
+            android:layout_gravity="start"
+            android:layout_marginTop="2dp"
+            android:layout_marginRight="6dp"
+            android:visibility="gone"
+            android:src="@drawable/sc_top_one" />
+        <ImageView
+            android:id="@+id/imageTop2"
+            android:layout_width="25dp"
+            android:layout_height="25dp"
+            android:layout_gravity="start"
+            android:layout_marginTop="2dp"
+            android:layout_marginRight="6dp"
+            android:visibility="gone"
+            android:src="@drawable/sc_top_two" />
+        <ImageView
+            android:id="@+id/imageTop3"
+            android:layout_width="25dp"
+            android:layout_height="25dp"
+            android:layout_gravity="start"
+            android:layout_marginTop="2dp"
+            android:layout_marginRight="6dp"
+            android:visibility="gone"
+            android:src="@drawable/sc_top_three" />
+    </FrameLayout>
+
+
+
     <LinearLayout
         android:orientation="vertical"
         android:layout_width="match_parent"
diff --git a/zhuike/src/main/res/layout/recycle_list_one_item.xml b/zhuike/src/main/res/layout/recycle_list_one_item.xml
index d5a6e39..cc378fe 100644
--- a/zhuike/src/main/res/layout/recycle_list_one_item.xml
+++ b/zhuike/src/main/res/layout/recycle_list_one_item.xml
@@ -10,13 +10,14 @@
 
 
             <TextView
-                style="@style/TextViewNovelTitle.horizon.bold"
+                style="@style/NovelBlockTitle"
                 android:id="@+id/tvText"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_centerInParent="true"
                 android:layout_centerVertical="true"
+                android:textSize="18sp"
                 android:text="@string/noRecord"
                  />
-           <!-- <LinearLayout  style="@style/llGraySplit.2dp"/>-->
+
 </LinearLayout>
\ No newline at end of file
diff --git a/zhuike/src/main/res/mipmap-mdpi/star_active.png b/zhuike/src/main/res/mipmap-mdpi/star_active.png
new file mode 100644
index 0000000000000000000000000000000000000000..748743dbf07844adcec97c2a5faebea769a89383
GIT binary patch
literal 985
zcmV;~119{5P)<h;3K|Lk000e1NJLTq002b*002b@0{{R3D^uGW0001-P)t-ss;a7q
zrqc1WHo>cU&aP+GuU_D<O!Boh>#{oMut4jwJoL9W^0hYbv^MFpJ>#%L@w7JbwKnm!
zHs`TF^tU(gv^MdyHu1DJ?6NuWv^MdyH}A7I@U%DVvO3|gO7XQe@wGPav^VjzH}tkP
z@w7JZv^MaxH}11I?6ElPvN-XzHuAML@U%AXvp4OsIPkMJ?Xx-VvN!LuHu1DJ4S4Y8
z0000obW%=J0|ER41qTc3DitLD^|K!m_}<hR@Y%VXH}8gMUNH~Ak9l?F&d7aDK|HCS
zm2gVsMph(1h~xkO0=h{=K~z}7?bp|m;xG^eP$W6$j1xAt0h`QN|Nn2RnS~OmXl(Xn
ztL8ouPPJMXwI;tA8N~9jA^J1LCLbzdJTIe4`-~y8O`z+|%KvCR_9~!#uY0Zdfg-F+
zz3+R9rxyCO6vnt;;%J7fm$d(h!-^SSO49!g4aXLP1XjvLakkb-#ZFmQE{xX-Xbdum
zONLw&W9N@jidtq0FXk|&7&MC*!sE<G6ob^2+~36elF;Dw<RQIPaMXzdl_Fo@{x;Mx
zJL!Fah>})&9O11gGfff*^mRd$3e{H*mDw=lF}N}Jo#v~BBs|B&Lba52o2A=m;U<{&
zPeZXBF3jmFKgEir7UG?uwe@^chKb=gn3wS!!j56cUbIc?))KA|VK#LgU8nu~p;Xs(
zH`O?T{CS}FBceAs{|zCfWXPBVsm&G59H-ErD!5`-G964jKBCGtpd*lGrJ|d|Ynu#b
z+?7Qx!ey_ARzuyIA9kD>*c*nRdj%0?K7^s+-hVn_3}7hs_Pnuo%<f$VhZ#p67uCFn
zcpP~Q(RKlSXLm9iy&e)Uj2Js$o{?&}HFVJm&?&U+p%_yY0gAdaAmx~ekRt69NC{5_
z95-?qY|9Kmiui^SgNjrqkP@B*NU`VtqPv!fAtgyANKuv)T9Grg0fn4G_+P=)pxZ-s
z>_KMP5nzkb1XkQ!0Jdmq(A)CAbEn9AV5rheOs^YxT$-DW=_NO>2C4MAx!v-5#&tJY
zr&tyni=qZoZUYas@Wp3B>~3>KL_d+@eI)aDOzpLjyY$?T<0jXbaqbs$sxqPUJZ%C>
z>(Ot6%4ViWXXEVH>vUoKIM@WP7S@z~5X(^=UkvUL^)P1+rcG4<cf5GF45KP82sd~+
zf`3ROudFoi>T9h}Gn*UtjymgNl}x}8^6D~=2qBZ-{D1iaUeHD-pRsLe00000NkvXX
Hu0mjfszBf~

literal 0
HcmV?d00001

diff --git a/zhuike/src/main/res/mipmap-mdpi/star_inactive.png b/zhuike/src/main/res/mipmap-mdpi/star_inactive.png
new file mode 100644
index 0000000000000000000000000000000000000000..c59f8ba20a2b2dfb36a0fc66c805fb1e34380fec
GIT binary patch
literal 1184
zcmeAS@N?(olHy`uVBq!ia0vp^t{}|83?#LKZ%YHIt^l79*VU_67Znv9IdY_-p`oXz
z2grti%F0S0qrAMl6buRr3xV8{k`jn)ad9z(ft3qU3?zZdAONlyE(H+*av>r>WzSE2
zUkP-TPDzkoF!L`)4%V-iPw>4Kk`deNpct@I-*Wo<rw1R#nA}*`RHCJJHqWDD#nQ^u
zxuFxRGgmHUU|^o<>Eaj?aro`@m)B+)2(<AkwuEy0-p9FU{=<Ly>xExrZVXM@T3_Y&
z+1s~bMrC?;`~TN>mul2AF1o$#pQdxE{`T8PL+uyuaQ5=B+9B_F#_HLIo|AtVn)db;
zw^&@?_u==&Os^xHOIwtW|34tleCEWacf#|p2)7>BzP*O!O!Z~;hx|oFt{-K81nhf0
z*|w3>waxK~ey-uGwLcClzL=oRWU=RUaPhqz7kdPjZ>%)7i?7JOk@BywCak`$!^EZj
z-Q=p0X+Qq_QH^IR3yF81;duVUtMhwrsJvtjp31!8o!o2VUcu)dQ?zGi87!YtEOL3H
z-7c%J`N}1?ziTZwU|^gu`*-$a2D65qrqFr$uYW9*UM+aB$$@Px>l3-l>c@6TAN``^
z^XsaT?Tk4}PMa-Uc+RdY{@b{=@@)p2V0xN}=sA%Y-zW5}o1Ks^^v(UXr^m+9H;0!P
z?Aza$_A54FrNNXXZ>(ycev7*v&X@KtG(OU+rMN`8YOlG&xlN~vxS5@-qBcxT50!N8
zye6G|MpH<0>1yc~mL;#;+bTj{o>E)Nb?)-5DMs6VUS3|K_wLumQsqVFkFG0P2=A1M
zDtA0HeHUk({^W*S`5WhYG-`G>Z&8%E|2ORMgJmzeu4N0X?s7bF@6Xx5@RA9SK3z(=
zuFtxss6gK3u>3)fswzh*9XB4!-~G3vn=B-2D}SGG513|KDKA#$W*+WVcsRq8`)MKH
zjn!#FnP)itj!yk+;yPQ~WAYob>!n8~W^aDH@r0_;jomYi4oxgFw=ZP7H0A8Ok{4+z
z-AkeuS#o~Uh%=nLT6dzJ%I2~l)hV+zPkJp7k-H~5%a~Jj+l}y<y3744RF;?QzQtL3
ze%g|V^BM2@*f~?D1iG1APS|dHQF7`#N4ZSS)?#<3OxXobs{eZyE!Ys|lvtDYuWVIR
zZgwvFruio{eGjD{-!HwQPxza`P5x8mT+K~WzodUuOSfFi@JQ%Vhl0x@y*&rs#98zn
zetzV>yz#yZ>p~wWJxVv<<@fcgn8V>S?bTB*O>;Q;{dxR7N8jyLuS0cQWyCy9byb<#
zlFTaBzUz}IN}Mmm(3<);QdwJRXPn=1?-@&8m*>7QZd)SqaN@$F-I8o81RJCl1Tb((
z));zpTeA13h;DdsK-o8jnNjf^x4@n2TRQZuJYREEi<~v~iewea5%#lOlO%X!>81L-
zW#XHPPB2LyD%`KkG(Fw<q|^B+{C21FbN+lelxY5MlEtT`Z}R`e|9|w0t$$mxSibEI
RK49i%@O1TaS?83{1OUR$D1ZO}

literal 0
HcmV?d00001

diff --git a/zhuike/src/main/res/values/colors.xml b/zhuike/src/main/res/values/colors.xml
index eeb1e61..d7a91d7 100644
--- a/zhuike/src/main/res/values/colors.xml
+++ b/zhuike/src/main/res/values/colors.xml
@@ -8,6 +8,7 @@
     <color name="black">#000000</color>
     <color name="gray">#000000</color>
     <color name="white">#ffffff</color>
+    <color name="blacktitle">#212121</color>
     <color name="ivory">#FFFFF0</color> <!--象牙色 -->
     <color name="lightyellow">#FFFFE0</color><!--亮黄色-->
     <color name="yellow">#FFFF00</color><!--黄色 -->
diff --git a/zhuike/src/main/res/values/styles.xml b/zhuike/src/main/res/values/styles.xml
index 0002c75..a9a565b 100644
--- a/zhuike/src/main/res/values/styles.xml
+++ b/zhuike/src/main/res/values/styles.xml
@@ -180,7 +180,7 @@
         <item name="android:layout_width">wrap_content</item>
         <item name="android:layout_height">30dp</item>
         <item name="android:gravity">center</item>
-        <item name="android:textColor">#212121</item>
+        <item name="android:textColor">@color/blacktitle</item>
         <item name="android:maxLines">1</item>
 
     </style>
@@ -301,19 +301,19 @@
 
     <style name="TextViewNovelTitle">
         <item name="android:layout_marginLeft">0dp</item>
-        <item name="android:textColor">#212121</item>
+        <item name="android:textColor">@color/blacktitle</item>
         <item name="android:layout_height">25dp</item>
         <item name="android:layout_gravity">left</item>
         <item name="android:layout_width">wrap_content</item>
         <item name="android:lines">1</item>
         <item name="android:textSize">14dp</item>
-        <!--<item name="android:ellipsize">end</item>-->
-        <item name="android:ellipsize">marquee</item>
+        <item name="android:ellipsize">end</item>
+        <!--<item name="android:ellipsize">marquee</item>-->
     </style>
 
     <style name="TextViewNovelAuthor">
         <item name="android:layout_marginLeft">10dp</item>
-        <item name="android:textColor">#212121</item>
+        <item name="android:textColor">@color/blacktitle</item>
         <item name="android:textSize">12sp</item>
         <item name="android:layout_width">wrap_content</item>
         <item name="android:layout_height">wrap_content</item>
@@ -322,7 +322,7 @@
 
     <style name="TextViewNovelType">
         <item name="android:layout_marginLeft">10dp</item>
-        <item name="android:textColor">@color/colorAccent</item>
+        <item name="android:textColor">@color/colorPrimaryDark</item>
         <item name="android:textSize">12sp</item>
         <item name="android:layout_width">wrap_content</item>
         <item name="android:layout_height">wrap_content</item>
@@ -371,7 +371,7 @@
     <style name="NovelBlockTitle">
         <item name="android:layout_marginLeft">4dp</item>
         <item name="android:layout_gravity">left|center_vertical</item>
-        <item name="android:textColor">#212121</item>
+        <item name="android:textColor">@color/blacktitle</item>
         <item name="android:layout_width">match_parent</item>
         <item name="android:layout_height">20dp</item>
         <item name="android:layout_weight">1</item>
@@ -389,7 +389,7 @@
     </style>
 
     <style name="TextViewCateTitle">
-        <item name="android:textColor">#212121</item>
+        <item name="android:textColor">@color/blacktitle</item>
         <item name="android:lines">1</item>
         <item name="android:ellipsize">end</item>
     </style>
@@ -417,7 +417,7 @@
 
     <style name="TextViewNovelType.Status">
 
-        <item name="android:textColor">@color/mediumturquoise</item>
+        <item name="android:textColor">@color/colorPrimary</item>
         <item name="android:textSize">12sp</item>
 
     </style>