From d103c90cbc3e501de1aa824c7609b1b7fecbc5fb Mon Sep 17 00:00:00 2001 From: Rasheed Lewis Date: Mon, 6 Jun 2022 14:10:17 +0000 Subject: Replaced DoNotDisturb QS tiles with new animated ones Test: Unit and manually tested Fixes: 229979692 Change-Id: Ic4158ed6dad25c237bb75ea442ab126607611e76 --- packages/SystemUI/res/drawable/qs_dnd_icon_off.xml | 56 +++++++++++++++++ packages/SystemUI/res/drawable/qs_dnd_icon_on.xml | 73 ++++++++++++++++++++++ .../src/com/android/systemui/qs/tiles/DndTile.java | 7 +-- .../com/android/systemui/qs/tiles/DndTileTest.kt | 33 ++++++++++ 4 files changed, 165 insertions(+), 4 deletions(-) create mode 100644 packages/SystemUI/res/drawable/qs_dnd_icon_off.xml create mode 100644 packages/SystemUI/res/drawable/qs_dnd_icon_on.xml diff --git a/packages/SystemUI/res/drawable/qs_dnd_icon_off.xml b/packages/SystemUI/res/drawable/qs_dnd_icon_off.xml new file mode 100644 index 000000000000..e42381a4d5a3 --- /dev/null +++ b/packages/SystemUI/res/drawable/qs_dnd_icon_off.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/drawable/qs_dnd_icon_on.xml b/packages/SystemUI/res/drawable/qs_dnd_icon_on.xml new file mode 100644 index 000000000000..a63cb238f5a0 --- /dev/null +++ b/packages/SystemUI/res/drawable/qs_dnd_icon_on.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java index 3dcfbc04c463..8b7f53fa5a3f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java @@ -226,16 +226,15 @@ public class DndTile extends QSTileImpl { if (mController == null) return; final int zen = arg instanceof Integer ? (Integer) arg : mController.getZen(); final boolean newValue = zen != ZEN_MODE_OFF; - final boolean valueChanged = state.value != newValue; - if (state.slash == null) state.slash = new SlashState(); state.dualTarget = true; state.value = newValue; state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; - state.slash.isSlashed = !state.value; + state.icon = ResourceIcon.get(state.value + ? R.drawable.qs_dnd_icon_on + : R.drawable.qs_dnd_icon_off); state.label = getTileLabel(); state.secondaryLabel = TextUtils.emptyIfNull(ZenModeConfig.getDescription(mContext, zen != Global.ZEN_MODE_OFF, mController.getConfig(), false)); - state.icon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_dnd); checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_ADJUST_VOLUME); // Keeping the secondaryLabel in contentDescription instead of stateDescription is easier // to understand. diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt index ae70d3203d57..ce5edb147d87 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt @@ -21,6 +21,7 @@ import android.content.ContextWrapper import android.content.SharedPreferences import android.os.Handler import android.provider.Settings +import android.provider.Settings.Global.ZEN_MODE_NO_INTERRUPTIONS import android.provider.Settings.Global.ZEN_MODE_OFF import android.testing.AndroidTestingRunner import android.testing.TestableLooper @@ -28,13 +29,16 @@ import android.view.View import androidx.test.filters.SmallTest import com.android.internal.logging.MetricsLogger import com.android.internal.logging.UiEventLogger +import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.qs.QSHost import com.android.systemui.qs.logging.QSLogger +import com.android.systemui.qs.tileimpl.QSTileImpl import com.android.systemui.statusbar.policy.ZenModeController import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.eq @@ -66,22 +70,31 @@ class DndTileTest : SysuiTestCase() { @Mock private lateinit var qsHost: QSHost + @Mock private lateinit var metricsLogger: MetricsLogger + @Mock private lateinit var statusBarStateController: StatusBarStateController + @Mock private lateinit var activityStarter: ActivityStarter + @Mock private lateinit var qsLogger: QSLogger + @Mock private lateinit var uiEventLogger: UiEventLogger + @Mock private lateinit var zenModeController: ZenModeController + @Mock private lateinit var sharedPreferences: SharedPreferences + @Mock private lateinit var dialogLaunchAnimator: DialogLaunchAnimator + @Mock private lateinit var hostDialog: Dialog @@ -190,4 +203,24 @@ class DndTileTest : SysuiTestCase() { verify(dialogLaunchAnimator, never()).showFromView(any(), any(), nullable(), anyBoolean()) } + + @Test + fun testIcon_whenDndModeOff_isOffState() { + whenever(zenModeController.zen).thenReturn(ZEN_MODE_OFF) + val state = QSTile.BooleanState() + + tile.handleUpdateState(state, /* arg= */ null) + + assertThat(state.icon).isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_dnd_icon_off)) + } + + @Test + fun testIcon_whenDndModeOn_isOnState() { + whenever(zenModeController.zen).thenReturn(ZEN_MODE_NO_INTERRUPTIONS) + val state = QSTile.BooleanState() + + tile.handleUpdateState(state, /* arg= */ null) + + assertThat(state.icon).isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_dnd_icon_on)) + } } -- cgit v1.2.3-59-g8ed1b