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:
@@ -26,7 +26,7 @@ import android.app.AutomaticZenRule;
|
||||
import android.app.NotificationManager;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.icu.text.ListFormatter;
|
||||
import android.icu.text.MessageFormat;
|
||||
import android.net.Uri;
|
||||
import android.provider.ContactsContract;
|
||||
import android.provider.Settings;
|
||||
@@ -41,7 +41,9 @@ import com.android.settings.R;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
public class ZenModeBackend {
|
||||
@@ -468,37 +470,30 @@ public class ZenModeBackend {
|
||||
String getStarredContactsSummary(Context context) {
|
||||
List<String> starredContacts = getStarredContacts();
|
||||
int numStarredContacts = starredContacts.size();
|
||||
|
||||
List<String> displayContacts = new ArrayList<>();
|
||||
|
||||
if (numStarredContacts == 0) {
|
||||
displayContacts.add(context.getString(R.string.zen_mode_starred_contacts_summary_none));
|
||||
} else {
|
||||
for (int i = 0; i < 2 && i < numStarredContacts; i++) {
|
||||
displayContacts.add(starredContacts.get(i));
|
||||
}
|
||||
|
||||
if (numStarredContacts == 3) {
|
||||
displayContacts.add(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));
|
||||
MessageFormat msgFormat = new MessageFormat(
|
||||
mContext.getString(R.string.zen_mode_starred_contacts_summary_contacts),
|
||||
Locale.getDefault());
|
||||
Map<String, Object> args = new HashMap<>();
|
||||
args.put("count", numStarredContacts);
|
||||
if (numStarredContacts >= 1) {
|
||||
args.put("contact_1", starredContacts.get(0));
|
||||
if (numStarredContacts >= 2) {
|
||||
args.put("contact_2", starredContacts.get(1));
|
||||
if (numStarredContacts == 3) {
|
||||
args.put("contact_3", starredContacts.get(2));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// values in displayContacts must not be null
|
||||
return ListFormatter.getInstance().format(displayContacts);
|
||||
return msgFormat.format(args);
|
||||
}
|
||||
|
||||
String getContactsNumberSummary(Context context) {
|
||||
final int numContacts = queryAllContactsData().getCount();
|
||||
if (numContacts == 0) {
|
||||
return context.getResources().getString(
|
||||
R.string.zen_mode_contacts_count_none);
|
||||
}
|
||||
return context.getResources().getQuantityString(R.plurals.zen_mode_contacts_count,
|
||||
numContacts, numContacts);
|
||||
MessageFormat msgFormat = new MessageFormat(
|
||||
mContext.getString(R.string.zen_mode_contacts_count),
|
||||
Locale.getDefault());
|
||||
Map<String, Object> args = new HashMap<>();
|
||||
args.put("count", queryAllContactsData().getCount());
|
||||
return msgFormat.format(args);
|
||||
}
|
||||
|
||||
private Cursor queryStarredContactsData() {
|
||||
|
@@ -3,7 +3,7 @@ package com.android.settings.notification.zen;
|
||||
import android.app.Application;
|
||||
import android.app.NotificationChannel;
|
||||
import android.content.Context;
|
||||
import android.icu.text.ListFormatter;
|
||||
import android.icu.text.MessageFormat;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
import android.util.ArraySet;
|
||||
@@ -21,7 +21,10 @@ import com.android.settingslib.applications.ApplicationsState;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
@@ -119,29 +122,23 @@ public class ZenModeBypassingAppsPreferenceController extends AbstractZenModePre
|
||||
}
|
||||
|
||||
final int numAppsBypassingDnd = appsBypassingDnd.size();
|
||||
if (numAppsBypassingDnd == 0) {
|
||||
mSummary = mContext.getResources().getString(
|
||||
R.string.zen_mode_bypassing_apps_subtext_none);
|
||||
refreshSummary(mPreference);
|
||||
return;
|
||||
String[] appsBypassingDndArr = appsBypassingDnd.toArray(new String[numAppsBypassingDnd]);
|
||||
MessageFormat msgFormat = new MessageFormat(
|
||||
mContext.getString(R.string.zen_mode_bypassing_apps_subtext),
|
||||
Locale.getDefault());
|
||||
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<>();
|
||||
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));
|
||||
mSummary = msgFormat.format(args);
|
||||
refreshSummary(mPreference);
|
||||
}
|
||||
|
||||
|
@@ -17,11 +17,16 @@
|
||||
package com.android.settings.notification.zen;
|
||||
|
||||
import android.content.Context;
|
||||
import android.icu.text.MessageFormat;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
public class ZenModeDurationPreferenceController extends AbstractZenModePreferenceController
|
||||
implements PreferenceControllerMixin {
|
||||
|
||||
@@ -51,12 +56,19 @@ public class ZenModeDurationPreferenceController extends AbstractZenModePreferen
|
||||
summary = mContext.getString(R.string.zen_mode_duration_summary_forever);
|
||||
} else {
|
||||
if (zenDuration >= 60) {
|
||||
int hours = zenDuration / 60;
|
||||
summary = mContext.getResources().getQuantityString(
|
||||
R.plurals.zen_mode_duration_summary_time_hours, hours, hours);
|
||||
MessageFormat msgFormat = new MessageFormat(
|
||||
mContext.getString(R.string.zen_mode_duration_summary_time_hours),
|
||||
Locale.getDefault());
|
||||
Map<String, Object> msgArgs = new HashMap<>();
|
||||
msgArgs.put("count", zenDuration / 60);
|
||||
summary = msgFormat.format(msgArgs);
|
||||
} else {
|
||||
summary = mContext.getResources().getString(
|
||||
R.string.zen_mode_duration_summary_time_minutes, zenDuration);
|
||||
MessageFormat msgFormat = new MessageFormat(
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -23,6 +23,7 @@ import android.app.NotificationManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ParceledListSlice;
|
||||
import android.icu.text.MessageFormat;
|
||||
import android.os.AsyncTask;
|
||||
import android.service.notification.ConversationChannelWrapper;
|
||||
import android.view.View;
|
||||
@@ -41,7 +42,10 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.widget.RadioButtonPreference;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Options to choose the priority conversations that are allowed to bypass DND.
|
||||
@@ -130,12 +134,13 @@ public class ZenModePriorityConversationsPreferenceController
|
||||
|
||||
if (numConversations == UNSET) {
|
||||
return null;
|
||||
} else if (numConversations == 0) {
|
||||
return mContext.getResources().getString(
|
||||
R.string.zen_mode_conversations_count_none);
|
||||
} else {
|
||||
return mContext.getResources().getQuantityString(
|
||||
R.plurals.zen_mode_conversations_count, numConversations, numConversations);
|
||||
MessageFormat msgFormat = new MessageFormat(
|
||||
mContext.getString(R.string.zen_mode_conversations_count),
|
||||
Locale.getDefault());
|
||||
Map<String, Object> args = new HashMap<>();
|
||||
args.put("count", numConversations);
|
||||
return msgFormat.format(args);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -32,7 +32,7 @@ import android.app.NotificationManager;
|
||||
import android.app.NotificationManager.Policy;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.icu.text.ListFormatter;
|
||||
import android.icu.text.MessageFormat;
|
||||
import android.provider.Settings;
|
||||
import android.service.notification.ZenModeConfig;
|
||||
|
||||
@@ -47,7 +47,9 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.search.SearchIndexable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.function.Predicate;
|
||||
@@ -130,24 +132,21 @@ public class ZenModeSettings extends ZenModeSettingsBase {
|
||||
|| PRIORITY_CATEGORY_EVENTS == category,
|
||||
true);
|
||||
int numCategories = enabledCategories.size();
|
||||
if (numCategories == 0) {
|
||||
return mContext.getResources().getString(R.string.zen_mode_other_sounds_none);
|
||||
MessageFormat msgFormat = new MessageFormat(
|
||||
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(
|
||||
R.plurals.zen_mode_other_sounds_summary,
|
||||
numCategories /* quantity */,
|
||||
ListFormatter.getInstance().format(displayCategories));
|
||||
return msgFormat.format(args);
|
||||
}
|
||||
|
||||
String getCallsSettingSummary(Policy policy) {
|
||||
@@ -192,15 +191,12 @@ public class ZenModeSettings extends ZenModeSettingsBase {
|
||||
description);
|
||||
}
|
||||
} else {
|
||||
final int count = getEnabledAutomaticRulesCount();
|
||||
if (count > 0) {
|
||||
return mContext.getString(R.string.zen_mode_sound_summary_off_with_info,
|
||||
mContext.getResources().getQuantityString(
|
||||
R.plurals.zen_mode_sound_summary_summary_off_info,
|
||||
count, count));
|
||||
}
|
||||
|
||||
return mContext.getString(R.string.zen_mode_sound_summary_off);
|
||||
MessageFormat msgFormat = new MessageFormat(
|
||||
mContext.getString(R.string.zen_mode_sound_summary_off),
|
||||
Locale.getDefault());
|
||||
Map<String, Object> msgArgs = new HashMap<>();
|
||||
msgArgs.put("count", getEnabledAutomaticRulesCount());
|
||||
return msgFormat.format(msgArgs);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,10 +214,12 @@ public class ZenModeSettings extends ZenModeSettingsBase {
|
||||
}
|
||||
|
||||
String getAutomaticRulesSummary() {
|
||||
final int count = getEnabledAutomaticRulesCount();
|
||||
return count == 0 ? mContext.getString(R.string.zen_mode_settings_summary_off)
|
||||
: mContext.getResources().getQuantityString(
|
||||
R.plurals.zen_mode_settings_summary_on, count, count);
|
||||
MessageFormat msgFormat = new MessageFormat(
|
||||
mContext.getString(R.string.zen_mode_settings_schedules_summary),
|
||||
Locale.getDefault());
|
||||
Map<String, Object> msgArgs = new HashMap<>();
|
||||
msgArgs.put("count", getEnabledAutomaticRulesCount());
|
||||
return msgFormat.format(msgArgs);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
@@ -58,7 +58,7 @@ public class ZenModeSoundVibrationPreferenceController extends
|
||||
switch (getZenMode()) {
|
||||
case Settings.Global.ZEN_MODE_NO_INTERRUPTIONS:
|
||||
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;
|
||||
case Settings.Global.ZEN_MODE_ALARMS:
|
||||
preference.setEnabled(false);
|
||||
|
Reference in New Issue
Block a user