Fallback to old systemUiVisibility in reader
This commit is contained in:
@@ -5,20 +5,19 @@ import android.os.Build
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
|
||||||
import androidx.core.view.WindowInsetsControllerCompat
|
|
||||||
import androidx.viewbinding.ViewBinding
|
import androidx.viewbinding.ViewBinding
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
|
import org.koitharu.kotatsu.core.ui.util.SystemUiController
|
||||||
|
|
||||||
abstract class BaseFullscreenActivity<B : ViewBinding> :
|
abstract class BaseFullscreenActivity<B : ViewBinding> :
|
||||||
BaseActivity<B>() {
|
BaseActivity<B>() {
|
||||||
|
|
||||||
private lateinit var insetsControllerCompat: WindowInsetsControllerCompat
|
protected lateinit var systemUiController: SystemUiController
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
with(window) {
|
with(window) {
|
||||||
insetsControllerCompat = WindowInsetsControllerCompat(this, decorView)
|
systemUiController = SystemUiController(this)
|
||||||
statusBarColor = Color.TRANSPARENT
|
statusBarColor = Color.TRANSPARENT
|
||||||
navigationBarColor = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
navigationBarColor = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||||
ContextCompat.getColor(this@BaseFullscreenActivity, R.color.dim)
|
ContextCompat.getColor(this@BaseFullscreenActivity, R.color.dim)
|
||||||
@@ -30,15 +29,7 @@ abstract class BaseFullscreenActivity<B : ViewBinding> :
|
|||||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
|
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
insetsControllerCompat.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
// insetsControllerCompat.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||||
showSystemUI()
|
systemUiController.setSystemUiVisible(true)
|
||||||
}
|
|
||||||
|
|
||||||
protected fun hideSystemUI() {
|
|
||||||
insetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars())
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun showSystemUI() {
|
|
||||||
insetsControllerCompat.show(WindowInsetsCompat.Type.systemBars())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
package org.koitharu.kotatsu.core.ui.util
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
|
import android.view.View
|
||||||
|
import android.view.Window
|
||||||
|
import android.view.WindowInsets
|
||||||
|
import android.view.WindowInsetsController
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
|
||||||
|
sealed class SystemUiController(
|
||||||
|
protected val window: Window,
|
||||||
|
) {
|
||||||
|
|
||||||
|
abstract fun setSystemUiVisible(value: Boolean)
|
||||||
|
|
||||||
|
@RequiresApi(Build.VERSION_CODES.S)
|
||||||
|
private class Api30Impl(window: Window) : SystemUiController(window) {
|
||||||
|
|
||||||
|
private val insetsController = checkNotNull(window.decorView.windowInsetsController)
|
||||||
|
|
||||||
|
override fun setSystemUiVisible(value: Boolean) {
|
||||||
|
if (value) {
|
||||||
|
insetsController.show(WindowInsets.Type.systemBars())
|
||||||
|
insetsController.systemBarsBehavior = WindowInsetsController.BEHAVIOR_DEFAULT
|
||||||
|
} else {
|
||||||
|
insetsController.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||||
|
insetsController.hide(WindowInsets.Type.systemBars())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
private class LegacyImpl(window: Window) : SystemUiController(window) {
|
||||||
|
|
||||||
|
override fun setSystemUiVisible(value: Boolean) {
|
||||||
|
window.decorView.systemUiVisibility = if (value) {
|
||||||
|
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
||||||
|
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
||||||
|
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||||
|
} else {
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
operator fun invoke(window: Window): SystemUiController =
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
Api30Impl(window)
|
||||||
|
} else {
|
||||||
|
LegacyImpl(window)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -44,6 +44,7 @@ import org.koitharu.kotatsu.core.util.GridTouchHelper
|
|||||||
import org.koitharu.kotatsu.core.util.IdlingDetector
|
import org.koitharu.kotatsu.core.util.IdlingDetector
|
||||||
import org.koitharu.kotatsu.core.util.ShareHelper
|
import org.koitharu.kotatsu.core.util.ShareHelper
|
||||||
import org.koitharu.kotatsu.core.util.ext.hasGlobalPoint
|
import org.koitharu.kotatsu.core.util.ext.hasGlobalPoint
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.isAnimationsEnabled
|
||||||
import org.koitharu.kotatsu.core.util.ext.isRtl
|
import org.koitharu.kotatsu.core.util.ext.isRtl
|
||||||
import org.koitharu.kotatsu.core.util.ext.observe
|
import org.koitharu.kotatsu.core.util.ext.observe
|
||||||
import org.koitharu.kotatsu.core.util.ext.observeEvent
|
import org.koitharu.kotatsu.core.util.ext.observeEvent
|
||||||
@@ -309,22 +310,20 @@ class ReaderActivity :
|
|||||||
|
|
||||||
private fun setUiIsVisible(isUiVisible: Boolean) {
|
private fun setUiIsVisible(isUiVisible: Boolean) {
|
||||||
if (viewBinding.appbarTop.isVisible != isUiVisible) {
|
if (viewBinding.appbarTop.isVisible != isUiVisible) {
|
||||||
val transition = TransitionSet()
|
if (isAnimationsEnabled) {
|
||||||
.setOrdering(TransitionSet.ORDERING_TOGETHER)
|
val transition = TransitionSet()
|
||||||
.addTransition(Slide(Gravity.TOP).addTarget(viewBinding.appbarTop))
|
.setOrdering(TransitionSet.ORDERING_TOGETHER)
|
||||||
.addTransition(Fade().addTarget(viewBinding.infoBar))
|
.addTransition(Slide(Gravity.TOP).addTarget(viewBinding.appbarTop))
|
||||||
viewBinding.appbarBottom?.let { bottomBar ->
|
.addTransition(Fade().addTarget(viewBinding.infoBar))
|
||||||
transition.addTransition(Slide(Gravity.BOTTOM).addTarget(bottomBar))
|
viewBinding.appbarBottom?.let { bottomBar ->
|
||||||
|
transition.addTransition(Slide(Gravity.BOTTOM).addTarget(bottomBar))
|
||||||
|
}
|
||||||
|
TransitionManager.beginDelayedTransition(viewBinding.root, transition)
|
||||||
}
|
}
|
||||||
TransitionManager.beginDelayedTransition(viewBinding.root, transition)
|
|
||||||
viewBinding.appbarTop.isVisible = isUiVisible
|
viewBinding.appbarTop.isVisible = isUiVisible
|
||||||
viewBinding.appbarBottom?.isVisible = isUiVisible
|
viewBinding.appbarBottom?.isVisible = isUiVisible
|
||||||
viewBinding.infoBar.isGone = isUiVisible || (!viewModel.isInfoBarEnabled.value)
|
viewBinding.infoBar.isGone = isUiVisible || (!viewModel.isInfoBarEnabled.value)
|
||||||
if (isUiVisible) {
|
systemUiController.setSystemUiVisible(isUiVisible)
|
||||||
showSystemUI()
|
|
||||||
} else {
|
|
||||||
hideSystemUI()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user