Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a792b08 authored by Ioana Alexandru's avatar Ioana Alexandru Committed by Android (Google) Code Review
Browse files

Merge "Show duration dialog when pressing new QS toggle" into main

parents 9aa10337 f6ed4d06
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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
@@ -123,7 +124,12 @@ class ModesTileTest : SysuiTestCase() {
            )

        userActionInteractor =
            ModesTileUserActionInteractor(inputHandler, dialogDelegate, kosmos.zenModeInteractor)
            ModesTileUserActionInteractor(
                inputHandler,
                dialogDelegate,
                kosmos.zenModeInteractor,
                kosmos.modesDialogEventLogger,
            )

        underTest =
            ModesTile(
+7 −1
Original line number Diff line number Diff line
@@ -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
@@ -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 {
+2 −1
Original line number Diff line number Diff line
@@ -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,
+12 −1
Original line number Diff line number Diff line
@@ -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
@@ -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)

@@ -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()
        }
+26 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -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,
@@ -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()
@@ -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