Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3863c67a authored by Matías Hernández's avatar Matías Hernández
Browse files

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
parent 2c4aec3a
Loading
Loading
Loading
Loading
+31 −14
Original line number Diff line number Diff line
@@ -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);
        };
        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) {
+34 −0
Original line number Diff line number Diff line
@@ -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);