From 5fcb00da5ea20a9f0aa0c4b340c8ff98e9570a87 Mon Sep 17 00:00:00 2001 From: mwang <8205347@qq.com> Date: Mon, 15 Apr 2019 23:26:24 +0800 Subject: [PATCH] add search fix bugs --- zhuike/build.gradle | 2 + zhuike/src/main/AndroidManifest.xml | 29 +--- .../novelbook/android/Activity_Search.java | 73 ++++++++ .../android/Activity_paihangbang.java | 53 +----- .../java/com/novelbook/android/Config.java | 12 ++ .../android/Fragments/BasicFragment.java | 18 +- .../android/Fragments/Fragment_booklist.java | 104 ++++++----- .../com/novelbook/android/Main2Activity.java | 66 ++++--- .../com/novelbook/android/Main3Activity.java | 44 ----- .../com/novelbook/android/Main4Activity.java | 101 ----------- .../com/novelbook/android/Main6Activity.java | 138 --------------- .../com/novelbook/android/Main7Activity.java | 161 ------------------ .../com/novelbook/android/MainActivity.java | 82 --------- .../android/adapter/CatalogueAdapter.java | 4 +- .../java/com/novelbook/android/db/Novel.java | 4 + .../com/novelbook/android/netapi/HttpApi.java | 3 + .../android/netsubscribe/BookSubscribe.java | 6 + .../com/novelbook/android/utils/BookUtil.java | 72 +++++--- .../novelbook/android/utils/HistoryCache.java | 45 +++++ .../novelbook/android/utils/PageFactory.java | 20 ++- .../res/drawable-v24/button_select_bg.xml | 12 +- zhuike/src/main/res/drawable/button_bg.xml | 10 +- .../ic_favorite_border_black_24dp.xml | 5 + .../drawable/ic_library_books_black_24dp.xml | 5 + .../res/drawable/ic_search_white_24dp.xml | 5 + .../drawable/ic_star_border_black_24dp.xml | 5 + .../main/res/drawable/item_selector_red.xml | 3 +- .../main/res/drawable/rb_nobtn_selector.xml | 7 + zhuike/src/main/res/drawable/side_nav_bar.xml | 12 +- .../src/main/res/layout/activity_search.xml | 22 +++ zhuike/src/main/res/layout/app_bar_main2.xml | 16 +- .../layout/content_activity_cate_books.xml | 4 +- .../layout/content_activity_paihangbang.xml | 4 +- .../res/layout/content_activity_search.xml | 27 +++ .../res/layout/content_activity_shudan_my.xml | 4 +- zhuike/src/main/res/layout/content_book.xml | 7 +- .../main/res/layout/fragment_book_store.xml | 6 +- .../src/main/res/layout/fragment_jingxuan.xml | 8 +- zhuike/src/main/res/layout/fragment_other.xml | 2 +- .../src/main/res/layout/fragment_shudan.xml | 4 +- zhuike/src/main/res/layout/realcontent.xml | 1 + .../layout/recycle_list_item_bangdanNew.xml | 6 +- .../res/layout/recycle_list_item_cates.xml | 7 +- zhuike/src/main/res/layout/zactivity_mark.xml | 4 +- zhuike/src/main/res/menu/main.xml | 7 +- zhuike/src/main/res/menu/navigation.xml | 6 +- .../src/main/res/mipmap-mdpi/search_128.png | Bin 0 -> 4386 bytes zhuike/src/main/res/values/colors.xml | 9 +- zhuike/src/main/res/values/styles.xml | 21 ++- zhuike/zhuike.iml | 1 + 50 files changed, 504 insertions(+), 763 deletions(-) create mode 100644 zhuike/src/main/java/com/novelbook/android/Activity_Search.java delete mode 100644 zhuike/src/main/java/com/novelbook/android/Main3Activity.java delete mode 100644 zhuike/src/main/java/com/novelbook/android/Main4Activity.java delete mode 100644 zhuike/src/main/java/com/novelbook/android/Main6Activity.java delete mode 100644 zhuike/src/main/java/com/novelbook/android/Main7Activity.java delete mode 100644 zhuike/src/main/java/com/novelbook/android/MainActivity.java create mode 100644 zhuike/src/main/java/com/novelbook/android/utils/HistoryCache.java create mode 100644 zhuike/src/main/res/drawable/ic_favorite_border_black_24dp.xml create mode 100644 zhuike/src/main/res/drawable/ic_library_books_black_24dp.xml create mode 100644 zhuike/src/main/res/drawable/ic_search_white_24dp.xml create mode 100644 zhuike/src/main/res/drawable/ic_star_border_black_24dp.xml create mode 100644 zhuike/src/main/res/drawable/rb_nobtn_selector.xml create mode 100644 zhuike/src/main/res/layout/activity_search.xml create mode 100644 zhuike/src/main/res/layout/content_activity_search.xml create mode 100644 zhuike/src/main/res/mipmap-mdpi/search_128.png diff --git a/zhuike/build.gradle b/zhuike/build.gradle index 1863be4..eacfb6e 100644 --- a/zhuike/build.gradle +++ b/zhuike/build.gradle @@ -81,5 +81,7 @@ dependencies { implementation 'jp.wasabeef:glide-transformations:2.0.1' implementation 'com.timqi.collapsibletextview:library:1.1.2' // implementation 'com.ms-square:expandableTextView:0.1.4' + // implementation 'com.github.tangguna:SearchBox:1.0.1' + implementation 'com.github.chengzipi:Searchbox:v1.0.0' } diff --git a/zhuike/src/main/AndroidManifest.xml b/zhuike/src/main/AndroidManifest.xml index ab68f31..0bc1729 100644 --- a/zhuike/src/main/AndroidManifest.xml +++ b/zhuike/src/main/AndroidManifest.xml @@ -42,30 +42,17 @@ android:launchMode="singleTask" android:parentActivityName=".Main2Activity" android:theme="@style/ToolBarTheme.NoActionBar" /> - - - - - - - - diff --git a/zhuike/src/main/java/com/novelbook/android/Activity_Search.java b/zhuike/src/main/java/com/novelbook/android/Activity_Search.java new file mode 100644 index 0000000..10412ba --- /dev/null +++ b/zhuike/src/main/java/com/novelbook/android/Activity_Search.java @@ -0,0 +1,73 @@ +package com.novelbook.android; + +import android.content.Intent; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; + +import com.czp.searchmlist.mSearchLayout; +import com.novelbook.android.utils.HistoryCache; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class Activity_Search extends AppCompatActivity { + + + @BindView(R.id.msearchlayout) + mSearchLayout searchLayout; + // SearchLayout searchLayout; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_search); + ButterKnife.bind(this); + initialSearch(); + } + + + void initialSearch() { + + List skills = HistoryCache.toArray(getApplicationContext()); + String shareHotData ="武动乾坤,校花高手,苍穹"; //TODO get hot keys from host + List skillHots = Arrays.asList(shareHotData.split(",")); + this.searchLayout.initData(skills, skillHots, new mSearchLayout.setSearchCallBackListener() { + public void Search(String str) { + //进行或联网搜索 str搜索关键词 + Intent intent = new Intent(Activity_Search.this, Activity_paihangbang.class); + intent.putExtra(Activity_paihangbang.EXTR_SEARCH,str); + intent.putExtra(Activity_paihangbang.EXTR_TITLE,"搜索小说:" + str ); + startActivity(intent); + } + + public void Back() { + //取消搜索 + finish(); + } + + public void ClearOldData() { + //清除历史搜索记录 执行更新本地 原始历史搜索数据 + } + + public void SaveOldData(ArrayList AlloldDataList) { + //保存所有历史搜索数据 请保保存以便下次使用 + HistoryCache.saveHistory(getApplicationContext(),HistoryCache.toJsonArray(AlloldDataList)); + Log.e("点击","保存数据"); + } + }); + + + } + + + + + +} diff --git a/zhuike/src/main/java/com/novelbook/android/Activity_paihangbang.java b/zhuike/src/main/java/com/novelbook/android/Activity_paihangbang.java index 650ca06..956b1fb 100644 --- a/zhuike/src/main/java/com/novelbook/android/Activity_paihangbang.java +++ b/zhuike/src/main/java/com/novelbook/android/Activity_paihangbang.java @@ -7,6 +7,7 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.widget.SearchView; +import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -29,6 +30,7 @@ public static String TAG ="com.novelbook.android.paihangbang"; public static String EXTR_FN="fn"; public static String EXTR_TITLE="title"; public static String EXTR_BANGDAN ="bangdan"; + public static final String EXTR_SEARCH ="search"; private ArrayList mFragments; ArrayList mList; String[] mTitle; @@ -45,6 +47,7 @@ public static String TAG ="com.novelbook.android.paihangbang"; String bangdan; String fn; + String keyword; @Override protected void setTitle() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { @@ -57,6 +60,7 @@ public static String TAG ="com.novelbook.android.paihangbang"; bangdan = getIntent().getStringExtra(EXTR_BANGDAN); String title = getIntent().getStringExtra(EXTR_TITLE); + keyword = getIntent().getStringExtra(EXTR_SEARCH); //title+="榜"; @@ -76,10 +80,12 @@ public static String TAG ="com.novelbook.android.paihangbang"; if(mFragments ==null || mFragments.size() ==0){ // mTitle = new String[]{"周榜", "月榜", "总榜"}; mFragments = new ArrayList<>(); - mFragments.add( Fragment_booklist.newInstance(fn,bangdan)); //首页更多 - - + if(!TextUtils.isEmpty(keyword)){ + mFragments.add( Fragment_booklist.search(keyword)); //搜索 + }else { + mFragments.add(Fragment_booklist.newInstance(fn, bangdan)); //首页更多 + } // mFragments.add(new Fragment_booklist()); @@ -109,49 +115,8 @@ public static String TAG ="com.novelbook.android.paihangbang"; // tabLayout.setViewPager(mViewpager, mTitle, activity, mFragments); mViewpager.setCurrentItem(0); } -//---search option - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_search, menu); - // Get the SearchView and set the searchable configuration - SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); - SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); - // Assumes current activity is the searchable activity - searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); - - /*searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){ - @Override - public boolean onQueryTextSubmit(String query) { - Log.i(TAG,query); - Toast.makeText(Activity_paihangbang.this,query,Toast.LENGTH_SHORT).show(); - return false; - } - - @Override - public boolean onQueryTextChange(String newText) { - return false; - } - }); - */ - return true; - } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } } diff --git a/zhuike/src/main/java/com/novelbook/android/Config.java b/zhuike/src/main/java/com/novelbook/android/Config.java index 63d39a1..6c5765a 100644 --- a/zhuike/src/main/java/com/novelbook/android/Config.java +++ b/zhuike/src/main/java/com/novelbook/android/Config.java @@ -49,6 +49,18 @@ public class Config { private float light = 0; private int bookBG; + public int getSexOption() { + return sp.getInt(SEX_OPTION_KEY,sexOption); + } + + public void setSexOption(int sexOption) { + sp.edit().putInt(SEX_OPTION_KEY,sexOption).commit(); + } + + //sexoption + public final static String SEX_OPTION_KEY="sexoption"; + private int sexOption =1; + private Config(Context mContext){ this.mContext = mContext.getApplicationContext(); sp = this.mContext.getSharedPreferences(SP_NAME,Context.MODE_PRIVATE); diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java b/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java index e58c2f4..4809203 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java @@ -202,14 +202,20 @@ public abstract class BasicFragment extends Fragment { }else { nv.save(); } + Log.d(TAG, String.format("prepare book %s 开始prepare.",nv.getName()) ); + // final Novel novel = nv; + /* new Thread(){ + @Override + public void run() { + super.run(); + + } + }.start();*/ PageFactory.getInstance().prepareBook(nv ); //打开本地小说内容 - try { - Thread.sleep(500); - } catch (InterruptedException e) { - e.printStackTrace(); - } - ReadActivity.openBook(novel ,activity); + + Log.d(TAG, String.format("prepare book %s 开始open book.",nv.getName()) ); + ReadActivity.openBook(nv ,activity); } 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 814f649..ade4c8e 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 @@ -36,7 +36,7 @@ import butterknife.BindView; public class Fragment_booklist extends BasicFragment { private static final String EXTR_CATE ="cate" ; private static final String EXTR_PROGRESS ="progress" ; - + private static final String EXTR_SEARCH ="search"; private static final String EXTR_FN ="fn" ; private static final String EXTR_BANGDAN ="bangdan" ; private BookListAdapter mAdapter; @@ -44,7 +44,7 @@ public class Fragment_booklist extends BasicFragment { private List mData;; private String cate; private int progress; - + private String keyWord; private String fn; private String bangdan; @@ -73,6 +73,15 @@ public class Fragment_booklist extends BasicFragment { fragment.setArguments(args); return fragment; } + public static Fragment_booklist search(String keyWord) { + Fragment_booklist fragment = new Fragment_booklist(); + Bundle args = new Bundle(); + args.putString(EXTR_SEARCH,keyWord); + + fragment.setArguments(args); + return fragment; + } + protected void processArguments(){ if (getArguments() != null) { Bundle bundle = getArguments() ; @@ -84,8 +93,7 @@ public class Fragment_booklist extends BasicFragment { } cate = bundle.getString(EXTR_CATE); progress = bundle.getInt(EXTR_PROGRESS); - - + keyWord =bundle.getString(EXTR_SEARCH); } } @@ -124,15 +132,40 @@ public class Fragment_booklist extends BasicFragment { return R.layout.fragment_fragment_booklist; } + + @Override public void initData() { - showProgressDialog(true, "正在加载"); + OnSuccessAndFaultListener successAndFaultListener = new OnSuccessAndFaultListener() { + @Override + public void onSuccess(String result) { + + // mFirstPage= gson.fromJson(result, FirstPage.class); + try { + + mData = GsonUtil. parserJsonArray(result,Constants.BLOCK_TITLE_NOVELS); + } catch (Exception e) { + e.printStackTrace(); + } + handler.sendEmptyMessage(1); + + } + + @Override + public void onFault(String errorMsg) { + //失败 + Log.d(TAG, "error on get firstpage: " + errorMsg); + handler.sendEmptyMessage(1); + } + }; + + Log.d(TAG,String.format("fn is %s",fn) ); if(!TextUtils.isEmpty(bangdan) && !TextUtils.isEmpty(fn)){ //榜单 - + showProgressDialog(true, "正在加载榜单"); BookSubscribe.getSiteRankDetail(fn,pageNo,Constants.SEX,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { @Override public void onSuccess(String result) { @@ -159,59 +192,18 @@ public class Fragment_booklist extends BasicFragment { }else if(!TextUtils.isEmpty(fn)){ //首页 更多 - - BookSubscribe.getNovelPaihang(fn,Constants.SEX,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { - @Override - public void onSuccess(String result) { - - // mFirstPage= gson.fromJson(result, FirstPage.class); - try { - - mData = GsonUtil. parserJsonArray(result,Constants.BLOCK_TITLE_NOVELS); - } catch (Exception e) { - e.printStackTrace(); - } - handler.sendEmptyMessage(1); - - } - - @Override - public void onFault(String errorMsg) { - //失败 - Log.d(TAG, "error on get firstpage: " + errorMsg); - handler.sendEmptyMessage(1); - } - }, getActivity())); - - + showProgressDialog(true, "正在加载更多"); + BookSubscribe.getNovelPaihang(fn,Constants.SEX,new OnSuccessAndFaultSub(successAndFaultListener, getActivity())); } + else if(!TextUtils.isEmpty((cate))) { //分类 + showProgressDialog(true, "正在加载分类"); + BookSubscribe.getCateNovelList(cate, pageNo, Constants.SEX, progress, new OnSuccessAndFaultSub(successAndFaultListener, getActivity())); - else - - - BookSubscribe.getCateNovelList(cate,pageNo,Constants.SEX,progress,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { - @Override - public void onSuccess(String result) { - - // mFirstPage= gson.fromJson(result, FirstPage.class); - try { - - mData = GsonUtil. parserJsonArray(result,Constants.BLOCK_TITLE_NOVELS); - } catch (Exception e) { - e.printStackTrace(); - } - handler.sendEmptyMessage(1); - - } - - @Override - public void onFault(String errorMsg) { - //失败 - Log.d(TAG, "error on get firstpage: " + errorMsg); - handler.sendEmptyMessage(1); - } - }, getActivity())); + }else if(!TextUtils.isEmpty(keyWord)){ //搜索 + showProgressDialog(true, "正在加载搜索"); + BookSubscribe.getSearchNovelList( keyWord,pageNo, Constants.SEX, new OnSuccessAndFaultSub(successAndFaultListener, getActivity())); + } } diff --git a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java index f9cc47a..6a9d9e8 100644 --- a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java +++ b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java @@ -22,6 +22,7 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; +import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; @@ -54,7 +55,7 @@ public class Main2Activity extends Activity_base BottomNavigationView botoomNavigation; @BindView(R.id.rgSex) RadioGroup rgSex; - + private Config config; @Override public int getLayoutRes() { return R.layout.activity_main2; @@ -70,13 +71,23 @@ public class Main2Activity extends Activity_base super.onCreate(savedInstanceState); app =(MyApp) getApplicationContext(); // requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); - + config =Config.getInstance(); // ButterKnife.bind(this); + initialSexOption(); } + void initialSexOption(){ + Constants.SEX = config.getSexOption(); + rgSex.clearCheck(); + // ((RadioButton) rgSex.getChildAt(0)).setChecked(Constants.SEX ==1); + // ((RadioButton) rgSex.getChildAt(1)).setChecked(Constants.SEX ==2); + ((RadioButton) rgSex.getChildAt(Constants.SEX-1)).setChecked(true); + Log.d(TAG, "onCreate: sexoption is" + Constants.SEX); + } + @Override protected void setTitle() { setTitle(""); @@ -150,6 +161,10 @@ public class Main2Activity extends Activity_base } else if(menuItemId == R.id.menuFinshi) { udateShelfZhengli(); + } if(menuItemId==R.id.menuSearch){ + Intent intent = new Intent(Main2Activity.this,Activity_Search.class); + startActivity(intent); + } return true; } @@ -204,14 +219,14 @@ public class Main2Activity extends Activity_base public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); - SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); - SearchView searchView = (SearchView) menu.findItem(R.id.menuSearch).getActionView(); + // SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); + // SearchView searchView = (SearchView) menu.findItem(R.id.menuSearch).getActionView(); // Assumes current activity is the searchable activity - searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); + // searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); return true; } - @Override + /* @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long @@ -222,9 +237,14 @@ public class Main2Activity extends Activity_base if (id == R.id.action_settings) { return true; } + if(id==R.id.menuSearch){ + Intent intent = new Intent(this,Activity_Search.class); + startActivity(intent); + + } return super.onOptionsItemSelected(item); - } + }*/ @SuppressWarnings("StatementWithEmptyBody") @Override @@ -418,33 +438,29 @@ private int bottomSelectedIndex; } +private void setSexOption(){ + int s = rgSex.getCheckedRadioButtonId() == R.id.radioButtonBoy ?1:2; + if(s!= Constants.SEX){ + Constants.SEX=s; + config.setSexOption(s); + Fragment current = getSupportFragmentManager().findFragmentById(R.id.realtabcontent); + if (current != null && current instanceof BasicFragment){ + ((BasicFragment)current).reload(); + } + } +} @OnClick({R.id.radioButtonBoy,R.id.radioButtonGirl}) void Onclick(View view){ - int s; + switch (view.getId()) { case R.id.radioButtonBoy: - s = rgSex.getCheckedRadioButtonId() == R.id.radioButtonBoy ?1:0; - if(s!= Constants.SEX){ - Constants.SEX=s; - Fragment current = getSupportFragmentManager().findFragmentById(R.id.realtabcontent); - if (current != null && current instanceof BasicFragment){ - ((BasicFragment)current).reload(); - } - - } + setSexOption(); break; case R.id.radioButtonGirl: - s = rgSex.getCheckedRadioButtonId() == R.id.radioButtonBoy ?1:0; - if(s!= Constants.SEX){ - Constants.SEX=s; - Fragment current = getSupportFragmentManager().findFragmentById(R.id.realtabcontent); - if (current != null && current instanceof BasicFragment){ - ((BasicFragment)current).reload(); - } - } + setSexOption(); break; } } diff --git a/zhuike/src/main/java/com/novelbook/android/Main3Activity.java b/zhuike/src/main/java/com/novelbook/android/Main3Activity.java deleted file mode 100644 index 4c81575..0000000 --- a/zhuike/src/main/java/com/novelbook/android/Main3Activity.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.novelbook.android; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.design.widget.BottomNavigationView; -import android.support.v7.app.AppCompatActivity; -import android.view.MenuItem; -import android.widget.TextView; - -public class Main3Activity extends AppCompatActivity { - - private TextView mTextMessage; - - private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener - = new BottomNavigationView.OnNavigationItemSelectedListener() { - - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.navigation_home: - mTextMessage.setText(R.string.title_home); - return true; - case R.id.navigation_dashboard: - mTextMessage.setText(R.string.title_dashboard); - return true; - case R.id.navigation_notifications: - mTextMessage.setText(R.string.title_notifications); - return true; - } - return false; - } - }; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main3); - - mTextMessage = (TextView) findViewById(R.id.message); - BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); - navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); - } - -} diff --git a/zhuike/src/main/java/com/novelbook/android/Main4Activity.java b/zhuike/src/main/java/com/novelbook/android/Main4Activity.java deleted file mode 100644 index aa1a3c0..0000000 --- a/zhuike/src/main/java/com/novelbook/android/Main4Activity.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.novelbook.android; - -import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; -import android.view.View; -import android.support.design.widget.NavigationView; -import android.support.v4.view.GravityCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.view.Menu; -import android.view.MenuItem; - -public class Main4Activity extends AppCompatActivity - implements NavigationView.OnNavigationItemSelectedListener { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main4); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); - } - }); - - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); - ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( - this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); - drawer.addDrawerListener(toggle); - toggle.syncState(); - - NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); - navigationView.setNavigationItemSelectedListener(this); - } - - @Override - public void onBackPressed() { - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); - if (drawer.isDrawerOpen(GravityCompat.START)) { - drawer.closeDrawer(GravityCompat.START); - } else { - super.onBackPressed(); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.main4, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } - - @SuppressWarnings("StatementWithEmptyBody") - @Override - public boolean onNavigationItemSelected(MenuItem item) { - // Handle navigation view item clicks here. - int id = item.getItemId(); - - if (id == R.id.nav_camera) { - // Handle the camera action - } else if (id == R.id.nav_gallery) { - - } else if (id == R.id.nav_slideshow) { - - } else if (id == R.id.nav_manage) { - - } else if (id == R.id.nav_share) { - - } else if (id == R.id.nav_send) { - - } - - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); - drawer.closeDrawer(GravityCompat.START); - return true; - } -} diff --git a/zhuike/src/main/java/com/novelbook/android/Main6Activity.java b/zhuike/src/main/java/com/novelbook/android/Main6Activity.java deleted file mode 100644 index 1d5ecf4..0000000 --- a/zhuike/src/main/java/com/novelbook/android/Main6Activity.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.novelbook.android; - -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; - -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; -import android.support.v4.view.ViewPager; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; - -import android.widget.TextView; - -public class Main6Activity extends AppCompatActivity { - - /** - * The {@link android.support.v4.view.PagerAdapter} that will provide - * fragments for each of the sections. We use a - * {@link FragmentPagerAdapter} derivative, which will keep every - * loaded fragment in memory. If this becomes too memory intensive, it - * may be best to switch to a - * {@link android.support.v4.app.FragmentStatePagerAdapter}. - */ - private SectionsPagerAdapter mSectionsPagerAdapter; - - /** - * The {@link ViewPager} that will host the section contents. - */ - private ViewPager mViewPager; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main6); - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - // Create the adapter that will return a fragment for each of the three - // primary sections of the activity. - mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); - - // Set up the ViewPager with the sections adapter. - mViewPager = (ViewPager) findViewById(R.id.container); - mViewPager.setAdapter(mSectionsPagerAdapter); - - // getSupportActionBar().setDisplayHomeAsUpEnabled(true); - - } - - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_main6, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } - - /** - * A placeholder fragment containing a simple view. - */ - public static class PlaceholderFragment extends Fragment { - /** - * The fragment argument representing the section number for this - * fragment. - */ - private static final String ARG_SECTION_NUMBER = "section_number"; - - public PlaceholderFragment() { - } - - /** - * Returns a new instance of this fragment for the given section - * number. - */ - public static PlaceholderFragment newInstance(int sectionNumber) { - PlaceholderFragment fragment = new PlaceholderFragment(); - Bundle args = new Bundle(); - args.putInt(ARG_SECTION_NUMBER, sectionNumber); - fragment.setArguments(args); - return fragment; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_main6, container, false); - TextView textView = (TextView) rootView.findViewById(R.id.section_label); - textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); - return rootView; - } - } - - /** - * A {@link FragmentPagerAdapter} that returns a fragment corresponding to - * one of the sections/tabs/pages. - */ - public class SectionsPagerAdapter extends FragmentPagerAdapter { - - public SectionsPagerAdapter(FragmentManager fm) { - super(fm); - } - - @Override - public Fragment getItem(int position) { - // getItem is called to instantiate the fragment for the given page. - // Return a PlaceholderFragment (defined as a static inner class below). - return PlaceholderFragment.newInstance(position + 1); - } - - @Override - public int getCount() { - // Show 3 total pages. - return 3; - } - } -} diff --git a/zhuike/src/main/java/com/novelbook/android/Main7Activity.java b/zhuike/src/main/java/com/novelbook/android/Main7Activity.java deleted file mode 100644 index a9d6cc4..0000000 --- a/zhuike/src/main/java/com/novelbook/android/Main7Activity.java +++ /dev/null @@ -1,161 +0,0 @@ -package com.novelbook.android; - -import android.graphics.Color; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; - -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; -import android.support.v4.view.ViewPager; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; - -import android.widget.TextView; - -import java.lang.reflect.Field; - -public class Main7Activity extends AppCompatActivity { - - /** - * The {@link android.support.v4.view.PagerAdapter} that will provide - * fragments for each of the sections. We use a - * {@link FragmentPagerAdapter} derivative, which will keep every - * loaded fragment in memory. If this becomes too memory intensive, it - * may be best to switch to a - * {@link android.support.v4.app.FragmentStatePagerAdapter}. - */ - private SectionsPagerAdapter mSectionsPagerAdapter; - - /** - * The {@link ViewPager} that will host the section contents. - */ - private ViewPager mViewPager; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - // if (android.os.Build.VERSION.SDK_INT >= 21) - { - //解决Android5.0以上,状态栏设置颜色后变灰的问题 - - // getWindow().setStatusBarColor(Color.TRANSPARENT); - try { - Class decorViewClazz = Class.forName("com.android.internal.policy.DecorView"); - Field field = decorViewClazz.getDeclaredField("mSemiTransparentStatusBarColor"); - field.setAccessible(true); - field.setInt(getWindow().getDecorView(), Color.TRANSPARENT); //设置透明 - } catch (Exception e) { } - } - setContentView(R.layout.activity_main7); - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - // Create the adapter that will return a fragment for each of the three - // primary sections of the activity. - mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); - - // Set up the ViewPager with the sections adapter. - mViewPager = (ViewPager) findViewById(R.id.container); - mViewPager.setAdapter(mSectionsPagerAdapter); - - FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); - } - }); - - - } - - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_main7, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } - - /** - * A placeholder fragment containing a simple view. - */ - public static class PlaceholderFragment extends Fragment { - /** - * The fragment argument representing the section number for this - * fragment. - */ - private static final String ARG_SECTION_NUMBER = "section_number"; - - public PlaceholderFragment() { - } - - /** - * Returns a new instance of this fragment for the given section - * number. - */ - public static PlaceholderFragment newInstance(int sectionNumber) { - PlaceholderFragment fragment = new PlaceholderFragment(); - Bundle args = new Bundle(); - args.putInt(ARG_SECTION_NUMBER, sectionNumber); - fragment.setArguments(args); - return fragment; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_main7, container, false); - TextView textView = (TextView) rootView.findViewById(R.id.section_label); - textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); - return rootView; - } - } - - /** - * A {@link FragmentPagerAdapter} that returns a fragment corresponding to - * one of the sections/tabs/pages. - */ - public class SectionsPagerAdapter extends FragmentPagerAdapter { - - public SectionsPagerAdapter(FragmentManager fm) { - super(fm); - } - - @Override - public Fragment getItem(int position) { - // getItem is called to instantiate the fragment for the given page. - // Return a PlaceholderFragment (defined as a static inner class below). - return PlaceholderFragment.newInstance(position + 1); - } - - @Override - public int getCount() { - // Show 3 total pages. - return 3; - } - } -} diff --git a/zhuike/src/main/java/com/novelbook/android/MainActivity.java b/zhuike/src/main/java/com/novelbook/android/MainActivity.java deleted file mode 100644 index d59a306..0000000 --- a/zhuike/src/main/java/com/novelbook/android/MainActivity.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.novelbook.android; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.design.widget.BottomNavigationView; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.view.Menu; -import android.view.MenuItem; -import android.view.Window; -import android.widget.TextView; -import android.widget.Toast; - -public class MainActivity extends AppCompatActivity { - - private TextView mTextMessage; - - private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener - = new BottomNavigationView.OnNavigationItemSelectedListener() { - - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.navigation_home: - mTextMessage.setText(R.string.title_home); - return true; - case R.id.navigation_dashboard: - mTextMessage.setText(R.string.title_dashboard); - return true; - case R.id.navigation_notifications: - mTextMessage.setText(R.string.title_notifications); - return true; - - } - return false; - } - }; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.maintest); - // creatToolbar(); - // mTextMessage = (TextView) findViewById(R.id.message); - // BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); - // navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); - } - /* - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.main, menu); - - return true; - } -*/ - private void creatToolbar() { - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - //setSupportActionBar(toolbar); - // toolbar.setNavigationIcon(R.mipmap.ic_launcher_round);//设置导航栏图标 - // toolbar.setLogo(R.mipmap.ic_launcher);//设置app logo - toolbar.setTitle("Title");//设置主标题 - setTitle("title"); - toolbar.setSubtitle("Subtitle");//设置子标题 - - toolbar.inflateMenu(R.menu.main);//设置右上角的填充菜单 - toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - int menuItemId = item.getItemId(); - if (menuItemId == R.id.menuFenlei) { - Toast.makeText( MainActivity.this , R.string.test , Toast.LENGTH_SHORT).show(); - - } - return true; - } - }); - - } - -} diff --git a/zhuike/src/main/java/com/novelbook/android/adapter/CatalogueAdapter.java b/zhuike/src/main/java/com/novelbook/android/adapter/CatalogueAdapter.java index ea46044..51e5965 100644 --- a/zhuike/src/main/java/com/novelbook/android/adapter/CatalogueAdapter.java +++ b/zhuike/src/main/java/com/novelbook/android/adapter/CatalogueAdapter.java @@ -63,9 +63,9 @@ public class CatalogueAdapter extends BaseAdapter { viewHolder = (ViewHolder)convertView.getTag(); } if (currentCharter == position){ - viewHolder.catalogue_tv.setTextColor(mContext.getResources().getColor(R.color.colorAccent)); + viewHolder.catalogue_tv.setTextColor(mContext.getResources().getColor(R.color.colorPrimaryDark)); }else{ - viewHolder.catalogue_tv.setTextColor(mContext.getResources().getColor(R.color.read_textColor)); + viewHolder.catalogue_tv.setTextColor(mContext.getResources().getColor(R.color.colorPrimaryDark)); } viewHolder.catalogue_tv.setText(bookCatalogueList.get(position).getChapterName()); //Log.d("catalogue",bookCatalogueList.get(position).getBookCatalogue()); diff --git a/zhuike/src/main/java/com/novelbook/android/db/Novel.java b/zhuike/src/main/java/com/novelbook/android/db/Novel.java index 3276596..99de693 100644 --- a/zhuike/src/main/java/com/novelbook/android/db/Novel.java +++ b/zhuike/src/main/java/com/novelbook/android/db/Novel.java @@ -142,10 +142,14 @@ public class Novel extends LitePalSupport implements Serializable{ } public int getLastReadChapt() { + if(lastReadChapt<=0){ + lastReadChapt=1; + } return lastReadChapt; } public void setLastReadChapt(int lastReadChapt) { + lastReadChapt = lastReadChapt >0 ? lastReadChapt :1; this.lastReadChapt = lastReadChapt; } diff --git a/zhuike/src/main/java/com/novelbook/android/netapi/HttpApi.java b/zhuike/src/main/java/com/novelbook/android/netapi/HttpApi.java index 2cea472..c6d96a8 100644 --- a/zhuike/src/main/java/com/novelbook/android/netapi/HttpApi.java +++ b/zhuike/src/main/java/com/novelbook/android/netapi/HttpApi.java @@ -79,6 +79,9 @@ public interface HttpApi { //http://xiaoshuofenxiang.com/api/page/siterank?fn=qidian-yuanchuangfengyunbang&pn=3 @GET("page/siterank?fn=qidian-yuanchuangfengyunbang&pn=3") Observable getSiteRankDetail(@Query("fn")String fn,@Query("pn")int pageNo,@Query("sex") int Sex); + @GET( "search/{keyword}/{pageno}") + Observable getSeachNolvelist(@Path("keyword")String keyWord,@Path("pageno")int pageNo,@Query("sex") int Sex); + } diff --git a/zhuike/src/main/java/com/novelbook/android/netsubscribe/BookSubscribe.java b/zhuike/src/main/java/com/novelbook/android/netsubscribe/BookSubscribe.java index 3ad9622..543e8df 100644 --- a/zhuike/src/main/java/com/novelbook/android/netsubscribe/BookSubscribe.java +++ b/zhuike/src/main/java/com/novelbook/android/netsubscribe/BookSubscribe.java @@ -67,4 +67,10 @@ public class BookSubscribe { Observable observable = HttpMethods.getInstance().getHttpApi().getSiteRankDetail(fn,pageNo,sex); HttpMethods.getInstance().toSubscribe(observable, subscriber); } + + public static void getSearchNovelList( String keyWord,int pageNo,int sex,DisposableObserver subscriber){ + Observable observable = HttpMethods.getInstance().getHttpApi().getSeachNolvelist(keyWord,pageNo,sex); + HttpMethods.getInstance().toSubscribe(observable, subscriber); + } + } 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 1530515..5eeaa45 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java @@ -117,8 +117,11 @@ public class BookUtil { public void setNovelSites(NovelSites nvs) { this.mNovelSites = nvs; + + Log.d(TAG, String.format("prepare book %s get novel sites count .",nvs.getSites().length) ); if(nvs.getSites().length ==0){ - return; + throw new RuntimeException("书本错误 code 001"); //无目标网站 + // return; } mSite =nvs.getSites()[0]; if(nvs.getSites().length > 0) @@ -148,11 +151,13 @@ public class BookUtil { public void onSuccess(String result) { //成功 try { + Log.d(TAG, String.format("prepare book %s get target sites done.",mNovel.getName()) ); NovelSites nvs = (NovelSites) gson.fromJson(result,NovelSites.class); //pageFactory.prepareBook(mNovel,nvs, BookActivity.this); setNovelSites(nvs); + } catch ( Exception e) { e.printStackTrace(); } @@ -186,6 +191,8 @@ public class BookUtil { } mSiteRule =sr; setSiteInfo(); + Log.d(TAG, String.format("prepare book %s 目录正则表达式下载完成,开始读章节信息.",mNovel.getName()) ); + Log.d(TAG, String.format("目录正则表达式下载完成,开始读取章节信息") ); readChaptersAsync(); @@ -212,9 +219,19 @@ public class BookUtil { public void setChapterNo(int chapterNo) { this.chapterNo = chapterNo; + /* + if(chapterNo <= mChapters.size()) { + this.chapterNo = chapterNo; + }else{ + Log.d(TAG, String.format("setChapterNo: wrong chapno for book %s,site %s,total chapts %s,chaptNo %s" ,mNovel.getName(),mNovel.getDomain(),getChapters().size(),chapterNo)); + } + */ } public int getChapterNo() { + if(chapterNo > mChapters.size()){ + chapterNo =1; + } return chapterNo; } @@ -233,6 +250,11 @@ public class BookUtil { } + public boolean isBusy() { + return false; + + } + enum MuluStatus{ isDownloading, isDone, @@ -291,10 +313,10 @@ public class BookUtil { }else{ //读取目录列表 MuluStatus m = mMuluStatus; // Log.d(TAG,String.format("mulu on Site %s download status %s",mSite.getDomain(),mMuluStatus)); - - while(mMuluStatus == MuluStatus.isDownloading){ + Log.d(TAG, String.format("prepare book %s open book in background.... mMuluStatus %s,mSiteRule %s",mNovel.getName(),mMuluStatus,mSiteRule) ); + while(mSiteRule ==null || mMuluStatus == MuluStatus.isDownloading){ Thread.sleep(50); - Log.d(TAG,String.format("waiting for mulu downloading ,mMuluStatus %s" ,mMuluStatus)); + Log.d(TAG,String.format("prepare book waiting for mulu downloading ,mMuluStatus %s,msiteRule %s" ,mMuluStatus,mSiteRule)); if(mMuluStatus == MuluStatus.failed){ dismissProgressDialog(); throw new RuntimeException("读取资源失败,请检查网络"); @@ -378,16 +400,16 @@ public class BookUtil { return; } if (body != null) { - + Log.d(TAG, String.format("prepare book %s 章节信息读取成功.",mNovel.getName()) ); try { String bodyStr = body.string(); // Log.d(TAG, "onResponse: " +bodyStr); // Log.d(TAG,String.format("loadChaptContent----end download %s 目录, 目录数量 %s, cost %s", mNovel.getName() , mChapters.size(), new Date().getTime() -startTime )); // long startTime2= new Date().getTime(); - buildCharacters(bodyStr,url); - Log.d(TAG,String.format("loadChaptContent----end download %s 目录, 目录数量 %s, cost %s", mNovel.getName() , mChapters.size(), new Date().getTime() -startTime )); + buildChapters(bodyStr,url); + Log.d(TAG,String.format("loadChapts----end download %s 目录, 目录数量 %s, cost %s", mNovel.getName() , mChapters.size(), new Date().getTime() -startTime )); mMuluStatus = MuluStatus.isDone; - + Log.d(TAG, String.format("prepare book %s 章节信息完成.",mNovel.getName()) ); } catch (IOException e) { e.printStackTrace(); @@ -400,7 +422,7 @@ public class BookUtil { } }); } - void buildCharacters( String content ,String url){ + void buildChapters( String content ,String url){ try { JSONObject siteJson = new JSONObject(); @@ -513,14 +535,14 @@ public class BookUtil { return line.toCharArray(); } public char chaptCurrent(){ - + chapterNo = mChapters.size() <= chapterNo ? 1 : chapterNo; char[] charArray = chaptChars(chapterNo); - - - return charArray[(int)position-1]; + int i = (int)position-1; + i = i<= charArray.length? i:charArray.length; + return charArray[i]; } public char current(){ // int pos = (int) (position % cachedSize); @@ -855,7 +877,7 @@ public class BookUtil { success } //获取chapter 缓存 - public char[] chaptChars(int index) { + public char[] chaptChars(final int index) { char[] block=null; if(chaptCache.containsKey(Integer.valueOf(index))) { block = chaptCache .get(index).getData().get(); @@ -867,19 +889,25 @@ public class BookUtil { if(!file.exists()) { + if(mMuluStatus ==null){ + Log.d(TAG,String.format("prepare book loadChapts---- 还未有目录信息,出错了 %s 目录, 目录数量 %s, MuluStatus %s", mNovel.getName() , mChapters.size(), mMuluStatus )); + getTargetSites(); + } int slept = 0; while(slept <100 && mMuluStatus ==MuluStatus.isDownloading){ try { Thread.sleep(50); slept++; + Log.d(TAG,String.format("prepare book loadChapts----等待中 %s 目录, 目录数量 %s, slept %s, MuluStatus %s", mNovel.getName() , mChapters.size(),slept ,mMuluStatus )); + } catch (InterruptedException e) { e.printStackTrace(); } } if( mChapters ==null || mChapters.size() ==0){ - - String error = "获取目录失败,网络错误,请重试"; + Log.d(TAG,String.format("loadChapts----超时。。。或出错了 %s 目录, 目录数量 %s, slept %s, MuluStatus %s", mNovel.getName() , mChapters.size(),slept ,mMuluStatus )); + String error = "获取目录失败,网络错误,请重试. " +mMuluStatus; return error.toCharArray(); } @@ -901,10 +929,10 @@ public class BookUtil { int slepttime =0; // while(!file.exists() && !getDownloadStatus()){//&& slepttime index ) { @@ -962,13 +990,17 @@ public class BookUtil { return block; } -private void loadChaptContent(int index) throws JSONException, InterruptedException { +private void loadChaptContent(final int chapterIndex) throws JSONException, InterruptedException { /* 章节内容没有缓存在本地 1. 根据本地的章节网络地址信息,读取章节内容到本地,若读取失败则 2. 查询主服务器,若有地址更新则更新本地信息,并重复1,若没有更新地址,则地址无效,返回章节内容正待手打 */ // + final int index = mChapters.size() <= chapterIndex ? 1 : chapterIndex; + if(mChapters.size() toArray(Context context) { + String history = getHistory(context); + Gson gson = new Gson(); + List retList = (List)gson.fromJson(history, (new TypeToken>() { + }).getType()); + return retList; + } + + public static String toJsonArray(List historyList) { + Gson gson = new Gson(); + return gson.toJson(historyList); + } +} 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 31ba4a6..51188e4 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java @@ -166,7 +166,9 @@ public class PageFactory { private List loadCurrentChapt(int chaptId){ List chaptPages = new ArrayList(); + chaptId = mChapters!=null && mChapters.size() <= chaptId ? 1 : chaptId; + Log.d(TAG, String.format("prepare book to open chapter %s ",chaptId ) ); char[] chars = mBookUtil.chaptChars(chaptId); mBookUtil.setBookLen(chars.length); @@ -495,6 +497,9 @@ public class PageFactory { if(null == currentPage){ return; } + if(mBookUtil.isBusy()){ + return; + } m_isfirstPage = false; if (currentPage.getBegin() <= 1) { Log.d(TAG,"当前是本章第一页"); @@ -517,6 +522,10 @@ public class PageFactory { if(null == currentPage){ return; } + if(mBookUtil.isBusy()){ + return; + } + m_islastPage = false; if (currentPage.getEnd() >= mBookUtil.getBookLen()) { Log.d(TAG,"已经是本章最后一页了"); @@ -559,11 +568,11 @@ public class PageFactory { NetUtil.cancelRequest(mBook.getNovelId() ); }catch (Exception e) { - Log.e(TAG, "prepareBook: error on canceling request "+e.getMessage()); + Log.e(TAG, "prepare Book: error on canceling request "+e.getMessage()); e.printStackTrace(); } } - Log.d(TAG, "prepareBook: .start prepare book " + book.getName()); + // Log.d(TAG, "prepareBook: .start prepare book " + book.getName()); this.mBook = book ; mBookUtil = new BookUtil(); //this.mBookUtil.setContext(context); @@ -602,7 +611,7 @@ public class PageFactory { } bookTask = new BookTask(); - + Log.d(TAG, String.format("prepare book 1 to open chapter %s ",book.getLastReadChapt() ) ); bookTask.execute((long)book.getLastReadChapt(),book .getLastReadPos()); } @@ -617,7 +626,7 @@ public class PageFactory { return; } if (result) { - PageFactory.mStatus = PageFactory.Status.FINISH; + // m_mbBufLen = mBookUtil.getBookLen(); mBookUtil.setChapterNo((int)chapter); currentChaptPages = loadCurrentChapt((int)chapter); @@ -626,6 +635,8 @@ public class PageFactory { if (mBookPageWidget != null) { currentPage(true); } + + PageFactory.mStatus = PageFactory.Status.FINISH; }else{ PageFactory.mStatus = PageFactory.Status.FAIL; drawStatus(mBookPageWidget.getCurPage()); @@ -939,6 +950,7 @@ public class PageFactory { } return num; */ + currentChapter = mBookUtil.getChapterNo(); return currentChapter ; } diff --git a/zhuike/src/main/res/drawable-v24/button_select_bg.xml b/zhuike/src/main/res/drawable-v24/button_select_bg.xml index d85ea2d..4e97713 100644 --- a/zhuike/src/main/res/drawable-v24/button_select_bg.xml +++ b/zhuike/src/main/res/drawable-v24/button_select_bg.xml @@ -1,7 +1,7 @@ - + @@ -11,13 +11,13 @@ + android:color="@color/white" /> + android:left="15dp" + android:top="5dp" + android:right="15dp" + android:bottom="5dp" /> \ No newline at end of file diff --git a/zhuike/src/main/res/drawable/button_bg.xml b/zhuike/src/main/res/drawable/button_bg.xml index 0234a67..3fbbc06 100644 --- a/zhuike/src/main/res/drawable/button_bg.xml +++ b/zhuike/src/main/res/drawable/button_bg.xml @@ -1,7 +1,7 @@ - + @@ -11,13 +11,15 @@ + android:color="@color/colorPrimary" /> + android:bottom="5dp" /> + + \ No newline at end of file diff --git a/zhuike/src/main/res/drawable/ic_favorite_border_black_24dp.xml b/zhuike/src/main/res/drawable/ic_favorite_border_black_24dp.xml new file mode 100644 index 0000000..63fb576 --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_favorite_border_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/ic_library_books_black_24dp.xml b/zhuike/src/main/res/drawable/ic_library_books_black_24dp.xml new file mode 100644 index 0000000..6fdb7fa --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_library_books_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/ic_search_white_24dp.xml b/zhuike/src/main/res/drawable/ic_search_white_24dp.xml new file mode 100644 index 0000000..be5ad99 --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_search_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/ic_star_border_black_24dp.xml b/zhuike/src/main/res/drawable/ic_star_border_black_24dp.xml new file mode 100644 index 0000000..3fc251d --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_star_border_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/item_selector_red.xml b/zhuike/src/main/res/drawable/item_selector_red.xml index 1d1abee..5f38f04 100644 --- a/zhuike/src/main/res/drawable/item_selector_red.xml +++ b/zhuike/src/main/res/drawable/item_selector_red.xml @@ -6,7 +6,8 @@ - + + diff --git a/zhuike/src/main/res/drawable/rb_nobtn_selector.xml b/zhuike/src/main/res/drawable/rb_nobtn_selector.xml new file mode 100644 index 0000000..cbad97a --- /dev/null +++ b/zhuike/src/main/res/drawable/rb_nobtn_selector.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/zhuike/src/main/res/drawable/side_nav_bar.xml b/zhuike/src/main/res/drawable/side_nav_bar.xml index 6d81870..9ad7c08 100644 --- a/zhuike/src/main/res/drawable/side_nav_bar.xml +++ b/zhuike/src/main/res/drawable/side_nav_bar.xml @@ -2,8 +2,18 @@ android:shape="rectangle"> + + + \ No newline at end of file diff --git a/zhuike/src/main/res/layout/activity_search.xml b/zhuike/src/main/res/layout/activity_search.xml new file mode 100644 index 0000000..70347c6 --- /dev/null +++ b/zhuike/src/main/res/layout/activity_search.xml @@ -0,0 +1,22 @@ + + + + + + + + + + \ No newline at end of file diff --git a/zhuike/src/main/res/layout/app_bar_main2.xml b/zhuike/src/main/res/layout/app_bar_main2.xml index ef73877..1091c34 100644 --- a/zhuike/src/main/res/layout/app_bar_main2.xml +++ b/zhuike/src/main/res/layout/app_bar_main2.xml @@ -54,24 +54,20 @@ /> + style="@style/radioButton" + /> diff --git a/zhuike/src/main/res/layout/content_activity_cate_books.xml b/zhuike/src/main/res/layout/content_activity_cate_books.xml index 5933f5d..2cc1eaf 100644 --- a/zhuike/src/main/res/layout/content_activity_cate_books.xml +++ b/zhuike/src/main/res/layout/content_activity_cate_books.xml @@ -16,11 +16,11 @@ android:layout_width="match_parent" android:layout_height="40dp" android:background="@color/white" - app:tl_indicator_color="@color/crimson" + app:tl_indicator_color="@color/tabSelected" app:tl_indicator_corner_radius="1.5dp" app:tl_indicator_height="2dp" app:tl_indicator_width="45dp" - app:tl_textSelectColor="@color/crimson" + app:tl_textSelectColor="@color/tabSelected" app:tl_textUnselectColor="@color/grey" app:tl_tab_space_equal ="true" diff --git a/zhuike/src/main/res/layout/content_activity_paihangbang.xml b/zhuike/src/main/res/layout/content_activity_paihangbang.xml index 3e37fcc..a5295da 100644 --- a/zhuike/src/main/res/layout/content_activity_paihangbang.xml +++ b/zhuike/src/main/res/layout/content_activity_paihangbang.xml @@ -14,11 +14,11 @@ android:layout_width="match_parent" android:layout_height="40dp" android:background="@color/white" - app:tl_indicator_color="@color/crimson" + app:tl_indicator_color="@color/tabSelected" app:tl_indicator_corner_radius="1.5dp" app:tl_indicator_height="2dp" app:tl_indicator_width="45dp" - app:tl_textSelectColor="@color/crimson" + app:tl_textSelectColor="@color/tabSelected" app:tl_textUnselectColor="@color/grey" app:tl_tab_space_equal ="true" /> diff --git a/zhuike/src/main/res/layout/content_activity_search.xml b/zhuike/src/main/res/layout/content_activity_search.xml new file mode 100644 index 0000000..1cdbe20 --- /dev/null +++ b/zhuike/src/main/res/layout/content_activity_search.xml @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/zhuike/src/main/res/layout/content_activity_shudan_my.xml b/zhuike/src/main/res/layout/content_activity_shudan_my.xml index 5933f5d..2cc1eaf 100644 --- a/zhuike/src/main/res/layout/content_activity_shudan_my.xml +++ b/zhuike/src/main/res/layout/content_activity_shudan_my.xml @@ -16,11 +16,11 @@ android:layout_width="match_parent" android:layout_height="40dp" android:background="@color/white" - app:tl_indicator_color="@color/crimson" + app:tl_indicator_color="@color/tabSelected" app:tl_indicator_corner_radius="1.5dp" app:tl_indicator_height="2dp" app:tl_indicator_width="45dp" - app:tl_textSelectColor="@color/crimson" + app:tl_textSelectColor="@color/tabSelected" app:tl_textUnselectColor="@color/grey" app:tl_tab_space_equal ="true" diff --git a/zhuike/src/main/res/layout/content_book.xml b/zhuike/src/main/res/layout/content_book.xml index bc00245..c5fddda 100644 --- a/zhuike/src/main/res/layout/content_book.xml +++ b/zhuike/src/main/res/layout/content_book.xml @@ -177,17 +177,18 @@ android:orientation="horizontal"> + android:src="@mipmap/directory" /> diff --git a/zhuike/src/main/res/layout/fragment_book_store.xml b/zhuike/src/main/res/layout/fragment_book_store.xml index 9dfcba4..863259e 100644 --- a/zhuike/src/main/res/layout/fragment_book_store.xml +++ b/zhuike/src/main/res/layout/fragment_book_store.xml @@ -11,15 +11,15 @@ android:layout_width="match_parent" android:layout_height="40dp" android:background="@color/white" - app:tl_indicator_color="@color/crimson" + app:tl_indicator_color="@color/tabSelected" app:tl_indicator_corner_radius="1.5dp" app:tl_indicator_height="2dp" app:tl_indicator_width="45dp" - app:tl_textSelectColor="@color/crimson" + app:tl_textSelectColor="@color/tabSelected" app:tl_textUnselectColor="@color/grey" app:tl_tab_space_equal ="true" - /> + @@ -163,7 +163,7 @@ @@ -221,7 +221,7 @@ @@ -282,7 +282,7 @@ diff --git a/zhuike/src/main/res/layout/fragment_other.xml b/zhuike/src/main/res/layout/fragment_other.xml index 8976337..dcecaf3 100644 --- a/zhuike/src/main/res/layout/fragment_other.xml +++ b/zhuike/src/main/res/layout/fragment_other.xml @@ -48,7 +48,7 @@ app:tl_indicator_corner_radius="1.5dp" app:tl_indicator_height="0dp" app:tl_indicator_width="0dp" - app:tl_textSelectColor="@color/crimson" + app:tl_textSelectColor="@color/tabSelected" app:tl_textUnselectColor="@color/grey" app:tl_tab_space_equal ="true" app:tl_textsize="13sp" diff --git a/zhuike/src/main/res/layout/fragment_shudan.xml b/zhuike/src/main/res/layout/fragment_shudan.xml index 9b4aec3..c56731a 100644 --- a/zhuike/src/main/res/layout/fragment_shudan.xml +++ b/zhuike/src/main/res/layout/fragment_shudan.xml @@ -21,11 +21,11 @@ android:paddingTop="4dp" android:paddingBottom="2dp" android:background="@color/white" - app:tl_indicator_color="@color/white" + app:tl_indicator_color="@color/tabSelected" app:tl_indicator_corner_radius="1.5dp" app:tl_indicator_height="0dp" app:tl_indicator_width="0dp" - app:tl_textSelectColor="@color/crimson" + app:tl_textSelectColor="@color/tabSelected" app:tl_textUnselectColor="@color/grey" app:tl_tab_space_equal ="true" app:tl_textsize="13sp" diff --git a/zhuike/src/main/res/layout/realcontent.xml b/zhuike/src/main/res/layout/realcontent.xml index 0e3e099..470c25b 100644 --- a/zhuike/src/main/res/layout/realcontent.xml +++ b/zhuike/src/main/res/layout/realcontent.xml @@ -34,6 +34,7 @@ app:layout_behavior="@string/appbar_scrolling_view_behavior" android:layout_height="@dimen/botoomNavi" android:layout_alignParentBottom="true" android:background="?android:attr/windowBackground" + android:paddingTop="2dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" diff --git a/zhuike/src/main/res/layout/recycle_list_item_bangdanNew.xml b/zhuike/src/main/res/layout/recycle_list_item_bangdanNew.xml index cbb0744..b76aa76 100644 --- a/zhuike/src/main/res/layout/recycle_list_item_bangdanNew.xml +++ b/zhuike/src/main/res/layout/recycle_list_item_bangdanNew.xml @@ -42,13 +42,13 @@ android:layout_height="15dp" android:gravity="center_vertical" - android:text="完本精选" + android:text="" android:textSize="18sp" /> + android:text="" + style="@style/TextViewNovelDesc.titles"/> diff --git a/zhuike/src/main/res/layout/recycle_list_item_cates.xml b/zhuike/src/main/res/layout/recycle_list_item_cates.xml index 14b3b13..77d65df 100644 --- a/zhuike/src/main/res/layout/recycle_list_item_cates.xml +++ b/zhuike/src/main/res/layout/recycle_list_item_cates.xml @@ -28,8 +28,8 @@ android:layout_weight="0" android:padding="2dp" android:id="@+id/imageViewCate" - android:layout_width="100dp" - android:layout_height="120dp" + android:layout_width="80dp" + android:layout_height="100dp" android:scaleType="fitCenter" android:src="@drawable/googleg_standard_color_18" tools:ignore="ContentDescription" /> @@ -38,7 +38,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" - android:layout_margin="10dp" + android:layout_marginTop="5dp" + android:layout_marginBottom="2dp" android:layout_weight="1" android:orientation="vertical"> diff --git a/zhuike/src/main/res/menu/main.xml b/zhuike/src/main/res/menu/main.xml index 2204adc..7c7701c 100644 --- a/zhuike/src/main/res/menu/main.xml +++ b/zhuike/src/main/res/menu/main.xml @@ -9,10 +9,11 @@ - #2E5CAB #B2B2B2 + + #FF6347 + diff --git a/zhuike/src/main/res/values/styles.xml b/zhuike/src/main/res/values/styles.xml index 413cfa8..ab49f9d 100644 --- a/zhuike/src/main/res/values/styles.xml +++ b/zhuike/src/main/res/values/styles.xml @@ -126,7 +126,7 @@ + + + + + diff --git a/zhuike/zhuike.iml b/zhuike/zhuike.iml index 75bf44d..089cbf5 100644 --- a/zhuike/zhuike.iml +++ b/zhuike/zhuike.iml @@ -154,6 +154,7 @@ +