From 09fedbf7ec5e60a85c6df289521c7e955c6ca3bb Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Wed, 13 Feb 2019 18:48:48 +0800 Subject: [PATCH] Update the summary for DND conditional Since original string is too long for DND conditional subtext, separate DND conditional to two different states, one is for "Phone muted" state, the othe is for "With exceptions" state. Also, clean up the strings of other product variants for the conditional. Bug: 122929205 Test: visual Change-Id: Icb156ff9a4858a26355d92e6d4fb82ad1927b278 --- res/values/strings.xml | 22 +++--- .../DndConditionCardController.java | 10 ++- .../DndConditionalCardControllerTest.java | 68 +++++++++++++++++++ .../shadow/ShadowNotificationManager.java | 11 +++ 4 files changed, 96 insertions(+), 15 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 7bd9950f9b3..9ad5d98161b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -9169,8 +9169,11 @@ Do Not Disturb is on - - Impacts what you hear and see + + Phone muted + + + With exceptions Battery Saver is on @@ -9200,25 +9203,16 @@ Turn on sound - Device is muted - - - Phone muted + Ringer muted For calls & notifications - Device is set to vibrate - - - Vibration only + Vibration only - Calls and notifications will vibrate device - - - For calls & notifications + For calls & notifications Set Night Light schedule diff --git a/src/com/android/settings/homepage/contextualcards/conditional/DndConditionCardController.java b/src/com/android/settings/homepage/contextualcards/conditional/DndConditionCardController.java index 43ff537d0e5..5f95de4bfce 100644 --- a/src/com/android/settings/homepage/contextualcards/conditional/DndConditionCardController.java +++ b/src/com/android/settings/homepage/contextualcards/conditional/DndConditionCardController.java @@ -23,6 +23,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.provider.Settings; +import android.service.notification.ZenModeConfig; import androidx.annotation.VisibleForTesting; @@ -97,7 +98,7 @@ public class DndConditionCardController implements ConditionalCardController { .setName(mAppContext.getPackageName() + "/" + mAppContext.getText(R.string.condition_zen_title)) .setTitleText(mAppContext.getText(R.string.condition_zen_title).toString()) - .setSummaryText(mAppContext.getText(R.string.condition_zen_summary).toString()) + .setSummaryText(getSummary()) .setIconDrawable(mAppContext.getDrawable(R.drawable.ic_do_not_disturb_on_24dp)) .setViewType(ConditionContextualCardRenderer.VIEW_TYPE_HALF_WIDTH) .build(); @@ -112,4 +113,11 @@ public class DndConditionCardController implements ConditionalCardController { } } } + + private String getSummary() { + if (ZenModeConfig.areAllZenBehaviorSoundsMuted(mNotificationManager.getZenModeConfig())) { + return mAppContext.getText(R.string.condition_zen_summary_phone_muted).toString(); + } + return mAppContext.getText(R.string.condition_zen_summary_with_exceptions).toString(); + } } diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/DndConditionalCardControllerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/DndConditionalCardControllerTest.java index 5d72ee46613..dcd09638af5 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/DndConditionalCardControllerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/DndConditionalCardControllerTest.java @@ -16,13 +16,22 @@ package com.android.settings.homepage.contextualcards.conditional; +import static com.google.common.truth.Truth.assertThat; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import android.app.NotificationManager; import android.content.Context; +import android.service.notification.ZenModeConfig; +import com.android.settings.R; +import com.android.settings.homepage.contextualcards.ContextualCard; +import com.android.settings.testutils.shadow.ShadowNotificationManager; + +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,7 +39,10 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.shadow.api.Shadow; +@Config(shadows = ShadowNotificationManager.class) @RunWith(RobolectricTestRunner.class) public class DndConditionalCardControllerTest { @@ -38,12 +50,14 @@ public class DndConditionalCardControllerTest { private ConditionManager mConditionManager; private Context mContext; private DndConditionCardController mController; + private ShadowNotificationManager mNotificationManager; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); mController = new DndConditionCardController(mContext, mConditionManager); + mNotificationManager = Shadow.extract(mContext.getSystemService(NotificationManager.class)); } @Test @@ -55,4 +69,58 @@ public class DndConditionalCardControllerTest { eq(DndConditionCardController.DND_FILTER)); verify(mContext).unregisterReceiver(any(DndConditionCardController.Receiver.class)); } + + @Test + public void buildContextualCard_allSoundsMuted_shouldHavePhoneMutedSummary() { + mNotificationManager.setZenModeConfig(getMutedAllConfig()); + + final ContextualCard card = mController.buildContextualCard(); + + assertThat(card.getSummaryText()).isEqualTo( + mContext.getString(R.string.condition_zen_summary_phone_muted)); + } + + @Test + public void buildContextualCard_allowSomeSounds_shouldHaveWittExceptionsSummary() { + mNotificationManager.setZenModeConfig(getCustomConfig()); + + final ContextualCard card = mController.buildContextualCard(); + + assertThat(card.getSummaryText()).isEqualTo( + mContext.getString(R.string.condition_zen_summary_with_exceptions)); + } + + private ZenModeConfig getCustomConfig() { + final ZenModeConfig config = new ZenModeConfig(); + // Some sounds allowed + config.allowAlarms = true; + config.allowMedia = false; + config.allowSystem = false; + config.allowCalls = true; + config.allowRepeatCallers = true; + config.allowMessages = false; + config.allowReminders = false; + config.allowEvents = false; + config.areChannelsBypassingDnd = false; + config.allowCallsFrom = ZenModeConfig.SOURCE_ANYONE; + config.allowMessagesFrom = ZenModeConfig.SOURCE_ANYONE; + config.suppressedVisualEffects = 0; + return config; + } + + private ZenModeConfig getMutedAllConfig() { + final ZenModeConfig config = new ZenModeConfig(); + // No sounds allowed + config.allowAlarms = false; + config.allowMedia = false; + config.allowSystem = false; + config.allowCalls = false; + config.allowRepeatCallers = false; + config.allowMessages = false; + config.allowReminders = false; + config.allowEvents = false; + config.areChannelsBypassingDnd = false; + config.suppressedVisualEffects = 0; + return config; + } } diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowNotificationManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowNotificationManager.java index a1b1a23b547..83257776289 100644 --- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowNotificationManager.java +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowNotificationManager.java @@ -18,6 +18,7 @@ package com.android.settings.testutils.shadow; import android.app.NotificationManager; import android.net.Uri; +import android.service.notification.ZenModeConfig; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; @@ -26,6 +27,7 @@ import org.robolectric.annotation.Implements; public class ShadowNotificationManager { private int mZenMode; + private ZenModeConfig mZenModeConfig; @Implementation protected void setZenMode(int mode, Uri conditionId, String reason) { @@ -36,4 +38,13 @@ public class ShadowNotificationManager { protected int getZenMode() { return mZenMode; } + + @Implementation + public ZenModeConfig getZenModeConfig() { + return mZenModeConfig; + } + + public void setZenModeConfig(ZenModeConfig config) { + mZenModeConfig = config; + } }