summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt21
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialog.kt4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialogTest.kt24
3 files changed, 49 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt b/packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt
index 3f215333382e..87b0f0177d0d 100644
--- a/packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt
+++ b/packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt
@@ -19,9 +19,12 @@ import android.content.Context
import android.os.Bundle
import android.view.View
import android.widget.TextView
+import androidx.core.view.updatePadding
+import com.android.systemui.biometrics.Utils
import com.android.systemui.res.R
import com.android.systemui.statusbar.phone.SystemUIBottomSheetDialog
import com.android.systemui.statusbar.policy.ConfigurationController
+import kotlin.math.max
/**
* Dialog used to decide what to do with a connected display.
@@ -58,5 +61,23 @@ class MirroringConfirmationDialog(
onCancelMirroring.onClick(null)
}
}
+ setupInsets()
+ }
+
+ private fun setupInsets() {
+ // This avoids overlap between dialog content and navigation bars.
+ requireViewById<View>(R.id.cd_bottom_sheet).apply {
+ val navbarInsets = Utils.getNavbarInsets(context)
+ val defaultDialogBottomInset =
+ context.resources.getDimensionPixelSize(R.dimen.dialog_bottom_padding)
+ // we only care about the bottom inset as in all other configuration where navigations
+ // are in other display sides there is no overlap with the dialog.
+ updatePadding(bottom = max(navbarInsets.bottom, defaultDialogBottomInset))
+ }
+ }
+
+ override fun onConfigurationChanged() {
+ super.onConfigurationChanged()
+ setupInsets()
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialog.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialog.kt
index d7f3b0767590..71e25e9556eb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialog.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialog.kt
@@ -77,11 +77,15 @@ open class SystemUIBottomSheetDialog(
configurationController?.removeCallback(onConfigChanged)
}
+ /** Can be overridden by subclasses to receive config changed events. */
+ open fun onConfigurationChanged() {}
+
private val onConfigChanged =
object : ConfigurationListener {
override fun onConfigChanged(newConfig: Configuration?) {
super.onConfigChanged(newConfig)
setupEdgeToEdge()
+ onConfigurationChanged()
}
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialogTest.kt
index 21d22bcf3d2a..1e628bd35053 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialogTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialogTest.kt
@@ -13,13 +13,17 @@
*/
package com.android.systemui.statusbar.phone
+import android.content.res.Configuration
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper.RunWithLooper
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.argumentCaptor
+import com.android.systemui.util.mockito.capture
import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
import kotlin.test.Test
import org.junit.Before
import org.junit.runner.RunWith
@@ -31,6 +35,7 @@ import org.mockito.Mockito.verify
class SystemUIBottomSheetDialogTest : SysuiTestCase() {
private val configurationController = mock<ConfigurationController>()
+ private val config = mock<Configuration>()
private lateinit var dialog: SystemUIBottomSheetDialog
@@ -53,4 +58,23 @@ class SystemUIBottomSheetDialogTest : SysuiTestCase() {
verify(configurationController).removeCallback(any())
}
+
+ @Test
+ fun onConfigurationChanged_calledInSubclass() {
+ var onConfigChangedCalled = false
+ val subclass =
+ object : SystemUIBottomSheetDialog(mContext, configurationController) {
+ override fun onConfigurationChanged() {
+ onConfigChangedCalled = true
+ }
+ }
+
+ subclass.show()
+
+ val captor = argumentCaptor<ConfigurationController.ConfigurationListener>()
+ verify(configurationController).addCallback(capture(captor))
+ captor.value.onConfigChanged(config)
+
+ assertThat(onConfigChangedCalled).isTrue()
+ }
}