Use full day names in the a11y version of schedules in mode list descriptions
Bug: 370358575 Test: atest ZenModesListItemPreferenceTest Flag: android.app.modes_ui Change-Id: I5d22b878c1d685476cf71167e7163be65416da68
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.android.settings.notification.modes;
|
||||
|
||||
import static com.android.settings.Utils.createAccessibleSequence;
|
||||
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.widget.TextView;
|
||||
@@ -28,6 +30,7 @@ import com.android.settingslib.RestrictedPreference;
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.settingslib.notification.modes.ZenIconLoader;
|
||||
import com.android.settingslib.notification.modes.ZenMode;
|
||||
import com.android.settingslib.notification.modes.ZenModeDescriptions;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
|
||||
@@ -42,6 +45,7 @@ class ZenModesListItemPreference extends RestrictedPreference {
|
||||
private final Context mContext;
|
||||
private final ZenIconLoader mIconLoader;
|
||||
private final Executor mUiExecutor;
|
||||
private final ZenModeDescriptions mDescriptions;
|
||||
private ZenMode mZenMode;
|
||||
|
||||
private TextView mTitleView;
|
||||
@@ -58,6 +62,7 @@ class ZenModesListItemPreference extends RestrictedPreference {
|
||||
mContext = context;
|
||||
mIconLoader = iconLoader;
|
||||
mUiExecutor = uiExecutor;
|
||||
mDescriptions = new ZenModeDescriptions(context);
|
||||
setZenMode(zenMode);
|
||||
setKey(zenMode.getId());
|
||||
}
|
||||
@@ -89,20 +94,17 @@ class ZenModesListItemPreference extends RestrictedPreference {
|
||||
}
|
||||
|
||||
setTitle(mZenMode.getName());
|
||||
String dynamicDescription = zenMode.getDynamicDescription(mContext);
|
||||
CharSequence statusText = switch (mZenMode.getStatus()) {
|
||||
case ENABLED_AND_ACTIVE ->
|
||||
Strings.isNullOrEmpty(dynamicDescription)
|
||||
? mContext.getString(R.string.zen_mode_active_text)
|
||||
: mContext.getString(
|
||||
R.string.zen_mode_format_status_and_trigger,
|
||||
mContext.getString(R.string.zen_mode_active_text),
|
||||
dynamicDescription);
|
||||
case ENABLED -> dynamicDescription;
|
||||
case DISABLED_BY_USER -> mContext.getString(R.string.zen_mode_disabled_by_user);
|
||||
case DISABLED_BY_OTHER -> mContext.getString(R.string.zen_mode_disabled_needs_setup);
|
||||
};
|
||||
setSummary(statusText);
|
||||
ZenMode.Status status = zenMode.getStatus();
|
||||
String statusText = getStatusText(status, mDescriptions.getTriggerDescription(zenMode));
|
||||
String triggerDescriptionForA11y = mDescriptions.getTriggerDescriptionForAccessibility(
|
||||
zenMode);
|
||||
|
||||
if (triggerDescriptionForA11y != null) {
|
||||
setSummary(createAccessibleSequence(statusText,
|
||||
getStatusText(status, triggerDescriptionForA11y)));
|
||||
} else {
|
||||
setSummary(statusText);
|
||||
}
|
||||
|
||||
setIconSize(ICON_SIZE_SMALL);
|
||||
FutureUtil.whenDone(
|
||||
@@ -116,6 +118,21 @@ class ZenModesListItemPreference extends RestrictedPreference {
|
||||
updateTextColor(zenMode);
|
||||
}
|
||||
|
||||
private String getStatusText(ZenMode.Status status, String triggerDescription) {
|
||||
return switch (status) {
|
||||
case ENABLED_AND_ACTIVE ->
|
||||
Strings.isNullOrEmpty(triggerDescription)
|
||||
? mContext.getString(R.string.zen_mode_active_text)
|
||||
: mContext.getString(
|
||||
R.string.zen_mode_format_status_and_trigger,
|
||||
mContext.getString(R.string.zen_mode_active_text),
|
||||
triggerDescription);
|
||||
case ENABLED -> Strings.nullToEmpty(triggerDescription);
|
||||
case DISABLED_BY_USER -> mContext.getString(R.string.zen_mode_disabled_by_user);
|
||||
case DISABLED_BY_OTHER -> mContext.getString(R.string.zen_mode_disabled_needs_setup);
|
||||
};
|
||||
}
|
||||
|
||||
private void updateTextColor(@Nullable ZenMode zenMode) {
|
||||
boolean isActive = zenMode != null && zenMode.isActive();
|
||||
if (mTitleView != null) {
|
||||
|
@@ -16,12 +16,19 @@
|
||||
|
||||
package com.android.settings.notification.modes;
|
||||
|
||||
import static android.app.AutomaticZenRule.TYPE_SCHEDULE_TIME;
|
||||
import static android.service.notification.SystemZenRules.PACKAGE_ANDROID;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.app.Flags;
|
||||
import android.content.Context;
|
||||
import android.platform.test.annotations.EnableFlags;
|
||||
import android.platform.test.flag.junit.SetFlagsRule;
|
||||
import android.service.notification.SystemZenRules;
|
||||
import android.service.notification.ZenModeConfig;
|
||||
import android.text.Spanned;
|
||||
import android.text.style.TtsSpan;
|
||||
|
||||
import com.android.settingslib.notification.modes.TestModeBuilder;
|
||||
import com.android.settingslib.notification.modes.ZenIconLoader;
|
||||
@@ -37,6 +44,8 @@ import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@EnableFlags(Flags.FLAG_MODES_UI)
|
||||
public class ZenModesListItemPreferenceTest {
|
||||
@@ -122,6 +131,31 @@ public class ZenModesListItemPreferenceTest {
|
||||
assertThat(preference.getIcon()).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setZenMode_scheduleTime_hasCustomTtsInSummary() {
|
||||
ZenModeConfig.ScheduleInfo scheduleInfo = new ZenModeConfig.ScheduleInfo();
|
||||
scheduleInfo.days = new int[] { Calendar.MONDAY, Calendar.TUESDAY, Calendar.WEDNESDAY };
|
||||
scheduleInfo.startHour = 11;
|
||||
scheduleInfo.endHour = 15;
|
||||
ZenMode mode = new TestModeBuilder()
|
||||
.setPackage(PACKAGE_ANDROID)
|
||||
.setType(TYPE_SCHEDULE_TIME)
|
||||
.setConditionId(ZenModeConfig.toScheduleConditionId(scheduleInfo))
|
||||
.setTriggerDescription(
|
||||
SystemZenRules.getTriggerDescriptionForScheduleTime(mContext, scheduleInfo))
|
||||
.build();
|
||||
|
||||
ZenModesListItemPreference preference = newPreference(mode);
|
||||
|
||||
assertThat(preference.getSummary()).isInstanceOf(Spanned.class);
|
||||
Spanned summary = (Spanned) preference.getSummary();
|
||||
TtsSpan[] ttsSpans = summary.getSpans(0, summary.length(), TtsSpan.class);
|
||||
assertThat(ttsSpans).hasLength(1);
|
||||
assertThat(ttsSpans[0].getType()).isEqualTo(TtsSpan.TYPE_TEXT);
|
||||
assertThat(ttsSpans[0].getArgs().getString(TtsSpan.ARG_TEXT)).isEqualTo(
|
||||
"Monday to Wednesday, 11:00 AM - 3:00 PM");
|
||||
}
|
||||
|
||||
private ZenModesListItemPreference newPreference(ZenMode zenMode) {
|
||||
return new ZenModesListItemPreference(mContext, mIconLoader, MoreExecutors.directExecutor(),
|
||||
zenMode);
|
||||
|
Reference in New Issue
Block a user