Loading packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt +21 −0 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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() } } packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialog.kt +4 −0 Original line number Diff line number Diff line Loading @@ -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() } } } packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialogTest.kt +24 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() } } Loading
packages/SystemUI/src/com/android/systemui/display/ui/view/MirroringConfirmationDialog.kt +21 −0 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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() } }
packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialog.kt +4 −0 Original line number Diff line number Diff line Loading @@ -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() } } }
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIBottomSheetDialogTest.kt +24 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() } }