From abc4ab92a97c05eef35456c1b59276de7036f251 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Thu, 17 Dec 2020 18:22:22 +0200 Subject: [PATCH] Fix reader immersive mode --- .../kotatsu/base/ui/BaseFullscreenActivity.kt | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseFullscreenActivity.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseFullscreenActivity.kt index 8f513dd02..4d453b186 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseFullscreenActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseFullscreenActivity.kt @@ -3,37 +3,55 @@ package org.koitharu.kotatsu.base.ui import android.graphics.Color import android.os.Build import android.os.Bundle +import android.view.View import android.view.WindowManager -import androidx.core.view.WindowInsetsCompat -import androidx.core.view.WindowInsetsControllerCompat import androidx.viewbinding.ViewBinding -abstract class BaseFullscreenActivity : BaseActivity() { - - private lateinit var insetsControllerCompat: WindowInsetsControllerCompat +abstract class BaseFullscreenActivity : BaseActivity(), + View.OnSystemUiVisibilityChangeListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) with(window) { - insetsControllerCompat = WindowInsetsControllerCompat(this, decorView) - insetsControllerCompat.systemBarsBehavior = - WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE statusBarColor = Color.TRANSPARENT navigationBarColor = Color.TRANSPARENT if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES } + decorView.setOnSystemUiVisibilityChangeListener(this@BaseFullscreenActivity) } showSystemUI() } + final override fun onSystemUiVisibilityChange(visibility: Int) { + onSystemUiVisibilityChanged(visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) + } + + // TODO WindowInsetsControllerCompat works incorrect protected fun hideSystemUI() { - insetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars()) + window.decorView.systemUiVisibility = SYSTEM_UI_FLAGS_HIDDEN } protected fun showSystemUI() { - insetsControllerCompat.show(WindowInsetsCompat.Type.systemBars()) + window.decorView.systemUiVisibility = SYSTEM_UI_FLAGS_SHOWN + } + + protected open fun onSystemUiVisibilityChanged(isVisible: Boolean) = Unit + + @Suppress("DEPRECATION") + private companion object { + + const val SYSTEM_UI_FLAGS_SHOWN = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or + View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + + const val SYSTEM_UI_FLAGS_HIDDEN = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or + View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or + View.SYSTEM_UI_FLAG_FULLSCREEN or + View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY } } \ No newline at end of file