diff options
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() + } } |