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

Commit 68158ee3 authored by Matías Hernández's avatar Matías Hernández Committed by Android (Google) Code Review
Browse files

Merge "Use full day names in the a11y version of schedules in mode list descriptions" into main

parents ebcff7ee 3863c67a
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);