Replace zen setting plurals with MessageFormat

For better translations. See go/android-i18n-plurals.

Test: manual
Test: make RunSettingsRoboTests7
Fixes: 156651436
Change-Id: Ic82140b81bf49f071291d2824fa45d310de238ae
This commit is contained in:
Beverly
2020-06-29 13:43:24 -04:00
parent 9aa80727c4
commit c549280a33
9 changed files with 174 additions and 162 deletions

View File

@@ -7820,14 +7820,14 @@
<!-- Setting summary for controlling how caption text display in real time [CHAR LIMIT=NONE]--> <!-- Setting summary for controlling how caption text display in real time [CHAR LIMIT=NONE]-->
<string name="live_caption_summary">Automatically caption media</string> <string name="live_caption_summary">Automatically caption media</string>
<!-- Sound: Summary for the Do not Disturb option when there are no automatic rules enabled. [CHAR LIMIT=NONE]--> <!-- Sound: Summary for the Do not Disturb option that describes how many automatic rules (schedules) are enabled [CHAR LIMIT=NONE]-->
<string name="zen_mode_settings_summary_off">None</string> <string name="zen_mode_settings_schedules_summary">
{count, plural,
<!-- Sound: Summary for the Do not Disturb option when at least one automatic rule is enabled. [CHAR LIMIT=NONE]--> =0 {None}
<plurals name="zen_mode_settings_summary_on"> =1 {1 schedule set}
<item quantity="one">1 schedule set</item> other {# schedules set}
<item quantity="other"><xliff:g id="on_count" example="10">%d</xliff:g> schedules set</item> }
</plurals> </string>
<!-- Sound: Title for the Do not Disturb option and associated settings page. [CHAR LIMIT=50]--> <!-- Sound: Title for the Do not Disturb option and associated settings page. [CHAR LIMIT=50]-->
<string name="zen_mode_settings_title">Do Not Disturb</string> <string name="zen_mode_settings_title">Do Not Disturb</string>
@@ -8000,12 +8000,6 @@
<!-- Sound settings screen, summary format of do not disturb when on with extra info. [CHAR LIMIT=NONE] --> <!-- Sound settings screen, summary format of do not disturb when on with extra info. [CHAR LIMIT=NONE] -->
<string name="zen_mode_sound_summary_on_with_info">On / <xliff:g name="dnd_summary" example="No sound except alarms and media">%1$s</xliff:g></string> <string name="zen_mode_sound_summary_on_with_info">On / <xliff:g name="dnd_summary" example="No sound except alarms and media">%1$s</xliff:g></string>
<!-- Sound settings screen, summary format of do not disturb when off with extra information. [CHAR LIMIT=NONE] -->
<string name="zen_mode_sound_summary_off_with_info">Off / <xliff:g name="dnd_summary" example="1 schedule can turn on automatically">%1$s</xliff:g></string>
<!-- Sound settings screen, summary format of do not disturb when off with no extra information. [CHAR LIMIT=NONE] -->
<string name="zen_mode_sound_summary_off">Off</string>
<!-- Sound settings screen, summary format of do not disturb when on with no extra information. [CHAR LIMIT=NONE] --> <!-- Sound settings screen, summary format of do not disturb when on with no extra information. [CHAR LIMIT=NONE] -->
<string name="zen_mode_sound_summary_on">On</string> <string name="zen_mode_sound_summary_on">On</string>
@@ -8016,19 +8010,29 @@
<string name="zen_mode_duration_summary_forever">Until you turn off</string> <string name="zen_mode_duration_summary_forever">Until you turn off</string>
<!-- Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when dnd is manually toggled on [CHAR LIMIT=NONE] --> <!-- Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when dnd is manually toggled on [CHAR LIMIT=NONE] -->
<plurals name="zen_mode_duration_summary_time_hours"> <string name="zen_mode_duration_summary_time_hours">
<item quantity="one">1 hour</item> {count, plural,
<item quantity="other"><xliff:g id="num_hours" example="3">%d</xliff:g> hours</item> =1 {1 hour}
</plurals> other {# hours}
}
</string>
<!-- Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when toggled on --> <!-- Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when toggled on -->
<string name="zen_mode_duration_summary_time_minutes"><xliff:g id="num_minutes" example="5">%d</xliff:g> minutes</string> <string name="zen_mode_duration_summary_time_minutes">
{count, plural,
=1 {1 minute}
other {# minutes}
}
</string>
<!-- Summary for the Sound Do not Disturb option when at least one automatic rules is enabled. [CHAR LIMIT=NONE]--> <!-- Summary for the Sound Do not Disturb option when DND isn't currently on. [CHAR LIMIT=NONE]-->
<plurals name="zen_mode_sound_summary_summary_off_info"> <string name="zen_mode_sound_summary_off">
<item quantity="one">1 schedule can turn on automatically</item> {count, plural,
<item quantity="other"><xliff:g id="on_count" example="3">%d</xliff:g> schedules can turn on automatically</item> =0 {Off}
</plurals> =1 {Off / 1 schedule can turn on automatically}
other {Off / # schedules can turn on automatically}
}
</string>
<!-- Do not disturb settings, main screen, category header [CHAR LIMIT=120]--> <!-- Do not disturb settings, main screen, category header [CHAR LIMIT=120]-->
<string name="zen_category_behavior">What can interrupt Do Not Disturb</string> <string name="zen_category_behavior">What can interrupt Do Not Disturb</string>
@@ -9027,12 +9031,14 @@
<string name="zen_mode_from_all_conversations">All conversations</string> <string name="zen_mode_from_all_conversations">All conversations</string>
<string name="zen_mode_from_important_conversations">Priority conversations</string> <string name="zen_mode_from_important_conversations">Priority conversations</string>
<string name="zen_mode_from_no_conversations">None</string> <string name="zen_mode_from_no_conversations">None</string>
<plurals name="zen_mode_conversations_count"> <!-- [CHAR LIMIT=NONE] Zen mode settings: Number of conversations allowed to bypass DND -->
<item quantity="one">1 conversation</item> <string name="zen_mode_conversations_count">
<item quantity="other"><xliff:g id="conversations" example="3">%d</xliff:g> conversations</item> {count, plural,
</plurals> =0 {None}
<!-- [CHAR LIMIT=40] Zen mode settings: No conversations are allowed to bypass DND --> =1 {1 conversation}
<string name="zen_mode_conversations_count_none">None</string> other {# conversations}
}
</string>
<!-- [CHAR LIMIT=120] Zen mode settings: Header for calls and messages section of conversations <!-- [CHAR LIMIT=120] Zen mode settings: Header for calls and messages section of conversations
setting page --> setting page -->
<string name="zen_mode_people_calls_messages_section_title">Who can interrupt</string> <string name="zen_mode_people_calls_messages_section_title">Who can interrupt</string>
@@ -9053,12 +9059,15 @@
<!-- [CHAR LIMIT=50] Zen mode settings: Starred contacts preference title --> <!-- [CHAR LIMIT=50] Zen mode settings: Starred contacts preference title -->
<string name="zen_mode_starred_contacts_title">Starred contacts</string> <string name="zen_mode_starred_contacts_title">Starred contacts</string>
<!-- Zen mode settings: Starred contacts summary [CHAR LIMIT=NONE] --> <!-- Zen mode settings: Starred contacts summary [CHAR LIMIT=NONE] -->
<plurals name="zen_mode_starred_contacts_summary_additional_contacts"> <string name="zen_mode_starred_contacts_summary_contacts">
<item quantity="one">1 other</item> {count, plural, offset:2
<item quantity="other"><xliff:g id="num_people" example="3">%d</xliff:g> others</item> =0 {None}
</plurals> =1 {{contact_1}}
<!-- [CHAR LIMIT=40] Zen mode settings: Starred contacts summary when there are no starred contacts --> =2 {{contact_1} and {contact_2}}
<string name="zen_mode_starred_contacts_summary_none">None</string> =3 {{contact_1}, {contact_2}, and {contact_3}}
other {{contact_1}, {contact_2}, and # others}
}
</string>
<!-- [CHAR LIMIT=40] Zen mode settings: Messages option --> <!-- [CHAR LIMIT=40] Zen mode settings: Messages option -->
<string name="zen_mode_messages">Messages</string> <string name="zen_mode_messages">Messages</string>
@@ -9077,15 +9086,14 @@
<string name="zen_mode_all_messages_summary">All messages can reach you</string> <string name="zen_mode_all_messages_summary">All messages can reach you</string>
<!-- Zen mode settings: All calls can bypass DND summary [CHAR LIMIT=NONE --> <!-- Zen mode settings: All calls can bypass DND summary [CHAR LIMIT=NONE -->
<string name="zen_mode_all_calls_summary">All calls can reach you</string> <string name="zen_mode_all_calls_summary">All calls can reach you</string>
<!-- Zen mode settings: There are no contacts on the device [CHAR LIMIT=NONE] -->
<string name="zen_mode_contacts_count_none">None</string>
<!-- Zen mode settings: Senders in contacts can bypass DND summary summary [CHAR LIMIT=NONE] --> <!-- Zen mode settings: Senders in contacts can bypass DND summary summary [CHAR LIMIT=NONE] -->
<plurals name="zen_mode_contacts_count"> <string name="zen_mode_contacts_count">
<item quantity="one">1 contact</item> {count, plural,
<item quantity="other"><xliff:g id="num_contacts" example="120">%d</xliff:g> contacts</item> =0 {None}
</plurals> =1 {1 contact}
other {# contacts}
}
</string>
<!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From anyone --> <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From anyone -->
<string name="zen_mode_from_anyone">Anyone</string> <string name="zen_mode_from_anyone">Anyone</string>
<!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From contacts only --> <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From contacts only -->
@@ -9170,14 +9178,16 @@
<string name="zen_mode_bypassing_apps_summary_some">Some notifications</string> <string name="zen_mode_bypassing_apps_summary_some">Some notifications</string>
<!-- [CHAR LIMIT=NONE] Zen mode settings: Footer for DND bypassing apps settings --> <!-- [CHAR LIMIT=NONE] Zen mode settings: Footer for DND bypassing apps settings -->
<string name="zen_mode_bypassing_apps_footer">Selected people can still reach you, even if you don\u2019t allow apps to interrupt</string> <string name="zen_mode_bypassing_apps_footer">Selected people can still reach you, even if you don\u2019t allow apps to interrupt</string>
<!-- [CHAR LIMIT=120] Zen mode settings: Allow apps to bypass DND --> <!-- [CHAR LIMIT=NONE] Zen mode settings: Lists apps that can bypass DND. For example, "Nest, Messages, and 2 more can interrupt". -->
<plurals name="zen_mode_bypassing_apps_subtext"> <string name="zen_mode_bypassing_apps_subtext">
<item quantity="one"><xliff:g id="app_name" example="Nest">%s</xliff:g> can interrupt</item> {count, plural, offset:2
<item quantity="other"><xliff:g id="app_names" example="Nest and Google Play Store">%s</xliff:g> can interrupt</item> =0 {No apps can interrupt}
</plurals> =1 {{app_1} can interrupt}
<!-- [CHAR LIMIT=30] Zen mode settings: List item in a summary indicating additional apps are =2 {{app_1} and {app_2} can interrupt}
allowed to bypass Do Not Disturb. For example, "Nest, Messages, and 2 more can interrupt". --> =3 {{app_1}, {app_2}, and {app_3} can interrupt}
<string name="zen_mode_apps_bypassing_list_count"><xliff:g id="number" example="2">%d</xliff:g> more</string> other {{app_1}, {app_2}, and # more can interrupt}
}
</string>
<!-- [CHAR LIMIT=100] Zen mode settings: Allow apps to bypass DND title--> <!-- [CHAR LIMIT=100] Zen mode settings: Allow apps to bypass DND title-->
<string name="zen_mode_bypassing_apps_title">Apps</string> <string name="zen_mode_bypassing_apps_title">Apps</string>
<!-- [CHAR LIMIT=100] Zen mode settings: App that can bypass DND's secondary text describing which notification channels from the app can bypass DND--> <!-- [CHAR LIMIT=100] Zen mode settings: App that can bypass DND's secondary text describing which notification channels from the app can bypass DND-->
@@ -9190,18 +9200,18 @@
toggle title --> toggle title -->
<string name="zen_mode_bypassing_app_channels_toggle_all">Allow all notifications</string> <string name="zen_mode_bypassing_app_channels_toggle_all">Allow all notifications</string>
<!-- [CHAR LIMIT=120] Zen mode settings: Summary for sound interruption settings --> <!-- [CHAR LIMIT=NONE] Zen mode settings: Summary for sound interruption settings -->
<plurals name="zen_mode_other_sounds_summary"> <string name="zen_mode_other_sounds_summary">
<item quantity="one"><xliff:g id="sound_category">%s</xliff:g> can interrupt</item> {count, plural, offset:2
<item quantity="other"><xliff:g id="sound_categories" example="Alarms, media sounds, and 2 more">%s</xliff:g> can interrupt</item> =0 {Nothing can interrupt}
</plurals> =1 {{sound_category_1} can interrupt}
<!-- [CHAR LIMIT=120] Zen mode settings: No other sounds are allowed to bypass DND --> =2 {{sound_category_1} and {sound_category_2} can interrupt}
<string name="zen_mode_other_sounds_none">Nothing can interrupt</string> =3 {{sound_category_1}, {sound_category_2}, and {sound_category_3} can interrupt}
<!-- [CHAR LIMIT=30] Zen mode settings: List item in a summary indicating additional sounds other {{sound_category_1}, {sound_category_2}, and # more can interrupt}
are allowed to bypass Do Not Disturb. For example, "Alarms, media sounds, and 2 more can }
interrupt". --> </string>
<string name="zen_mode_other_sounds_list_count"><xliff:g id="number" example="2">%d</xliff:g> more</string> <!-- [CHAR LIMIT=120] Zen mode settings: No sounds are allowed to bypass DND -->
<string name="zen_mode_sounds_none">Nothing can interrupt</string>
<!-- [CHAR LIMIT=120] Zen mode settings: Summary for people category --> <!-- [CHAR LIMIT=120] Zen mode settings: Summary for people category -->
<string name="zen_mode_people_none">No one can interrupt</string> <string name="zen_mode_people_none">No one can interrupt</string>
<!-- [CHAR LIMIT=120] Zen mode settings: Summary for people category --> <!-- [CHAR LIMIT=120] Zen mode settings: Summary for people category -->

View File

@@ -26,7 +26,7 @@ import android.app.AutomaticZenRule;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.icu.text.ListFormatter; import android.icu.text.MessageFormat;
import android.net.Uri; import android.net.Uri;
import android.provider.ContactsContract; import android.provider.ContactsContract;
import android.provider.Settings; import android.provider.Settings;
@@ -41,7 +41,9 @@ import com.android.settings.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public class ZenModeBackend { public class ZenModeBackend {
@@ -468,37 +470,30 @@ public class ZenModeBackend {
String getStarredContactsSummary(Context context) { String getStarredContactsSummary(Context context) {
List<String> starredContacts = getStarredContacts(); List<String> starredContacts = getStarredContacts();
int numStarredContacts = starredContacts.size(); int numStarredContacts = starredContacts.size();
MessageFormat msgFormat = new MessageFormat(
List<String> displayContacts = new ArrayList<>(); mContext.getString(R.string.zen_mode_starred_contacts_summary_contacts),
Locale.getDefault());
if (numStarredContacts == 0) { Map<String, Object> args = new HashMap<>();
displayContacts.add(context.getString(R.string.zen_mode_starred_contacts_summary_none)); args.put("count", numStarredContacts);
} else { if (numStarredContacts >= 1) {
for (int i = 0; i < 2 && i < numStarredContacts; i++) { args.put("contact_1", starredContacts.get(0));
displayContacts.add(starredContacts.get(i)); if (numStarredContacts >= 2) {
} args.put("contact_2", starredContacts.get(1));
if (numStarredContacts == 3) { if (numStarredContacts == 3) {
displayContacts.add(starredContacts.get(2)); args.put("contact_3", starredContacts.get(2));
} else if (numStarredContacts > 2) {
displayContacts.add(context.getResources().getQuantityString(
R.plurals.zen_mode_starred_contacts_summary_additional_contacts,
numStarredContacts - 2, numStarredContacts - 2));
} }
} }
}
// values in displayContacts must not be null return msgFormat.format(args);
return ListFormatter.getInstance().format(displayContacts);
} }
String getContactsNumberSummary(Context context) { String getContactsNumberSummary(Context context) {
final int numContacts = queryAllContactsData().getCount(); MessageFormat msgFormat = new MessageFormat(
if (numContacts == 0) { mContext.getString(R.string.zen_mode_contacts_count),
return context.getResources().getString( Locale.getDefault());
R.string.zen_mode_contacts_count_none); Map<String, Object> args = new HashMap<>();
} args.put("count", queryAllContactsData().getCount());
return context.getResources().getQuantityString(R.plurals.zen_mode_contacts_count, return msgFormat.format(args);
numContacts, numContacts);
} }
private Cursor queryStarredContactsData() { private Cursor queryStarredContactsData() {

View File

@@ -3,7 +3,7 @@ package com.android.settings.notification.zen;
import android.app.Application; import android.app.Application;
import android.app.NotificationChannel; import android.app.NotificationChannel;
import android.content.Context; import android.content.Context;
import android.icu.text.ListFormatter; import android.icu.text.MessageFormat;
import android.provider.Settings; import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.ArraySet; import android.util.ArraySet;
@@ -21,7 +21,10 @@ import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
@@ -119,29 +122,23 @@ public class ZenModeBypassingAppsPreferenceController extends AbstractZenModePre
} }
final int numAppsBypassingDnd = appsBypassingDnd.size(); final int numAppsBypassingDnd = appsBypassingDnd.size();
if (numAppsBypassingDnd == 0) { String[] appsBypassingDndArr = appsBypassingDnd.toArray(new String[numAppsBypassingDnd]);
mSummary = mContext.getResources().getString( MessageFormat msgFormat = new MessageFormat(
R.string.zen_mode_bypassing_apps_subtext_none); mContext.getString(R.string.zen_mode_bypassing_apps_subtext),
refreshSummary(mPreference); Locale.getDefault());
return; Map<String, Object> args = new HashMap<>();
args.put("count", numAppsBypassingDnd);
if (numAppsBypassingDnd >= 1) {
args.put("app_1", appsBypassingDndArr[0]);
if (numAppsBypassingDnd >= 2) {
args.put("app_2", appsBypassingDndArr[1]);
if (numAppsBypassingDnd == 3) {
args.put("app_3", appsBypassingDndArr[2]);
}
}
} }
List<String> displayAppsBypassing = new ArrayList<>(); mSummary = msgFormat.format(args);
if (numAppsBypassingDnd <= 2) {
displayAppsBypassing.addAll(appsBypassingDnd);
} else {
String[] appsBypassingDndArr =
appsBypassingDnd.toArray(new String[numAppsBypassingDnd]);
displayAppsBypassing.add(appsBypassingDndArr[0]);
displayAppsBypassing.add(appsBypassingDndArr[1]);
displayAppsBypassing.add(mContext.getResources().getString(
R.string.zen_mode_apps_bypassing_list_count,
numAppsBypassingDnd - 2));
}
mSummary = mContext.getResources().getQuantityString(
R.plurals.zen_mode_bypassing_apps_subtext,
numAppsBypassingDnd,
ListFormatter.getInstance().format(displayAppsBypassing));
refreshSummary(mPreference); refreshSummary(mPreference);
} }

View File

@@ -17,11 +17,16 @@
package com.android.settings.notification.zen; package com.android.settings.notification.zen;
import android.content.Context; import android.content.Context;
import android.icu.text.MessageFormat;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
public class ZenModeDurationPreferenceController extends AbstractZenModePreferenceController public class ZenModeDurationPreferenceController extends AbstractZenModePreferenceController
implements PreferenceControllerMixin { implements PreferenceControllerMixin {
@@ -51,12 +56,19 @@ public class ZenModeDurationPreferenceController extends AbstractZenModePreferen
summary = mContext.getString(R.string.zen_mode_duration_summary_forever); summary = mContext.getString(R.string.zen_mode_duration_summary_forever);
} else { } else {
if (zenDuration >= 60) { if (zenDuration >= 60) {
int hours = zenDuration / 60; MessageFormat msgFormat = new MessageFormat(
summary = mContext.getResources().getQuantityString( mContext.getString(R.string.zen_mode_duration_summary_time_hours),
R.plurals.zen_mode_duration_summary_time_hours, hours, hours); Locale.getDefault());
Map<String, Object> msgArgs = new HashMap<>();
msgArgs.put("count", zenDuration / 60);
summary = msgFormat.format(msgArgs);
} else { } else {
summary = mContext.getResources().getString( MessageFormat msgFormat = new MessageFormat(
R.string.zen_mode_duration_summary_time_minutes, zenDuration); mContext.getString(R.string.zen_mode_duration_summary_time_minutes),
Locale.getDefault());
Map<String, Object> msgArgs = new HashMap<>();
msgArgs.put("count", zenDuration);
summary = msgFormat.format(msgArgs);
} }
} }

View File

@@ -23,6 +23,7 @@ import android.app.NotificationManager;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.pm.ParceledListSlice; import android.content.pm.ParceledListSlice;
import android.icu.text.MessageFormat;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.service.notification.ConversationChannelWrapper; import android.service.notification.ConversationChannelWrapper;
import android.view.View; import android.view.View;
@@ -41,7 +42,10 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.RadioButtonPreference; import com.android.settingslib.widget.RadioButtonPreference;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map;
/** /**
* Options to choose the priority conversations that are allowed to bypass DND. * Options to choose the priority conversations that are allowed to bypass DND.
@@ -130,12 +134,13 @@ public class ZenModePriorityConversationsPreferenceController
if (numConversations == UNSET) { if (numConversations == UNSET) {
return null; return null;
} else if (numConversations == 0) {
return mContext.getResources().getString(
R.string.zen_mode_conversations_count_none);
} else { } else {
return mContext.getResources().getQuantityString( MessageFormat msgFormat = new MessageFormat(
R.plurals.zen_mode_conversations_count, numConversations, numConversations); mContext.getString(R.string.zen_mode_conversations_count),
Locale.getDefault());
Map<String, Object> args = new HashMap<>();
args.put("count", numConversations);
return msgFormat.format(args);
} }
} }

View File

@@ -32,7 +32,7 @@ import android.app.NotificationManager;
import android.app.NotificationManager.Policy; import android.app.NotificationManager.Policy;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.icu.text.ListFormatter; import android.icu.text.MessageFormat;
import android.provider.Settings; import android.provider.Settings;
import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig;
@@ -47,7 +47,9 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.function.Predicate; import java.util.function.Predicate;
@@ -130,24 +132,21 @@ public class ZenModeSettings extends ZenModeSettingsBase {
|| PRIORITY_CATEGORY_EVENTS == category, || PRIORITY_CATEGORY_EVENTS == category,
true); true);
int numCategories = enabledCategories.size(); int numCategories = enabledCategories.size();
if (numCategories == 0) { MessageFormat msgFormat = new MessageFormat(
return mContext.getResources().getString(R.string.zen_mode_other_sounds_none); mContext.getString(R.string.zen_mode_other_sounds_summary),
Locale.getDefault());
Map<String, Object> args = new HashMap<>();
args.put("count", numCategories);
if (numCategories >= 1) {
args.put("sound_category_1", enabledCategories.get(0));
if (numCategories >= 2) {
args.put("sound_category_2", enabledCategories.get(1));
if (numCategories == 3) {
args.put("sound_category_3", enabledCategories.get(2));
} }
List<String> displayCategories = new ArrayList<>();
if (numCategories <= 2) {
displayCategories = enabledCategories;
} else {
displayCategories.add(enabledCategories.get(0));
displayCategories.add(enabledCategories.get(1));
displayCategories.add(mContext.getString(R.string.zen_mode_other_sounds_list_count,
numCategories - 2));
} }
}
return mContext.getResources().getQuantityString( return msgFormat.format(args);
R.plurals.zen_mode_other_sounds_summary,
numCategories /* quantity */,
ListFormatter.getInstance().format(displayCategories));
} }
String getCallsSettingSummary(Policy policy) { String getCallsSettingSummary(Policy policy) {
@@ -192,15 +191,12 @@ public class ZenModeSettings extends ZenModeSettingsBase {
description); description);
} }
} else { } else {
final int count = getEnabledAutomaticRulesCount(); MessageFormat msgFormat = new MessageFormat(
if (count > 0) { mContext.getString(R.string.zen_mode_sound_summary_off),
return mContext.getString(R.string.zen_mode_sound_summary_off_with_info, Locale.getDefault());
mContext.getResources().getQuantityString( Map<String, Object> msgArgs = new HashMap<>();
R.plurals.zen_mode_sound_summary_summary_off_info, msgArgs.put("count", getEnabledAutomaticRulesCount());
count, count)); return msgFormat.format(msgArgs);
}
return mContext.getString(R.string.zen_mode_sound_summary_off);
} }
} }
@@ -218,10 +214,12 @@ public class ZenModeSettings extends ZenModeSettingsBase {
} }
String getAutomaticRulesSummary() { String getAutomaticRulesSummary() {
final int count = getEnabledAutomaticRulesCount(); MessageFormat msgFormat = new MessageFormat(
return count == 0 ? mContext.getString(R.string.zen_mode_settings_summary_off) mContext.getString(R.string.zen_mode_settings_schedules_summary),
: mContext.getResources().getQuantityString( Locale.getDefault());
R.plurals.zen_mode_settings_summary_on, count, count); Map<String, Object> msgArgs = new HashMap<>();
msgArgs.put("count", getEnabledAutomaticRulesCount());
return msgFormat.format(msgArgs);
} }
@VisibleForTesting @VisibleForTesting

View File

@@ -58,7 +58,7 @@ public class ZenModeSoundVibrationPreferenceController extends
switch (getZenMode()) { switch (getZenMode()) {
case Settings.Global.ZEN_MODE_NO_INTERRUPTIONS: case Settings.Global.ZEN_MODE_NO_INTERRUPTIONS:
preference.setEnabled(false); preference.setEnabled(false);
preference.setSummary(mContext.getString(R.string.zen_mode_other_sounds_none)); preference.setSummary(mContext.getString(R.string.zen_mode_sounds_none));
break; break;
case Settings.Global.ZEN_MODE_ALARMS: case Settings.Global.ZEN_MODE_ALARMS:
preference.setEnabled(false); preference.setEnabled(false);

View File

@@ -90,7 +90,6 @@ public class ZenModeDurationPreferenceControllerTest {
Settings.Secure.putInt(mContentResolver, Settings.Secure.ZEN_DURATION, Settings.Secure.putInt(mContentResolver, Settings.Secure.ZEN_DURATION,
zenDuration); zenDuration);
assertEquals(mContext.getString(R.string.zen_mode_duration_summary_time_minutes, assertEquals("45 minutes", mController.getSummary());
zenDuration), mController.getSummary());
} }
} }

View File

@@ -33,10 +33,6 @@ import android.content.Context;
import androidx.preference.Preference; import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.notification.zen.ZenModePreferenceController;
import com.android.settings.notification.zen.ZenModeSettings;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -85,7 +81,7 @@ public class ZenModePreferenceControllerTest {
when(mPreference.isEnabled()).thenReturn(true); when(mPreference.isEnabled()).thenReturn(true);
mController.updateState(mPreference); mController.updateState(mPreference);
verify(mPreference).setSummary(mContext.getString(R.string.zen_mode_sound_summary_off)); verify(mPreference).setSummary("Off");
doReturn(1).when(mSummaryBuilder).getEnabledAutomaticRulesCount(); doReturn(1).when(mSummaryBuilder).getEnabledAutomaticRulesCount();
mController.updateState(mPreference); mController.updateState(mPreference);