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
This commit is contained in:
Mill Chen
2019-02-13 18:48:48 +08:00
parent 72ba39cdf4
commit 09fedbf7ec
4 changed files with 96 additions and 15 deletions

View File

@@ -9169,8 +9169,11 @@
<!-- Title of condition that do not disturb is on [CHAR LIMIT=36] --> <!-- Title of condition that do not disturb is on [CHAR LIMIT=36] -->
<string name="condition_zen_title">Do Not Disturb is on</string> <string name="condition_zen_title">Do Not Disturb is on</string>
<!-- Summary of condition that do not disturb is on [CHAR LIMIT=36] --> <!-- Summary of condition that do not disturb is on and all exceptions set to off [CHAR LIMIT=36] -->
<string name="condition_zen_summary">Impacts what you hear and see</string> <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] --> <!-- Title of condition that battery saver is on [CHAR LIMIT=30] -->
<string name="condition_battery_title">Battery Saver is on</string> <string name="condition_battery_title">Battery Saver is on</string>
@@ -9200,25 +9203,16 @@
<string name="condition_device_muted_action_turn_on_sound">Turn on sound</string> <string name="condition_device_muted_action_turn_on_sound">Turn on sound</string>
<!-- Title of condition that indicates device is muted [CHAR LIMIT=50] --> <!-- Title of condition that indicates device is muted [CHAR LIMIT=50] -->
<string name="condition_device_muted_title" product="tablet">Device is muted</string> <string name="condition_device_muted_title">Ringer muted</string>
<!-- Title of condition that indicates device is muted [CHAR LIMIT=50] -->
<string name="condition_device_muted_title" product="default">Phone muted</string>
<!-- Summary of condition that indicates device is muted --> <!-- Summary of condition that indicates device is muted -->
<string name="condition_device_muted_summary">For calls &amp; notifications</string> <string name="condition_device_muted_summary">For calls &amp; notifications</string>
<!-- Title of condition that indicates device is set to vibrate [CHAR LIMIT=50] --> <!-- 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> <string name="condition_device_vibrate_title">Vibration only</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 --> <!-- 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_summary">For calls &amp; notifications</string>
<!-- Summary of condition that indicates device is set to vibrate -->
<string name="condition_device_vibrate_summary" product="default">For calls &amp; notifications</string>
<!-- Night display: Title for the night display option Suggestion (renamed "Night Light" with title caps). [CHAR LIMIT=46] --> <!-- 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> <string name="night_display_suggestion_title">Set Night Light schedule</string>

View File

@@ -23,6 +23,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.provider.Settings; import android.provider.Settings;
import android.service.notification.ZenModeConfig;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
@@ -97,7 +98,7 @@ public class DndConditionCardController implements ConditionalCardController {
.setName(mAppContext.getPackageName() + "/" .setName(mAppContext.getPackageName() + "/"
+ mAppContext.getText(R.string.condition_zen_title)) + mAppContext.getText(R.string.condition_zen_title))
.setTitleText(mAppContext.getText(R.string.condition_zen_title).toString()) .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)) .setIconDrawable(mAppContext.getDrawable(R.drawable.ic_do_not_disturb_on_24dp))
.setViewType(ConditionContextualCardRenderer.VIEW_TYPE_HALF_WIDTH) .setViewType(ConditionContextualCardRenderer.VIEW_TYPE_HALF_WIDTH)
.build(); .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();
}
} }

View File

@@ -16,13 +16,22 @@
package com.android.settings.homepage.contextualcards.conditional; 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.any;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import android.app.NotificationManager;
import android.content.Context; 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.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -30,7 +39,10 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
@Config(shadows = ShadowNotificationManager.class)
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class DndConditionalCardControllerTest { public class DndConditionalCardControllerTest {
@@ -38,12 +50,14 @@ public class DndConditionalCardControllerTest {
private ConditionManager mConditionManager; private ConditionManager mConditionManager;
private Context mContext; private Context mContext;
private DndConditionCardController mController; private DndConditionCardController mController;
private ShadowNotificationManager mNotificationManager;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mController = new DndConditionCardController(mContext, mConditionManager); mController = new DndConditionCardController(mContext, mConditionManager);
mNotificationManager = Shadow.extract(mContext.getSystemService(NotificationManager.class));
} }
@Test @Test
@@ -55,4 +69,58 @@ public class DndConditionalCardControllerTest {
eq(DndConditionCardController.DND_FILTER)); eq(DndConditionCardController.DND_FILTER));
verify(mContext).unregisterReceiver(any(DndConditionCardController.Receiver.class)); 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;
}
} }

View File

@@ -18,6 +18,7 @@ package com.android.settings.testutils.shadow;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.net.Uri; import android.net.Uri;
import android.service.notification.ZenModeConfig;
import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements; import org.robolectric.annotation.Implements;
@@ -26,6 +27,7 @@ import org.robolectric.annotation.Implements;
public class ShadowNotificationManager { public class ShadowNotificationManager {
private int mZenMode; private int mZenMode;
private ZenModeConfig mZenModeConfig;
@Implementation @Implementation
protected void setZenMode(int mode, Uri conditionId, String reason) { protected void setZenMode(int mode, Uri conditionId, String reason) {
@@ -36,4 +38,13 @@ public class ShadowNotificationManager {
protected int getZenMode() { protected int getZenMode() {
return mZenMode; return mZenMode;
} }
@Implementation
public ZenModeConfig getZenModeConfig() {
return mZenModeConfig;
}
public void setZenModeConfig(ZenModeConfig config) {
mZenModeConfig = config;
}
} }