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