diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt
index 91212348..dc7ff3ab 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt
@@ -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
}
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt
index a6889aab..97a3f373 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt
@@ -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
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldView.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldView.kt
index 143985b3..0afff54a 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldView.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldView.kt
@@ -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) {
diff --git a/ui/src/main/res/layout/activity_launcher.xml b/ui/src/main/res/layout/activity_launcher.xml
index c3b324aa..0a39faca 100644
--- a/ui/src/main/res/layout/activity_launcher.xml
+++ b/ui/src/main/res/layout/activity_launcher.xml
@@ -14,8 +14,7 @@
+ android:layout_height="match_parent" />