From 0359aaeb47e66b1d7eda4e1291aaf7ef5d280627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Hern=C3=A1ndez?= Date: Tue, 30 Jul 2024 18:50:55 +0200 Subject: [PATCH] Tweak Modes layouts and use updated strings to match mocks Bug: 333682392 Test: mostly manual, also ZenModeTriggerUpdatePreferenceControllerTest Flag: android.app.modes_ui Change-Id: I5bae828a55128f3cb0b07ea0ff21ca196e7564dc --- res/values/strings.xml | 72 ++++++++++--------- res/xml/modes_calls_settings.xml | 15 ++-- res/xml/modes_list_settings.xml | 5 +- res/xml/modes_messages_settings.xml | 6 ++ res/xml/modes_people_settings.xml | 7 ++ res/xml/modes_set_calendar.xml | 8 +-- .../ZenModeButtonPreferenceController.java | 4 +- .../modes/ZenModeFragmentBase.java | 2 +- .../modes/ZenModeScheduleChooserDialog.java | 16 +++-- ...ModeTriggerUpdatePreferenceController.java | 9 ++- ...TriggerUpdatePreferenceControllerTest.java | 35 +++++---- 11 files changed, 111 insertions(+), 68 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 311b56f81a3..28e1f05d584 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7955,24 +7955,28 @@ Priority Modes + + Minimize distractions and take control of your attention with modes for sleep, work, driving, and everything in between. + - Add a mode + Create your own mode Only get notified by important people and apps - Select activation type + Set a schedule + + + Schedule based on - Time + Day and time - Ex. \"9:30 – 5:00 PM\" + \"9 AM - 5 PM weekdays\" - Calendar - - Ex. \"Personal calendar\" + Calendar events ON @@ -7992,6 +7996,15 @@ Custom + + Turn on now + + + Turn off + + + Mode not found + Limit interruptions @@ -8029,19 +8042,17 @@ Schedule - Turn on automatically + When to turn on automatically - - Add a calendar - - - Use your calendar - - - Schedule + + Event schedule + + Turn on during events for + + Where invite reply is - Set a schedule + Time schedule Schedule @@ -8049,9 +8060,6 @@ %1$d hr, %2$d min - - Turn on automatically - Schedule @@ -8080,9 +8088,9 @@ Allow visual signals - Stay focused + Notification filters - Additional actions + More settings @@ -8133,7 +8141,7 @@ } - Filter interruptions + Limit what can notify you No interruptions are filtered @@ -9430,7 +9438,7 @@ Edit mode - Add mode + Create a mode Custom mode @@ -9441,26 +9449,26 @@ Calendar events - Sleep schedule + Bedtime routine While driving - Linked to app + App settings Info and settings in %1$s Managed by %1$s - - Disable Mode + + Disable %1$s? - If you disable this feature, the mode will no longer work as intended and its settings will be hidden. + This mode will never turn on when disabled Disable - - Enable Mode + + Enable %1$s? - If you enable this feature, the mode will activate automatically according to its schedule. + This mode may turn on automatically based on its settings Enable diff --git a/res/xml/modes_calls_settings.xml b/res/xml/modes_calls_settings.xml index f2ba7f13867..b564020cf71 100644 --- a/res/xml/modes_calls_settings.xml +++ b/res/xml/modes_calls_settings.xml @@ -24,14 +24,21 @@ + android:title="@string/zen_mode_calls_header"> + + + android:title="@string/zen_mode_repeat_callers_title" /> + diff --git a/res/xml/modes_list_settings.xml b/res/xml/modes_list_settings.xml index 8207af0f7e8..5c672187205 100644 --- a/res/xml/modes_list_settings.xml +++ b/res/xml/modes_list_settings.xml @@ -20,11 +20,12 @@ xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/zen_modes_list_title"> - + - + + + diff --git a/res/xml/modes_people_settings.xml b/res/xml/modes_people_settings.xml index d58b2d7e355..af292ad46ff 100644 --- a/res/xml/modes_people_settings.xml +++ b/res/xml/modes_people_settings.xml @@ -17,6 +17,7 @@ @@ -34,4 +35,10 @@ android:title="@string/zen_mode_calls_title" android:icon="@drawable/ic_zen_mode_people_calls" /> + + diff --git a/res/xml/modes_set_calendar.xml b/res/xml/modes_set_calendar.xml index 02eb26e33af..be094f21f39 100644 --- a/res/xml/modes_set_calendar.xml +++ b/res/xml/modes_set_calendar.xml @@ -23,20 +23,18 @@ android:title="@string/zen_mode_set_calendar_title"> + android:key="zen_mode_event_category"> - diff --git a/src/com/android/settings/notification/modes/ZenModeButtonPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeButtonPreferenceController.java index 998b596e321..bb9d23cd558 100644 --- a/src/com/android/settings/notification/modes/ZenModeButtonPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeButtonPreferenceController.java @@ -84,9 +84,9 @@ class ZenModeButtonPreferenceController extends AbstractZenModePreferenceControl } }); if (zenMode.isActive()) { - mZenButton.setText(R.string.zen_mode_button_turn_off); + mZenButton.setText(R.string.zen_mode_action_deactivate); } else { - mZenButton.setText(R.string.zen_mode_button_turn_on); + mZenButton.setText(R.string.zen_mode_action_activate); } } } diff --git a/src/com/android/settings/notification/modes/ZenModeFragmentBase.java b/src/com/android/settings/notification/modes/ZenModeFragmentBase.java index c63b3a8c10b..ed3a71c78c7 100644 --- a/src/com/android/settings/notification/modes/ZenModeFragmentBase.java +++ b/src/com/android/settings/notification/modes/ZenModeFragmentBase.java @@ -131,7 +131,7 @@ abstract class ZenModeFragmentBase extends ZenModesFragmentBase { } private void toastAndFinish() { - Toast.makeText(mContext, R.string.zen_mode_rule_not_found_text, Toast.LENGTH_SHORT) + Toast.makeText(mContext, R.string.zen_mode_not_found_text, Toast.LENGTH_SHORT) .show(); this.finish(); } diff --git a/src/com/android/settings/notification/modes/ZenModeScheduleChooserDialog.java b/src/com/android/settings/notification/modes/ZenModeScheduleChooserDialog.java index 14264b7a844..6202648fcf9 100644 --- a/src/com/android/settings/notification/modes/ZenModeScheduleChooserDialog.java +++ b/src/com/android/settings/notification/modes/ZenModeScheduleChooserDialog.java @@ -50,15 +50,16 @@ public class ZenModeScheduleChooserDialog extends InstrumentedDialogFragment { static final int OPTION_TIME = 0; static final int OPTION_CALENDAR = 1; - private record ScheduleOption(@StringRes int nameResId, @StringRes int exampleResId, - @DrawableRes int iconResId) {} + private record ScheduleOption(@StringRes int nameResId, + @Nullable @StringRes Integer exampleResId, + @DrawableRes int iconResId) { } private static final ImmutableList SCHEDULE_OPTIONS = ImmutableList.of( new ScheduleOption(R.string.zen_mode_select_schedule_time, R.string.zen_mode_select_schedule_time_example, com.android.internal.R.drawable.ic_zen_mode_type_schedule_time), new ScheduleOption(R.string.zen_mode_select_schedule_calendar, - R.string.zen_mode_select_schedule_calendar_example, + null, com.android.internal.R.drawable.ic_zen_mode_type_schedule_calendar)); private OnScheduleOptionListener mOptionListener; @@ -85,7 +86,7 @@ public class ZenModeScheduleChooserDialog extends InstrumentedDialogFragment { public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { checkState(getContext() != null); return new AlertDialog.Builder(getContext()) - .setTitle(R.string.zen_mode_choose_rule_type) + .setTitle(R.string.zen_mode_select_schedule_title) .setAdapter(new OptionsAdapter(getContext()), (dialog, which) -> onScheduleTypeSelected(which)) .setNegativeButton(R.string.cancel, null) @@ -115,7 +116,12 @@ public class ZenModeScheduleChooserDialog extends InstrumentedDialogFragment { ScheduleOption option = checkNotNull(getItem(position)); imageView.setImageResource(option.iconResId()); title.setText(option.nameResId()); - subtitle.setText(option.exampleResId()); + if (option.exampleResId() != null) { + subtitle.setVisibility(View.VISIBLE); + subtitle.setText(option.exampleResId()); + } else { + subtitle.setVisibility(View.GONE); + } return convertView; } diff --git a/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java b/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java index 3ee6d9443e4..885c4db1fa1 100644 --- a/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java @@ -53,6 +53,8 @@ class ZenModeTriggerUpdatePreferenceController extends AbstractZenModePreference private final ConfigurationActivityHelper mConfigurationActivityHelper; private final ZenServiceListing mServiceListing; + private String mModeName; + ZenModeTriggerUpdatePreferenceController(Context context, String key, ZenModesBackend backend) { this(context, key, backend, context.getPackageManager(), @@ -82,6 +84,7 @@ class ZenModeTriggerUpdatePreferenceController extends AbstractZenModePreference return; } + mModeName = zenMode.getName(); PrimarySwitchPreference triggerPref = (PrimarySwitchPreference) preference; triggerPref.setChecked(zenMode.getRule().isEnabled()); triggerPref.setOnPreferenceChangeListener(mSwitchChangeListener); @@ -189,15 +192,15 @@ class ZenModeTriggerUpdatePreferenceController extends AbstractZenModePreference }; private void confirmChangeEnabled(Preference preference, boolean enabled) { - @StringRes int title = enabled ? R.string.zen_mode_confirm_enable_title - : R.string.zen_mode_confirm_disable_title; + @StringRes int titleFormat = enabled ? R.string.zen_mode_confirm_enable_mode_title + : R.string.zen_mode_confirm_disable_mode_title; @StringRes int message = enabled ? R.string.zen_mode_confirm_enable_message : R.string.zen_mode_confirm_disable_message; @StringRes int confirmButton = enabled ? R.string.zen_mode_action_enable : R.string.zen_mode_action_disable; new AlertDialog.Builder(mContext) - .setTitle(title) + .setTitle(mContext.getString(titleFormat, mModeName)) .setMessage(message) .setPositiveButton(confirmButton, (dialog, which) -> setModeEnabled(enabled)) diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java index a3fe57e02f5..80d314c3dc0 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java @@ -47,6 +47,7 @@ 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.widget.TextView; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; @@ -174,18 +175,21 @@ public class ZenModeTriggerUpdatePreferenceControllerTest { @Test public void onPreferenceChange_toggleOn_enablesModeAfterConfirmation() { // Start with a disabled mode - ZenMode zenMode = new TestModeBuilder().setEnabled(false).build(); + ZenMode zenMode = new TestModeBuilder().setName("The mode").setEnabled(false).build(); mController.updateZenMode(mPreference, zenMode); // Flip the switch mPreference.callChangeListener(true); verify(mBackend, never()).updateMode(any()); + AlertDialog confirmDialog = ShadowAlertDialog.getLatestAlertDialog(); + assertThat(confirmDialog).isNotNull(); + assertThat(confirmDialog.isShowing()).isTrue(); + assertThat(((TextView) confirmDialog.findViewById(com.android.internal.R.id.alertTitle)) + .getText()).isEqualTo("Enable The mode?"); + // Oh wait, I forgot to confirm! Let's do that - assertThat(ShadowAlertDialog.getLatestAlertDialog()).isNotNull(); - assertThat(ShadowAlertDialog.getLatestAlertDialog().isShowing()).isTrue(); - ShadowAlertDialog.getLatestAlertDialog() - .getButton(AlertDialog.BUTTON_POSITIVE).performClick(); + confirmDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick(); shadowOf(Looper.getMainLooper()).idle(); // Verify the backend got asked to update the mode to be enabled @@ -198,18 +202,21 @@ public class ZenModeTriggerUpdatePreferenceControllerTest { @Test public void onPreferenceChange_toggleOff_disablesModeAfterConfirmation() { // Start with an enabled mode - ZenMode zenMode = new TestModeBuilder().setEnabled(true).build(); + ZenMode zenMode = new TestModeBuilder().setName("The mode").setEnabled(true).build(); mController.updateZenMode(mPreference, zenMode); // Flip the switch mPreference.callChangeListener(false); verify(mBackend, never()).updateMode(any()); + AlertDialog confirmDialog = ShadowAlertDialog.getLatestAlertDialog(); + assertThat(confirmDialog).isNotNull(); + assertThat(confirmDialog.isShowing()).isTrue(); + assertThat(((TextView) confirmDialog.findViewById(com.android.internal.R.id.alertTitle)) + .getText()).isEqualTo("Disable The mode?"); + // Oh wait, I forgot to confirm! Let's do that - assertThat(ShadowAlertDialog.getLatestAlertDialog()).isNotNull(); - assertThat(ShadowAlertDialog.getLatestAlertDialog().isShowing()).isTrue(); - ShadowAlertDialog.getLatestAlertDialog() - .getButton(AlertDialog.BUTTON_POSITIVE).performClick(); + confirmDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick(); shadowOf(Looper.getMainLooper()).idle(); // Verify the backend got asked to update the mode to be disabled @@ -314,7 +321,7 @@ public class ZenModeTriggerUpdatePreferenceControllerTest { mController.updateState(mPreference, mode); assertThat(mPreference.isVisible()).isTrue(); - assertThat(mPreference.getTitle()).isEqualTo("Linked to app"); + assertThat(mPreference.getTitle()).isEqualTo("App settings"); assertThat(mPreference.getSummary()).isEqualTo("When The Music's Over"); assertThat(mPreference.getIntent()).isEqualTo(configurationIntent); } @@ -331,7 +338,7 @@ public class ZenModeTriggerUpdatePreferenceControllerTest { mController.updateState(mPreference, mode); assertThat(mPreference.isVisible()).isTrue(); - assertThat(mPreference.getTitle()).isEqualTo("Linked to app"); + assertThat(mPreference.getTitle()).isEqualTo("App settings"); assertThat(mPreference.getSummary()).isEqualTo("When the saints go marching in"); assertThat(mPreference.getIntent()).isNull(); } @@ -349,7 +356,7 @@ public class ZenModeTriggerUpdatePreferenceControllerTest { mController.updateState(mPreference, mode); assertThat(mPreference.isVisible()).isTrue(); - assertThat(mPreference.getTitle()).isEqualTo("Linked to app"); + assertThat(mPreference.getTitle()).isEqualTo("App settings"); assertThat(mPreference.getSummary()).isEqualTo("Info and settings in The App Name"); } @@ -365,7 +372,7 @@ public class ZenModeTriggerUpdatePreferenceControllerTest { mController.updateState(mPreference, mode); assertThat(mPreference.isVisible()).isTrue(); - assertThat(mPreference.getTitle()).isEqualTo("Linked to app"); + assertThat(mPreference.getTitle()).isEqualTo("App settings"); assertThat(mPreference.getSummary()).isEqualTo("Managed by The App Name"); } }