diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 60a072d..3676718 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -14,8 +14,8 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index 6e2cee0..9f31c26 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -17,6 +17,7 @@ + diff --git a/app/release.md b/app/release.md index a34656e..66a6e70 100644 --- a/app/release.md +++ b/app/release.md @@ -1,3 +1,3 @@ -* 1、新增分组管理界面(支持添加、重命名、删除、排序分组) -* 2、发现界面书籍添加动画效果 -* 3、修复v2.1.7版本更新中推送debug版本的问题 \ No newline at end of file +* 1、修复从书籍详情页进入阅读后切换日夜模式闪退的bug +* 2、修复从发现页进入阅读后切换日夜模式闪退的bug +* 3、详情页作者支持点击搜索 \ No newline at end of file diff --git a/app/src/main/assets/updatelog.fy b/app/src/main/assets/updatelog.fy index 268a162..45da7a4 100644 --- a/app/src/main/assets/updatelog.fy +++ b/app/src/main/assets/updatelog.fy @@ -1,3 +1,9 @@ +风月读书v2.2.0 +更新内容: +1、修复从书籍详情页进入阅读后切换日夜模式闪退的bug +2、修复从发现页进入阅读后切换日夜模式闪退的bug +3、详情页作者支持点击搜索 + 2021.08.31 风月读书v2.1.9 更新内容: diff --git a/app/src/main/java/xyz/fycz/myreader/base/BaseActivity.java b/app/src/main/java/xyz/fycz/myreader/base/BaseActivity.java index 34def62..e98cc99 100644 --- a/app/src/main/java/xyz/fycz/myreader/base/BaseActivity.java +++ b/app/src/main/java/xyz/fycz/myreader/base/BaseActivity.java @@ -35,6 +35,8 @@ import xyz.fycz.myreader.util.StatusBarUtil; public abstract class BaseActivity extends SwipeBackActivity { private static final int INVALID_VAL = -1; + protected static final String INTENT = "intent"; + protected CompositeDisposable mDisposable; protected Toolbar mToolbar; @@ -119,6 +121,7 @@ public abstract class BaseActivity extends SwipeBackActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + initIntent(savedInstanceState); initTheme(); ActivityManage.addActivity(this); bindView(); @@ -130,6 +133,15 @@ public abstract class BaseActivity extends SwipeBackActivity { processLogic(); } + private void initIntent(Bundle savedInstanceState) { + if (savedInstanceState != null) { + Intent intent = savedInstanceState.getParcelable(INTENT); + if (intent != null) { + setIntent(intent); + } + } + } + private void initToolbar() { //更严谨是通过反射判断是否存在Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); diff --git a/app/src/main/java/xyz/fycz/myreader/common/APPCONST.java b/app/src/main/java/xyz/fycz/myreader/common/APPCONST.java index d9cf936..67b827d 100644 --- a/app/src/main/java/xyz/fycz/myreader/common/APPCONST.java +++ b/app/src/main/java/xyz/fycz/myreader/common/APPCONST.java @@ -64,6 +64,7 @@ public class APPCONST { public static final String RESULT_LAST_READ_POSITION = "result_last_read_position"; public static final String RESULT_HISTORY_CHAPTER = "result_history_chapter"; public static final String RESULT_UP_MENU = "result_up_menu"; + public static final String SEARCH_KEY = "searchKey"; public static final String[] READ_STYLE_NIGHT = {"#94928c", "#393431"};//黑夜 diff --git a/app/src/main/java/xyz/fycz/myreader/ui/activity/BookDetailedActivity.java b/app/src/main/java/xyz/fycz/myreader/ui/activity/BookDetailedActivity.java index 96e23d3..b791aa7 100644 --- a/app/src/main/java/xyz/fycz/myreader/ui/activity/BookDetailedActivity.java +++ b/app/src/main/java/xyz/fycz/myreader/ui/activity/BookDetailedActivity.java @@ -12,6 +12,8 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.LinearLayoutManager; @@ -117,6 +119,22 @@ public class BookDetailedActivity extends BaseActivity { setContentView(binding.getRoot()); } + @Override + protected void onSaveInstanceState(@NonNull Bundle outState) { + aBooks = mSourceDialog.getaBooks(); + Intent intent = new Intent(); + if (aBooks != null) { + aBooks.set(mSourceDialog.getSourceIndex(), mBook); + BitIntentDataManager.getInstance().putData(intent, aBooks); + intent.putExtra(APPCONST.SOURCE_INDEX, mSourceDialog.getSourceIndex()); + } else { + BitIntentDataManager.getInstance().putData(intent, mBook); + } + intent.putExtra("isCollected", isCollected); + outState.putParcelable(INTENT, intent); + super.onSaveInstanceState(outState); + } + @Override protected void onDestroy() { if (chaptersDis != null) chaptersDis.dispose(); @@ -226,12 +244,16 @@ public class BookDetailedActivity extends BaseActivity { } mSourceDialog.setABooks(aBooks); mSourceDialog.setSourceIndex(sourceIndex); - } @Override protected void initClick() { super.initClick(); + binding.ih.bookDetailTvAuthor.setOnClickListener(v -> { + Intent intent = new Intent(BookDetailedActivity.this, SearchBookActivity.class); + intent.putExtra(APPCONST.SEARCH_KEY, binding.ih.bookDetailTvAuthor.getText()); + startActivity(intent); + }); binding.ic.bookDetailTvDesc.setOnClickListener(v -> showMoreDesc()); binding.ic.bookDetailTvCatalogMore.setOnClickListener(v -> goToMoreChapter()); binding.ib.flAddBookcase.setOnClickListener(view -> { diff --git a/app/src/main/java/xyz/fycz/myreader/ui/activity/FindBookActivity.java b/app/src/main/java/xyz/fycz/myreader/ui/activity/FindBookActivity.java index 5748fd3..c2fb91a 100644 --- a/app/src/main/java/xyz/fycz/myreader/ui/activity/FindBookActivity.java +++ b/app/src/main/java/xyz/fycz/myreader/ui/activity/FindBookActivity.java @@ -1,10 +1,13 @@ package xyz.fycz.myreader.ui.activity; +import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import org.jetbrains.annotations.NotNull; @@ -42,6 +45,15 @@ public class FindBookActivity extends BaseActivity { setContentView(binding.getRoot()); } + + @Override + protected void onSaveInstanceState(@NonNull Bundle outState) { + Intent intent = new Intent(); + BitIntentDataManager.getInstance().putData(intent, findCrawler); + outState.putParcelable(INTENT, intent); + super.onSaveInstanceState(outState); + } + @Override protected void initData(Bundle savedInstanceState) { super.initData(savedInstanceState); diff --git a/app/src/main/java/xyz/fycz/myreader/ui/activity/ReadActivity.java b/app/src/main/java/xyz/fycz/myreader/ui/activity/ReadActivity.java index 2a6db72..7649d56 100644 --- a/app/src/main/java/xyz/fycz/myreader/ui/activity/ReadActivity.java +++ b/app/src/main/java/xyz/fycz/myreader/ui/activity/ReadActivity.java @@ -224,18 +224,6 @@ public class ReadActivity extends BaseActivity implements ColorPickerDialogListe /**************************override***********************************/ - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - if (savedInstanceState != null) { - pagePos = savedInstanceState.getInt("pagePos"); - chapterPos = savedInstanceState.getInt("chapterPos"); - } else { - pagePos = -1; - chapterPos = -1; - } - super.onCreate(savedInstanceState); - } - @Override protected void onStop() { recordReadTime(); @@ -256,11 +244,18 @@ public class ReadActivity extends BaseActivity implements ColorPickerDialogListe @Override protected void onSaveInstanceState(@NonNull Bundle outState) { - super.onSaveInstanceState(outState); - if (mBook != null) { - outState.putInt("pagePos", mBook.getLastReadPosition()); - outState.putInt("chapterPos", mBook.getHisttoryChapterNum()); + aBooks = mSourceDialog.getaBooks(); + Intent intent = new Intent(); + if (aBooks != null) { + aBooks.set(mSourceDialog.getSourceIndex(), mBook); + BitIntentDataManager.getInstance().putData(intent, aBooks); + intent.putExtra(APPCONST.SOURCE_INDEX, mSourceDialog.getSourceIndex()); + } else { + BitIntentDataManager.getInstance().putData(intent, mBook); } + intent.putExtra("isCollected", isCollected); + outState.putParcelable(INTENT, intent); + super.onSaveInstanceState(outState); } @Override diff --git a/app/src/main/java/xyz/fycz/myreader/ui/activity/SearchBookActivity.java b/app/src/main/java/xyz/fycz/myreader/ui/activity/SearchBookActivity.java index c78f3a9..3620e18 100644 --- a/app/src/main/java/xyz/fycz/myreader/ui/activity/SearchBookActivity.java +++ b/app/src/main/java/xyz/fycz/myreader/ui/activity/SearchBookActivity.java @@ -271,6 +271,15 @@ public class SearchBookActivity extends BaseActivity { }); } + @Override + protected void processLogic() { + String searchKey = getIntent().getStringExtra(APPCONST.SEARCH_KEY); + if (searchKey != null) { + binding.etSearchKey.setText(searchKey); + binding.etSearchKey.setSelection(searchKey.length()); + search(); + } + } @Override public boolean onCreateOptionsMenu(Menu menu) { diff --git a/app/src/main/java/xyz/fycz/myreader/ui/adapter/holder/SourceExchangeHolder.java b/app/src/main/java/xyz/fycz/myreader/ui/adapter/holder/SourceExchangeHolder.java index 8f0b8d4..f99fa15 100644 --- a/app/src/main/java/xyz/fycz/myreader/ui/adapter/holder/SourceExchangeHolder.java +++ b/app/src/main/java/xyz/fycz/myreader/ui/adapter/holder/SourceExchangeHolder.java @@ -42,9 +42,11 @@ public class SourceExchangeHolder extends ViewHolderImpl { public void onBind(RecyclerView.ViewHolder holder, Book data, int pos) { sourceTvTitle.setText(BookSourceManager.getSourceNameByStr(data.getSource())); sourceTvChapter.setText(data.getNewestChapterTitle()); - if (data.getSource() != null && data.getSource().equals(dialog.getmShelfBook().getSource())) + if (data.getSource() != null && data.getSource().equals(dialog.getmShelfBook().getSource())) { sourceIv.setVisibility(View.VISIBLE); - else + dialog.setSourceIndex(pos); + } else { sourceIv.setVisibility(View.GONE); + } } } diff --git a/app/src/main/java/xyz/fycz/myreader/ui/dialog/SourceExchangeDialog.java b/app/src/main/java/xyz/fycz/myreader/ui/dialog/SourceExchangeDialog.java index 910a641..14fe5f5 100644 --- a/app/src/main/java/xyz/fycz/myreader/ui/dialog/SourceExchangeDialog.java +++ b/app/src/main/java/xyz/fycz/myreader/ui/dialog/SourceExchangeDialog.java @@ -71,7 +71,16 @@ public class SourceExchangeDialog extends Dialog { this.sourceIndex = sourceIndex; } public int getSourceIndex() { - return sourceIndex; + if (sourceIndex == -1){ + for (int i = 0; i < aBooks.size(); i++) { + Book book = aBooks.get(i); + if (book.getSource().equals(mShelfBook.getSource())) { + sourceIndex = i; + break; + } + } + } + return sourceIndex == -1 ? 0 : sourceIndex; } public void setOnSourceChangeListener(OnSourceChangeListener listener) { this.listener = listener; diff --git a/app/src/main/java/xyz/fycz/myreader/ui/fragment/FindBook1Fragment.java b/app/src/main/java/xyz/fycz/myreader/ui/fragment/FindBook1Fragment.java index 896d64b..f22b2f5 100644 --- a/app/src/main/java/xyz/fycz/myreader/ui/fragment/FindBook1Fragment.java +++ b/app/src/main/java/xyz/fycz/myreader/ui/fragment/FindBook1Fragment.java @@ -18,10 +18,13 @@ import java.util.ArrayList; import java.util.List; import xyz.fycz.myreader.base.BaseFragment; +import xyz.fycz.myreader.base.BitIntentDataManager; import xyz.fycz.myreader.base.LazyFragment; +import xyz.fycz.myreader.common.APPCONST; import xyz.fycz.myreader.databinding.FragmentFindBook1Binding; import xyz.fycz.myreader.entity.FindKind; import xyz.fycz.myreader.ui.adapter.TabFragmentPageAdapter; +import xyz.fycz.myreader.util.help.StringHelper; import xyz.fycz.myreader.webapi.crawler.base.FindCrawler; /** @@ -33,11 +36,36 @@ public class FindBook1Fragment extends LazyFragment { private List kinds; private FindCrawler findCrawler; private PopupMenu kindMenu; + private static final String KINDS = "FindBook1FragmentKinds"; + private static final String FIND_CRAWLER = "FindBook1FragmentFindCrawler"; + + public FindBook1Fragment() { + } public FindBook1Fragment(List kinds, FindCrawler findCrawler) { this.kinds = kinds; this.findCrawler = findCrawler; } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (savedInstanceState != null) { + String dataKey = savedInstanceState.getString(APPCONST.DATA_KEY); + kinds = (List) BitIntentDataManager.getInstance().getData(KINDS + dataKey); + findCrawler = (FindCrawler) BitIntentDataManager.getInstance().getData(FIND_CRAWLER + dataKey); + } + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + String dataKey = StringHelper.getStringRandom(25); + BitIntentDataManager.getInstance().putData(KINDS + dataKey, kinds); + BitIntentDataManager.getInstance().putData(FIND_CRAWLER + dataKey, findCrawler); + outState.putString(APPCONST.DATA_KEY, dataKey); + super.onSaveInstanceState(outState); + } + @Override public void lazyInit() { kindMenu = new PopupMenu(getContext(), binding.ivMenu, Gravity.END); diff --git a/app/src/main/java/xyz/fycz/myreader/ui/fragment/FindBook2Fragment.java b/app/src/main/java/xyz/fycz/myreader/ui/fragment/FindBook2Fragment.java index cec9263..6f57a5d 100644 --- a/app/src/main/java/xyz/fycz/myreader/ui/fragment/FindBook2Fragment.java +++ b/app/src/main/java/xyz/fycz/myreader/ui/fragment/FindBook2Fragment.java @@ -31,6 +31,7 @@ import xyz.fycz.myreader.ui.activity.BookstoreActivity; import xyz.fycz.myreader.ui.adapter.holder.FindBookHolder; import xyz.fycz.myreader.ui.dialog.SourceExchangeDialog; import xyz.fycz.myreader.util.ToastUtils; +import xyz.fycz.myreader.util.help.StringHelper; import xyz.fycz.myreader.util.utils.RxUtils; import xyz.fycz.myreader.webapi.BookApi; import xyz.fycz.myreader.webapi.crawler.base.FindCrawler; @@ -48,12 +49,35 @@ public class FindBook2Fragment extends LazyFragment { private BaseListAdapter findBookAdapter; private SourceExchangeDialog mSourceDia; + private static final String KIND = "kind"; + private static final String FIND_CRAWLER = "findCrawler"; + + public FindBook2Fragment() { + } public FindBook2Fragment(FindKind kind, FindCrawler findCrawler) { this.kind = kind; this.findCrawler = findCrawler; } + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (savedInstanceState != null) { + String dataKey = savedInstanceState.getString(APPCONST.DATA_KEY); + kind = (FindKind) BitIntentDataManager.getInstance().getData(KIND + dataKey); + findCrawler = (FindCrawler) BitIntentDataManager.getInstance().getData(FIND_CRAWLER + dataKey); + } + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + String dataKey = StringHelper.getStringRandom(25); + BitIntentDataManager.getInstance().putData(KIND + dataKey, kind); + BitIntentDataManager.getInstance().putData(FIND_CRAWLER + dataKey, findCrawler); + outState.putString(APPCONST.DATA_KEY, dataKey); + super.onSaveInstanceState(outState); + } @Override public void lazyInit() { initData(); diff --git a/app/src/main/res/drawable/ic_right_arrow_small.xml b/app/src/main/res/drawable/ic_right_arrow_small.xml new file mode 100644 index 0000000..d3fb075 --- /dev/null +++ b/app/src/main/res/drawable/ic_right_arrow_small.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/layout_book_detail_header.xml b/app/src/main/res/layout/layout_book_detail_header.xml index 64033a3..4d48631 100644 --- a/app/src/main/res/layout/layout_book_detail_header.xml +++ b/app/src/main/res/layout/layout_book_detail_header.xml @@ -21,37 +21,39 @@ + android:id="@+id/book_detail_iv_cover" + android:layout_width="82dp" + android:layout_height="110dp" + android:background="@color/colorPrimary" + android:scaleType="centerCrop" + app:srcCompat="@mipmap/default_cover" /> - + android:id="@+id/book_detail_tv_author" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignTop="@+id/cover" + android:layout_marginStart="14dp" + android:layout_marginTop="30dp" + android:layout_toEndOf="@+id/cover" + android:ellipsize="end" + android:gravity="center" + android:maxLines="1" + android:textColor="@color/origin" + app:drawableRightCompat="@drawable/ic_right_arrow_small" + app:drawableTint="@color/textAssistInverted" + tools:text=" 茶叶蛋" /> diff --git a/app/version_code.properties b/app/version_code.properties index 0c5d80e..e79417b 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,3 +1,3 @@ #Fri Jun 18 21:45:31 CST 2021 -VERSION_CODE=219 -NEED_CREATE_RELEASE=true +VERSION_CODE=220 +NEED_CREATE_RELEASE=false