diff --git a/res/values/strings.xml b/res/values/strings.xml index 88f66ff6760..06f17a07b79 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; + } }