Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ModesTileTest.kt +7 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import com.android.systemui.res.R import com.android.systemui.statusbar.policy.data.repository.zenModeRepository import com.android.systemui.statusbar.policy.domain.interactor.zenModeInteractor import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.modesDialogEventLogger import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any import com.android.systemui.util.settings.FakeSettings Loading Loading @@ -123,7 +124,12 @@ class ModesTileTest : SysuiTestCase() { ) userActionInteractor = ModesTileUserActionInteractor(inputHandler, dialogDelegate, kosmos.zenModeInteractor) ModesTileUserActionInteractor( inputHandler, dialogDelegate, kosmos.zenModeInteractor, kosmos.modesDialogEventLogger, ) underTest = ModesTile( Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractorTest.kt +7 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel import com.android.systemui.statusbar.policy.data.repository.zenModeRepository import com.android.systemui.statusbar.policy.domain.interactor.zenModeInteractor import com.android.systemui.statusbar.policy.ui.dialog.mockModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.modesDialogEventLogger import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi Loading @@ -60,7 +61,12 @@ class ModesTileUserActionInteractorTest : SysuiTestCase() { private val zenModeInteractor = kosmos.zenModeInteractor private val underTest = ModesTileUserActionInteractor(inputHandler, mockDialogDelegate, zenModeInteractor) ModesTileUserActionInteractor( inputHandler, mockDialogDelegate, zenModeInteractor, kosmos.modesDialogEventLogger, ) @Test fun handleClick_active_showsDialog() = runTest { Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/ui/dialog/ModesDialogDelegateTest.kt +2 −1 Original line number Diff line number Diff line Loading @@ -66,13 +66,14 @@ class ModesDialogDelegateTest : SysuiTestCase() { whenever( mockDialogTransitionAnimator.createActivityTransitionController( any<SystemUIDialog>(), eq(null) eq(null), ) ) .thenReturn(mockAnimationController) underTest = ModesDialogDelegate( context, kosmos.systemUIDialogFactory, mockDialogTransitionAnimator, activityStarter, Loading packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt +12 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel import com.android.systemui.qs.tiles.viewmodel.QSTileUserAction import com.android.systemui.statusbar.policy.domain.interactor.ZenModeInteractor import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogEventLogger import javax.inject.Inject @SysUISingleton Loading @@ -39,6 +40,7 @@ constructor( // TODO(b/353896370): The domain layer should not have to depend on the UI layer. private val dialogDelegate: ModesDialogDelegate, private val zenModeInteractor: ZenModeInteractor, private val dialogEventLogger: ModesDialogEventLogger, ) : QSTileUserActionInteractor<ModesTileModel> { val longClickIntent = Intent(Settings.ACTION_ZEN_MODE_SETTINGS) Loading Loading @@ -78,7 +80,16 @@ constructor( Log.wtf(TAG, "Triggered DND but it's null!?") return } if (zenModeInteractor.shouldAskForZenDuration(dnd)) { dialogEventLogger.logOpenDurationDialog(dnd) // NOTE: The dialog handles turning on the mode itself. val dialog = dialogDelegate.makeDndDurationDialog() dialog.show() } else { dialogEventLogger.logModeOn(dnd) zenModeInteractor.activateMode(dnd) } } else { zenModeInteractor.deactivateAllModes() } Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/ModesDialogDelegate.kt +26 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.policy.ui.dialog import android.app.Dialog import android.content.Context import android.content.Intent import android.provider.Settings import android.util.Log Loading @@ -36,6 +38,7 @@ import com.android.compose.PlatformOutlinedButton import com.android.compose.theme.PlatformTheme import com.android.internal.annotations.VisibleForTesting import com.android.internal.jank.InteractionJankMonitor import com.android.settingslib.notification.modes.EnableZenModeDialog import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogTransitionAnimator import com.android.systemui.animation.Expandable Loading @@ -43,6 +46,7 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dialog.ui.composable.AlertDialogContent import com.android.systemui.plugins.ActivityStarter import com.android.systemui.qs.tiles.dialog.QSZenModeDialogMetricsLogger import com.android.systemui.res.R import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor import com.android.systemui.statusbar.phone.ComponentSystemUIDialog Loading @@ -61,6 +65,7 @@ import kotlinx.coroutines.withContext class ModesDialogDelegate @Inject constructor( val context: Context, private val sysuiDialogFactory: SystemUIDialogFactory, private val dialogTransitionAnimator: DialogTransitionAnimator, private val activityStarter: ActivityStarter, Loading @@ -72,6 +77,7 @@ constructor( ) : SystemUIDialog.Delegate { // NOTE: This should only be accessed/written from the main thread. @VisibleForTesting var currentDialog: ComponentSystemUIDialog? = null private val zenDialogMetricsLogger by lazy { QSZenModeDialogMetricsLogger(context) } override fun createDialog(): SystemUIDialog { Assert.isMainThread() Loading Loading @@ -195,6 +201,26 @@ constructor( activityStarter.startActivity(intent, /* dismissShade= */ true, animationController) } /** * Special dialog to ask the user for the duration of DND. Not to be confused with the modes * dialog itself. */ fun makeDndDurationDialog(): Dialog { val dialog = EnableZenModeDialog( context, R.style.Theme_SystemUI_Dialog, /* cancelIsNeutral= */ true, zenDialogMetricsLogger, ) .createDialog() SystemUIDialog.applyFlags(dialog) SystemUIDialog.setShowForAllUsers(dialog, true) SystemUIDialog.registerDismissListener(dialog) SystemUIDialog.setDialogSize(dialog) return dialog } companion object { private const val TAG = "ModesDialogDelegate" private val ZEN_MODE_SETTINGS_INTENT = Intent(Settings.ACTION_ZEN_MODE_SETTINGS) Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ModesTileTest.kt +7 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import com.android.systemui.res.R import com.android.systemui.statusbar.policy.data.repository.zenModeRepository import com.android.systemui.statusbar.policy.domain.interactor.zenModeInteractor import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.modesDialogEventLogger import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any import com.android.systemui.util.settings.FakeSettings Loading Loading @@ -123,7 +124,12 @@ class ModesTileTest : SysuiTestCase() { ) userActionInteractor = ModesTileUserActionInteractor(inputHandler, dialogDelegate, kosmos.zenModeInteractor) ModesTileUserActionInteractor( inputHandler, dialogDelegate, kosmos.zenModeInteractor, kosmos.modesDialogEventLogger, ) underTest = ModesTile( Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractorTest.kt +7 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel import com.android.systemui.statusbar.policy.data.repository.zenModeRepository import com.android.systemui.statusbar.policy.domain.interactor.zenModeInteractor import com.android.systemui.statusbar.policy.ui.dialog.mockModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.modesDialogEventLogger import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi Loading @@ -60,7 +61,12 @@ class ModesTileUserActionInteractorTest : SysuiTestCase() { private val zenModeInteractor = kosmos.zenModeInteractor private val underTest = ModesTileUserActionInteractor(inputHandler, mockDialogDelegate, zenModeInteractor) ModesTileUserActionInteractor( inputHandler, mockDialogDelegate, zenModeInteractor, kosmos.modesDialogEventLogger, ) @Test fun handleClick_active_showsDialog() = runTest { Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/ui/dialog/ModesDialogDelegateTest.kt +2 −1 Original line number Diff line number Diff line Loading @@ -66,13 +66,14 @@ class ModesDialogDelegateTest : SysuiTestCase() { whenever( mockDialogTransitionAnimator.createActivityTransitionController( any<SystemUIDialog>(), eq(null) eq(null), ) ) .thenReturn(mockAnimationController) underTest = ModesDialogDelegate( context, kosmos.systemUIDialogFactory, mockDialogTransitionAnimator, activityStarter, Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt +12 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel import com.android.systemui.qs.tiles.viewmodel.QSTileUserAction import com.android.systemui.statusbar.policy.domain.interactor.ZenModeInteractor import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogEventLogger import javax.inject.Inject @SysUISingleton Loading @@ -39,6 +40,7 @@ constructor( // TODO(b/353896370): The domain layer should not have to depend on the UI layer. private val dialogDelegate: ModesDialogDelegate, private val zenModeInteractor: ZenModeInteractor, private val dialogEventLogger: ModesDialogEventLogger, ) : QSTileUserActionInteractor<ModesTileModel> { val longClickIntent = Intent(Settings.ACTION_ZEN_MODE_SETTINGS) Loading Loading @@ -78,7 +80,16 @@ constructor( Log.wtf(TAG, "Triggered DND but it's null!?") return } if (zenModeInteractor.shouldAskForZenDuration(dnd)) { dialogEventLogger.logOpenDurationDialog(dnd) // NOTE: The dialog handles turning on the mode itself. val dialog = dialogDelegate.makeDndDurationDialog() dialog.show() } else { dialogEventLogger.logModeOn(dnd) zenModeInteractor.activateMode(dnd) } } else { zenModeInteractor.deactivateAllModes() } Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/ModesDialogDelegate.kt +26 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.policy.ui.dialog import android.app.Dialog import android.content.Context import android.content.Intent import android.provider.Settings import android.util.Log Loading @@ -36,6 +38,7 @@ import com.android.compose.PlatformOutlinedButton import com.android.compose.theme.PlatformTheme import com.android.internal.annotations.VisibleForTesting import com.android.internal.jank.InteractionJankMonitor import com.android.settingslib.notification.modes.EnableZenModeDialog import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogTransitionAnimator import com.android.systemui.animation.Expandable Loading @@ -43,6 +46,7 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dialog.ui.composable.AlertDialogContent import com.android.systemui.plugins.ActivityStarter import com.android.systemui.qs.tiles.dialog.QSZenModeDialogMetricsLogger import com.android.systemui.res.R import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor import com.android.systemui.statusbar.phone.ComponentSystemUIDialog Loading @@ -61,6 +65,7 @@ import kotlinx.coroutines.withContext class ModesDialogDelegate @Inject constructor( val context: Context, private val sysuiDialogFactory: SystemUIDialogFactory, private val dialogTransitionAnimator: DialogTransitionAnimator, private val activityStarter: ActivityStarter, Loading @@ -72,6 +77,7 @@ constructor( ) : SystemUIDialog.Delegate { // NOTE: This should only be accessed/written from the main thread. @VisibleForTesting var currentDialog: ComponentSystemUIDialog? = null private val zenDialogMetricsLogger by lazy { QSZenModeDialogMetricsLogger(context) } override fun createDialog(): SystemUIDialog { Assert.isMainThread() Loading Loading @@ -195,6 +201,26 @@ constructor( activityStarter.startActivity(intent, /* dismissShade= */ true, animationController) } /** * Special dialog to ask the user for the duration of DND. Not to be confused with the modes * dialog itself. */ fun makeDndDurationDialog(): Dialog { val dialog = EnableZenModeDialog( context, R.style.Theme_SystemUI_Dialog, /* cancelIsNeutral= */ true, zenDialogMetricsLogger, ) .createDialog() SystemUIDialog.applyFlags(dialog) SystemUIDialog.setShowForAllUsers(dialog, true) SystemUIDialog.registerDismissListener(dialog) SystemUIDialog.setDialogSize(dialog) return dialog } companion object { private const val TAG = "ModesDialogDelegate" private val ZEN_MODE_SETTINGS_INTENT = Intent(Settings.ACTION_ZEN_MODE_SETTINGS) Loading