diff --git a/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt b/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt
index 9646c95b4..16bc17958 100644
--- a/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt
+++ b/app/src/main/java/io/legato/kazusa/constant/PreferKey.kt
@@ -208,6 +208,7 @@ object PreferKey {
const val paddingDisplayCutouts = "paddingDisplayCutouts"
const val delayBookLoadEnable = "delayBookLoadEnable"
+ const val sharedElementEnterTransitionEnable = "sharedElementEnterTransitionEnable"
const val bookshelfLayoutGridLandscape = "bookshelfLayoutGridLandscape"
diff --git a/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt b/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt
index ef3e31b33..2a5f600e9 100644
--- a/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt
+++ b/app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt
@@ -211,18 +211,29 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
appCtx.putPrefInt(PreferKey.bookGroupStyle, value)
}
- var bookshelfLayoutPortrait: Int
- get() = appCtx.getPrefInt(PreferKey.bookshelfLayoutPortrait, 3)
+ var bookshelfLayoutModePortrait: Int
+ get() = appCtx.getPrefInt(PreferKey.bookshelfLayoutModePortrait, 1)
set(value) {
- appCtx.putPrefInt(PreferKey.bookshelfLayoutPortrait, value)
+ appCtx.putPrefInt(PreferKey.bookshelfLayoutModePortrait, value)
}
- var bookshelfLayoutLandscape: Int
- get() = appCtx.getPrefInt(PreferKey.bookshelfLayoutLandscape, 5)
+ var bookshelfLayoutModeLandscape: Int
+ get() = appCtx.getPrefInt(PreferKey.bookshelfLayoutModeLandscape, 1)
set(value) {
- appCtx.putPrefInt(PreferKey.bookshelfLayoutLandscape, value)
+ appCtx.putPrefInt(PreferKey.bookshelfLayoutModeLandscape, value)
}
+ var bookshelfLayoutGridPortrait: Int
+ get() = appCtx.getPrefInt(PreferKey.bookshelfLayoutGridPortrait, 3)
+ set(value) {
+ appCtx.putPrefInt(PreferKey.bookshelfLayoutGridPortrait, value)
+ }
+
+ var bookshelfLayoutGridLandscape: Int
+ get() = appCtx.getPrefInt(PreferKey.bookshelfLayoutGridLandscape, 7)
+ set(value) {
+ appCtx.putPrefInt(PreferKey.bookshelfLayoutGridLandscape, value)
+ }
var saveTabPosition: Int
get() = appCtx.getPrefInt(PreferKey.saveTabPosition, 0)
@@ -573,6 +584,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
val paddingDisplayCutouts
get() = appCtx.getPrefBoolean(PreferKey.paddingDisplayCutouts, false)
+ val delayBookLoadEnable
+ get() = appCtx.getPrefBoolean(PreferKey.delayBookLoadEnable, true)
+
+ val sharedElementEnterTransitionEnable
+ get() = appCtx.getPrefBoolean(PreferKey.sharedElementEnterTransitionEnable, true)
+
var searchScope: String
get() = appCtx.getPrefString("searchScope") ?: ""
set(value) {
diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt
index 40263de22..d3662db90 100644
--- a/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt
+++ b/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt
@@ -6,6 +6,7 @@ import android.content.Intent
import android.content.res.Configuration
import android.graphics.Color
import android.os.Bundle
+import android.transition.Transition
import android.view.Gravity
import android.view.HapticFeedbackConstants
import android.view.InputDevice
@@ -19,6 +20,7 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.PopupMenu
import androidx.core.net.toUri
+import androidx.core.view.doOnLayout
import androidx.core.view.doOnPreDraw
import androidx.core.view.get
import androidx.core.view.size
@@ -263,59 +265,98 @@ class ReadBookActivity : BaseReadBookActivity(),
@SuppressLint("ClickableViewAccessibility")
override fun onCreate(savedInstanceState: Bundle?) {
- postponeEnterTransition()
- val transform = MaterialContainerTransform().apply {
- addTarget(binding.rootView)
- scrimColor = Color.TRANSPARENT
- duration = 500
+
+ if (AppConfig.sharedElementEnterTransitionEnable) {
+ postponeEnterTransition()
+ val transform = MaterialContainerTransform().apply {
+ addTarget(binding.rootView)
+ scrimColor = Color.TRANSPARENT
+ duration = 500
+ }
+ window.sharedElementEnterTransition = transform
+
+ window.sharedElementReturnTransition =
+ MaterialSharedAxis(MaterialSharedAxis.X, true).apply {
+ duration = 300
+ }
+
+ if (AppConfig.delayBookLoadEnable) {
+ window.sharedElementEnterTransition?.addListener(object :
+ Transition.TransitionListener {
+ override fun onTransitionStart(transition: Transition) {}
+ override fun onTransitionEnd(transition: Transition) {
+ binding.readView.doOnLayout {
+ viewModel.initReadBookConfig(intent)
+ viewModel.initData(intent)
+ binding.readView.initAfterTransition()
+ justInitData = true
+ }
+ transition.removeListener(this)
+ }
+
+ override fun onTransitionCancel(transition: Transition) {
+ viewModel.initReadBookConfig(intent)
+ viewModel.initData(intent)
+ binding.readView.initAfterTransition()
+ justInitData = true
+ transition.removeListener(this)
+ }
+
+ override fun onTransitionPause(transition: Transition) {}
+ override fun onTransitionResume(transition: Transition) {}
+ })
+ }
}
- window.sharedElementEnterTransition = transform
- window.sharedElementReturnTransition =
- MaterialSharedAxis(MaterialSharedAxis.X, true).apply { duration = 300 }
+
super.onCreate(savedInstanceState)
- binding.rootView.transitionName = intent.getStringExtra("transitionName")
+ if (!AppConfig.delayBookLoadEnable || !AppConfig.sharedElementEnterTransitionEnable) {
+ lifecycleScope.launch(Dispatchers.Default) {
+ viewModel.initReadBookConfig(intent)
+ viewModel.initData(intent)
+
+ withContext(Main) {
+ binding.readView.initAfterTransition()
+ justInitData = true
+ }
+ }
+ }
+
+
+ if (AppConfig.sharedElementEnterTransitionEnable)
+ binding.rootView.transitionName = intent.getStringExtra("transitionName")
+
binding.cursorLeft.setOnTouchListener(this)
binding.cursorRight.setOnTouchListener(this)
- binding.rootView.doOnPreDraw { startPostponedEnterTransition() }
-
- lifecycleScope.launch(Dispatchers.Default) {
- viewModel.initReadBookConfig(intent)
- viewModel.initData(intent)
-
- withContext(Main) {
- binding.readView.initAfterTransition()
- justInitData = true
- }
+ binding.rootView.doOnPreDraw {
+ startPostponedEnterTransition()
}
onBackPressedDispatcher.addCallback(this) {
- when {
- isShowingSearchResult -> {
- exitSearchMenu()
- restoreLastBookProcess()
- }
-
- ReadBook.lastBookProgress != null && confirmRestoreProcess != false -> {
- restoreLastBookProcess()
- }
-
- BaseReadAloudService.isPlay() -> {
- ReadAloud.pause(this@ReadBookActivity)
- toastOnUi(R.string.read_aloud_pause)
- }
-
- isAutoPage -> {
- autoPageStop()
- }
-
- getPrefBoolean("disableReturnKey") && !menuLayoutIsVisible -> {
-
- }
-
- else -> finish()
+ if (isShowingSearchResult) {
+ exitSearchMenu()
+ restoreLastBookProcess()
+ return@addCallback
}
+ //拦截返回供恢复阅读进度
+ if (ReadBook.lastBookProgress != null && confirmRestoreProcess != false) {
+ restoreLastBookProcess()
+ return@addCallback
+ }
+ if (BaseReadAloudService.isPlay()) {
+ ReadAloud.pause(this@ReadBookActivity)
+ toastOnUi(R.string.read_aloud_pause)
+ return@addCallback
+ }
+ if (isAutoPage) {
+ autoPageStop()
+ return@addCallback
+ }
+ if (getPrefBoolean("disableReturnKey") && !menuLayoutIsVisible) {
+ return@addCallback
+ }
+ finish()
}
}
@@ -324,8 +365,6 @@ class ReadBookActivity : BaseReadBookActivity(),
upScreenTimeOut()
ReadBook.register(this)
}
-
-
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
viewModel.initData(intent)
diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml
index 14f99b772..94186ebbc 100644
--- a/app/src/main/res/xml/pref_config_other.xml
+++ b/app/src/main/res/xml/pref_config_other.xml
@@ -94,6 +94,18 @@
android:summary="@string/firebase_enable_summary"
android:title="@string/firebase_enable_title" />
+
+
+
+