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" /> + + + +