Loading src/com/android/settings/notification/modes/ZenModesListItemPreference.java +31 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -58,6 +62,7 @@ class ZenModesListItemPreference extends RestrictedPreference { mContext = context; mIconLoader = iconLoader; mUiExecutor = uiExecutor; mDescriptions = new ZenModeDescriptions(context); setZenMode(zenMode); setKey(zenMode.getId()); } Loading Loading @@ -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); }; 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( Loading @@ -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) { Loading tests/robotests/src/com/android/settings/notification/modes/ZenModesListItemPreferenceTest.java +34 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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); Loading Loading
src/com/android/settings/notification/modes/ZenModesListItemPreference.java +31 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -58,6 +62,7 @@ class ZenModesListItemPreference extends RestrictedPreference { mContext = context; mIconLoader = iconLoader; mUiExecutor = uiExecutor; mDescriptions = new ZenModeDescriptions(context); setZenMode(zenMode); setKey(zenMode.getId()); } Loading Loading @@ -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); }; 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( Loading @@ -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) { Loading
tests/robotests/src/com/android/settings/notification/modes/ZenModesListItemPreferenceTest.java +34 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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); Loading