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] -->
<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>
@@ -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 &amp; 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>
<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="tablet">Calls and notifications will vibrate device</string>
<!-- Summary of condition that indicates device is set to vibrate -->
<string name="condition_device_vibrate_summary" product="default">For calls &amp; notifications</string>
<string name="condition_device_vibrate_summary">For calls &amp; 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>

View File

@@ -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();
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}