Fix a crash related to WindowInsetControllerCompat on Android 10 and below

This commit is contained in:
MM20 2022-02-20 18:37:29 +01:00
parent acd1803c36
commit 5549e5db30
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -7,10 +7,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.core.view.WindowCompat import androidx.core.view.*
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.core.view.doOnNextLayout
import com.afollestad.materialdialogs.LayoutMode import com.afollestad.materialdialogs.LayoutMode
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.bottomsheets.BottomSheet
@ -55,30 +52,30 @@ class LauncherActivity : BaseActivity() {
} }
} }
val windowController = WindowInsetsControllerCompat(window, binding.rootView)
windowController.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
viewModel.lightStatusBar.observe(this) { viewModel.lightStatusBar.observe(this) {
windowController.isAppearanceLightStatusBars = it val windowController = ViewCompat.getWindowInsetsController(binding.rootView)
windowController?.isAppearanceLightStatusBars = it
} }
viewModel.lightNavBar.observe(this) { viewModel.lightNavBar.observe(this) {
windowController.isAppearanceLightNavigationBars = it val windowController = ViewCompat.getWindowInsetsController(binding.rootView)
windowController?.isAppearanceLightNavigationBars = it
} }
viewModel.hideStatusBar.observe(this) { viewModel.hideStatusBar.observe(this) {
val windowController = ViewCompat.getWindowInsetsController(binding.rootView)
if (it) { if (it) {
windowController.hide(WindowInsetsCompat.Type.statusBars()) windowController?.hide(WindowInsetsCompat.Type.statusBars())
} else { } else {
windowController.show(WindowInsetsCompat.Type.statusBars()) windowController?.show(WindowInsetsCompat.Type.statusBars())
} }
} }
viewModel.hideNavBar.observe(this) { viewModel.hideNavBar.observe(this) {
val windowController = ViewCompat.getWindowInsetsController(binding.rootView)
if (it) { if (it) {
windowController.hide(WindowInsetsCompat.Type.navigationBars()) windowController?.hide(WindowInsetsCompat.Type.navigationBars())
} else { } else {
windowController.show(WindowInsetsCompat.Type.navigationBars()) windowController?.show(WindowInsetsCompat.Type.navigationBars())
} }
} }
@ -127,6 +124,13 @@ class LauncherActivity : BaseActivity() {
lifecycle.addObserver(dynamicIconController) lifecycle.addObserver(dynamicIconController)
} }
override fun onAttachedToWindow() {
super.onAttachedToWindow()
val windowController = ViewCompat.getWindowInsetsController(binding.rootView)
windowController?.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
binding.activityStartOverlay.visibility = View.INVISIBLE binding.activityStartOverlay.visibility = View.INVISIBLE