From 4c3938a1fdb846dc0c176205ee4a3f5ca5e5680e Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 7 Feb 2024 13:53:45 +0200 Subject: [PATCH] Reader fullscreen option --- .../kotatsu/core/prefs/AppSettings.kt | 4 ++++ .../kotatsu/core/ui/BaseFullscreenActivity.kt | 1 - .../kotatsu/reader/ui/ReaderActivity.kt | 7 +++++- .../kotatsu/reader/ui/ReaderInfoBarView.kt | 24 +++++++++++++------ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/pref_reader.xml | 10 ++++++-- 6 files changed, 37 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/prefs/AppSettings.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/prefs/AppSettings.kt index 77d2f9847..603d778dc 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/prefs/AppSettings.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/prefs/AppSettings.kt @@ -111,6 +111,9 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) { val isReaderZoomButtonsEnabled: Boolean get() = prefs.getBoolean(KEY_READER_ZOOM_BUTTONS, false) + val isReaderFullscreenEnabled: Boolean + get() = prefs.getBoolean(KEY_READER_FULLSCREEN, true) + val isReaderOptimizationEnabled: Boolean get() = prefs.getBoolean(KEY_READER_OPTIMIZE, false) @@ -482,6 +485,7 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) { const val KEY_LOCAL_STORAGE = "local_storage" const val KEY_READER_DOUBLE_PAGES = "reader_double_pages" const val KEY_READER_ZOOM_BUTTONS = "reader_zoom_buttons" + const val KEY_READER_FULLSCREEN = "reader_fullscreen" const val KEY_READER_VOLUME_BUTTONS = "reader_volume_buttons" const val KEY_TRACKER_ENABLED = "tracker_enabled" const val KEY_TRACKER_WIFI_ONLY = "tracker_wifi" diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/BaseFullscreenActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/BaseFullscreenActivity.kt index 7852c1b50..786475efe 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/BaseFullscreenActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/BaseFullscreenActivity.kt @@ -29,7 +29,6 @@ abstract class BaseFullscreenActivity : WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES } } - // insetsControllerCompat.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE systemUiController.setSystemUiVisible(true) } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt index 7f519af9e..6f2e4532f 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt @@ -310,10 +310,12 @@ class ReaderActivity : } TransitionManager.beginDelayedTransition(viewBinding.root, transition) } + val isFullscreen = settings.isReaderFullscreenEnabled viewBinding.appbarTop.isVisible = isUiVisible viewBinding.appbarBottom?.isVisible = isUiVisible viewBinding.infoBar.isGone = isUiVisible || (!viewModel.isInfoBarEnabled.value) - systemUiController.setSystemUiVisible(isUiVisible) + viewBinding.infoBar.isTimeVisible = isFullscreen + systemUiController.setSystemUiVisible(isUiVisible || !isFullscreen) } } @@ -330,6 +332,9 @@ class ReaderActivity : rightMargin = systemBars.right + topMargin leftMargin = systemBars.left + topMargin } + viewBinding.infoBar.updatePadding( + top = systemBars.top, + ) return WindowInsetsCompat.Builder(insets) .setInsets(WindowInsetsCompat.Type.systemBars(), Insets.NONE) .build() diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt index b45834d2e..6c456f39e 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt @@ -62,6 +62,12 @@ class ReaderInfoBarView @JvmOverloads constructor( private val innerWidth get() = width - paddingLeft - paddingRight - insetLeft - insetRight + var isTimeVisible: Boolean = true + set(value) { + field = value + invalidate() + } + init { paint.strokeWidth = context.resources.resolveDp(2f) val insetCorner = getSystemUiDimensionOffset("rounded_corner_content_padding") @@ -92,12 +98,14 @@ class ReaderInfoBarView @JvmOverloads constructor( (paddingLeft + insetLeft + cutoutInsetLeft).toFloat(), paddingTop + insetTop + ty, ) - paint.textAlign = Paint.Align.RIGHT - canvas.drawTextOutline( - timeText, - (width - paddingRight - insetRight - cutoutInsetRight).toFloat(), - paddingTop + insetTop + ty, - ) + if (isTimeVisible) { + paint.textAlign = Paint.Align.RIGHT + canvas.drawTextOutline( + timeText, + (width - paddingRight - insetRight - cutoutInsetRight).toFloat(), + paddingTop + insetTop + ty, + ) + } } override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { @@ -183,7 +191,9 @@ class ReaderInfoBarView @JvmOverloads constructor( override fun onReceive(context: Context?, intent: Intent?) { timeText = timeFormat.format(LocalTime.now()) - invalidate() + if (isTimeVisible) { + invalidate() + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1ac17ed39..40baf81c9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -586,4 +586,6 @@ Reset settings to default values? This action cannot be undone. Use two pages layout on landscape orientation (beta) Default webtoon zoom out + Fullscreen mode + Hide system status and navigation bars diff --git a/app/src/main/res/xml/pref_reader.xml b/app/src/main/res/xml/pref_reader.xml index e74a6d3d6..12482f7bc 100644 --- a/app/src/main/res/xml/pref_reader.xml +++ b/app/src/main/res/xml/pref_reader.xml @@ -76,12 +76,18 @@ android:summary="@string/reader_optimize_summary" android:title="@string/reader_optimize" /> + + + android:title="@string/reader_info_bar" />