Loading res/values/strings.xml +8 −14 Original line number Diff line number Diff line Loading @@ -9169,8 +9169,11 @@ <!-- Title of condition that do not disturb is on [CHAR LIMIT=36] --> <string name="condition_zen_title">Do Not Disturb is on</string> <!-- Summary of condition that do not disturb is on [CHAR LIMIT=36] --> <string name="condition_zen_summary">Impacts what you hear and see</string> <!-- Summary of condition that do not disturb is on and all exceptions set to off [CHAR LIMIT=36] --> <string name="condition_zen_summary_phone_muted">Phone muted</string> <!-- Summary of condition that do not disturb is on and some exceptions are allowed [CHAR LIMIT=36] --> <string name="condition_zen_summary_with_exceptions">With exceptions</string> <!-- Title of condition that battery saver is on [CHAR LIMIT=30] --> <string name="condition_battery_title">Battery Saver is on</string> Loading Loading @@ -9200,25 +9203,16 @@ <string name="condition_device_muted_action_turn_on_sound">Turn on sound</string> <!-- Title of condition that indicates device is muted [CHAR LIMIT=50] --> <string name="condition_device_muted_title" product="tablet">Device is muted</string> <!-- Title of condition that indicates device is muted [CHAR LIMIT=50] --> <string name="condition_device_muted_title" product="default">Phone muted</string> <string name="condition_device_muted_title">Ringer muted</string> <!-- Summary of condition that indicates device is muted --> <string name="condition_device_muted_summary">For calls & notifications</string> <!-- Title of condition that indicates device is set to vibrate [CHAR LIMIT=50] --> <string name="condition_device_vibrate_title" product="tablet">Device is set to vibrate</string> <!-- Title of condition that indicates device is muted [CHAR LIMIT=50] --> <string name="condition_device_vibrate_title" product="default">Vibration only</string> <!-- Summary of condition that indicates device is set to vibrate --> <string name="condition_device_vibrate_summary" product="tablet">Calls and notifications will vibrate device</string> <string name="condition_device_vibrate_title">Vibration only</string> <!-- Summary of condition that indicates device is set to vibrate --> <string name="condition_device_vibrate_summary" product="default">For calls & notifications</string> <string name="condition_device_vibrate_summary">For calls & notifications</string> <!-- Night display: Title for the night display option Suggestion (renamed "Night Light" with title caps). [CHAR LIMIT=46] --> <string name="night_display_suggestion_title">Set Night Light schedule</string> src/com/android/settings/homepage/contextualcards/conditional/DndConditionCardController.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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(); } } tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/DndConditionalCardControllerTest.java +68 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading @@ -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 Loading @@ -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; } } tests/robotests/src/com/android/settings/testutils/shadow/ShadowNotificationManager.java +11 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading @@ -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; } } Loading
res/values/strings.xml +8 −14 Original line number Diff line number Diff line Loading @@ -9169,8 +9169,11 @@ <!-- Title of condition that do not disturb is on [CHAR LIMIT=36] --> <string name="condition_zen_title">Do Not Disturb is on</string> <!-- Summary of condition that do not disturb is on [CHAR LIMIT=36] --> <string name="condition_zen_summary">Impacts what you hear and see</string> <!-- Summary of condition that do not disturb is on and all exceptions set to off [CHAR LIMIT=36] --> <string name="condition_zen_summary_phone_muted">Phone muted</string> <!-- Summary of condition that do not disturb is on and some exceptions are allowed [CHAR LIMIT=36] --> <string name="condition_zen_summary_with_exceptions">With exceptions</string> <!-- Title of condition that battery saver is on [CHAR LIMIT=30] --> <string name="condition_battery_title">Battery Saver is on</string> Loading Loading @@ -9200,25 +9203,16 @@ <string name="condition_device_muted_action_turn_on_sound">Turn on sound</string> <!-- Title of condition that indicates device is muted [CHAR LIMIT=50] --> <string name="condition_device_muted_title" product="tablet">Device is muted</string> <!-- Title of condition that indicates device is muted [CHAR LIMIT=50] --> <string name="condition_device_muted_title" product="default">Phone muted</string> <string name="condition_device_muted_title">Ringer muted</string> <!-- Summary of condition that indicates device is muted --> <string name="condition_device_muted_summary">For calls & notifications</string> <!-- Title of condition that indicates device is set to vibrate [CHAR LIMIT=50] --> <string name="condition_device_vibrate_title" product="tablet">Device is set to vibrate</string> <!-- Title of condition that indicates device is muted [CHAR LIMIT=50] --> <string name="condition_device_vibrate_title" product="default">Vibration only</string> <!-- Summary of condition that indicates device is set to vibrate --> <string name="condition_device_vibrate_summary" product="tablet">Calls and notifications will vibrate device</string> <string name="condition_device_vibrate_title">Vibration only</string> <!-- Summary of condition that indicates device is set to vibrate --> <string name="condition_device_vibrate_summary" product="default">For calls & notifications</string> <string name="condition_device_vibrate_summary">For calls & notifications</string> <!-- Night display: Title for the night display option Suggestion (renamed "Night Light" with title caps). [CHAR LIMIT=46] --> <string name="night_display_suggestion_title">Set Night Light schedule</string>
src/com/android/settings/homepage/contextualcards/conditional/DndConditionCardController.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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(); } }
tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/DndConditionalCardControllerTest.java +68 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading @@ -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 Loading @@ -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; } }
tests/robotests/src/com/android/settings/testutils/shadow/ShadowNotificationManager.java +11 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading @@ -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; } }