Fix system bar insets
This commit is contained in:
parent
4ad482d441
commit
bfc370fcf6
@ -53,29 +53,29 @@ class LauncherActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
viewModel.lightStatusBar.observe(this) {
|
||||
val windowController = ViewCompat.getWindowInsetsController(binding.rootView)
|
||||
windowController?.isAppearanceLightStatusBars = it
|
||||
val windowController = WindowCompat.getInsetsController(window, binding.rootView)
|
||||
windowController.isAppearanceLightStatusBars = it
|
||||
}
|
||||
|
||||
viewModel.lightNavBar.observe(this) {
|
||||
val windowController = ViewCompat.getWindowInsetsController(binding.rootView)
|
||||
windowController?.isAppearanceLightNavigationBars = it
|
||||
val windowController = WindowCompat.getInsetsController(window, binding.rootView)
|
||||
windowController.isAppearanceLightNavigationBars = it
|
||||
}
|
||||
|
||||
viewModel.hideStatusBar.observe(this) {
|
||||
val windowController = ViewCompat.getWindowInsetsController(binding.rootView)
|
||||
val windowController = WindowCompat.getInsetsController(window, binding.rootView)
|
||||
if (it) {
|
||||
windowController?.hide(WindowInsetsCompat.Type.statusBars())
|
||||
windowController.hide(WindowInsetsCompat.Type.statusBars())
|
||||
} else {
|
||||
windowController?.show(WindowInsetsCompat.Type.statusBars())
|
||||
windowController.show(WindowInsetsCompat.Type.statusBars())
|
||||
}
|
||||
}
|
||||
viewModel.hideNavBar.observe(this) {
|
||||
val windowController = ViewCompat.getWindowInsetsController(binding.rootView)
|
||||
val windowController = WindowCompat.getInsetsController(window, binding.rootView)
|
||||
if (it) {
|
||||
windowController?.hide(WindowInsetsCompat.Type.navigationBars())
|
||||
windowController.hide(WindowInsetsCompat.Type.navigationBars())
|
||||
} else {
|
||||
windowController?.show(WindowInsetsCompat.Type.navigationBars())
|
||||
windowController.show(WindowInsetsCompat.Type.navigationBars())
|
||||
}
|
||||
}
|
||||
|
||||
@ -126,8 +126,8 @@ class LauncherActivity : BaseActivity() {
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
val windowController = ViewCompat.getWindowInsetsController(binding.rootView)
|
||||
windowController?.systemBarsBehavior =
|
||||
val windowController = WindowCompat.getInsetsController(window, binding.rootView)
|
||||
windowController.systemBarsBehavior =
|
||||
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||
}
|
||||
|
||||
|
||||
@ -21,6 +21,9 @@ class LauncherScaffoldVM : ViewModel(), KoinComponent {
|
||||
|
||||
val dataStore: LauncherDataStore by inject()
|
||||
|
||||
val hideStatusBar = dataStore.data.map { it.systemBars.hideStatusBar }.asLiveData()
|
||||
val hideNavBar = dataStore.data.map { it.systemBars.hideNavBar }.asLiveData()
|
||||
|
||||
val autoFocus = dataStore.data.map { it.searchBar.autoFocus }.asLiveData()
|
||||
|
||||
var scrollY = 0
|
||||
|
||||
@ -5,6 +5,7 @@ import android.animation.ObjectAnimator
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.util.Log
|
||||
import android.util.TypedValue
|
||||
import android.view.LayoutInflater
|
||||
import android.view.MotionEvent
|
||||
@ -18,8 +19,7 @@ import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.animation.doOnEnd
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.core.view.WindowInsetsControllerCompat
|
||||
import androidx.core.view.setPadding
|
||||
import androidx.core.view.*
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
@ -239,8 +239,56 @@ class LauncherScaffoldView @JvmOverloads constructor(
|
||||
context.window.statusBarColor = it
|
||||
}
|
||||
viewModel.darkStatusBarIcons.observe(context) {
|
||||
WindowInsetsControllerCompat(context.window, this).isAppearanceLightStatusBars = it
|
||||
WindowCompat.getInsetsController(context.window, this).isAppearanceLightStatusBars = it
|
||||
}
|
||||
|
||||
viewModel.hideNavBar.observe(context) {
|
||||
updateInsetPaddings()
|
||||
}
|
||||
viewModel.hideStatusBar.observe(context) {
|
||||
updateInsetPaddings()
|
||||
}
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
|
||||
updateInsetPaddings()
|
||||
insets
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
updateInsetPaddings()
|
||||
}
|
||||
|
||||
private fun updateInsetPaddings() {
|
||||
val windowInsets = ViewCompat.getRootWindowInsets(this) ?: return
|
||||
val hideStatusBar = viewModel.hideStatusBar.value == true
|
||||
val hideNavBar = viewModel.hideNavBar.value == true
|
||||
|
||||
Log.d("MM20", "status: $hideStatusBar, nav: $hideNavBar")
|
||||
|
||||
var topPadding = 0
|
||||
var leftPadding = 0
|
||||
var rightPadding = 0
|
||||
var bottomPadding = 0
|
||||
|
||||
if (!hideStatusBar) {
|
||||
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.statusBars())
|
||||
topPadding += insets.top
|
||||
leftPadding += insets.left
|
||||
rightPadding += insets.right
|
||||
bottomPadding += insets.bottom
|
||||
}
|
||||
|
||||
if (!hideNavBar) {
|
||||
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.navigationBars())
|
||||
topPadding += insets.top
|
||||
leftPadding += insets.left
|
||||
rightPadding += insets.right
|
||||
bottomPadding += insets.bottom
|
||||
}
|
||||
|
||||
setPadding(leftPadding, topPadding, rightPadding, bottomPadding)
|
||||
}
|
||||
|
||||
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
||||
|
||||
@ -14,8 +14,7 @@
|
||||
<de.mm20.launcher2.ui.launcher.LauncherScaffoldView
|
||||
android:id="@+id/container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true" />
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<View
|
||||
android:id="@+id/activityStartOverlay"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user