Cleanup plurals format

Change <one> to <1> in string res file
Test: Update, existing tests still pass
bug: 199230342

Change-Id: Ic3a5259570cb52cd1664638f3b1058c87a631c04
This commit is contained in:
xinghailu
2022-12-27 12:12:11 +08:00
parent 6f77562412
commit 1637a3a10a
30 changed files with 235 additions and 210 deletions

View File

@@ -492,10 +492,10 @@
<!-- Used in the location settings to control turning on/off the feature entirely [CHAR LIMIT=60] --> <!-- Used in the location settings to control turning on/off the feature entirely [CHAR LIMIT=60] -->
<string name="location_settings_primary_switch_title">Use location</string> <string name="location_settings_primary_switch_title">Use location</string>
<!-- Summary for Location settings when location is on, explaining how many apps have location permission [CHAR LIMIT=NONE]--> <!-- Summary for Location settings when location is on, explaining how many apps have location permission [CHAR LIMIT=NONE]-->
<plurals name="location_settings_summary_location_on"> <string name="location_settings_summary_location_on">{count, plural,
<item quantity="one">On - <xliff:g id="count">%1$d</xliff:g> app has access to location</item> =1 {On - # app has access to location}
<item quantity="other">On - <xliff:g id="count">%1$d</xliff:g> apps have access to location</item> other {On - # apps have access to location}
</plurals> }</string>
<!-- Location settings, loading the number of apps which have location permission [CHAR LIMIT=30] --> <!-- Location settings, loading the number of apps which have location permission [CHAR LIMIT=30] -->
<string name="location_settings_loading_app_permission_stats">Loading\u2026</string> <string name="location_settings_loading_app_permission_stats">Loading\u2026</string>
<!-- Location settings footer warning text when location is on [CHAR LIMIT=NONE] --> <!-- Location settings footer warning text when location is on [CHAR LIMIT=NONE] -->
@@ -677,10 +677,10 @@
<!-- Preference to add another fingerprint --> <!-- Preference to add another fingerprint -->
<string name="fingerprint_add_title">Add fingerprint</string> <string name="fingerprint_add_title">Add fingerprint</string>
<!-- Message showing the current number of fingerprints set up. Shown for a menu item that launches fingerprint settings or enrollment. --> <!-- Message showing the current number of fingerprints set up. Shown for a menu item that launches fingerprint settings or enrollment. -->
<plurals name="security_settings_fingerprint_preference_summary"> <string name="security_settings_fingerprint_preference_summary">{count, plural,
<item quantity="one">Fingerprint added</item> =1 {Fingerprint added}
<item quantity="other"><xliff:g id="count">%1$d</xliff:g> fingerprints added</item> other {# fingerprints added}
</plurals> }</string>
<!-- message shown in summary field when no fingerprints are registered --> <!-- message shown in summary field when no fingerprints are registered -->
<string name="security_settings_fingerprint_preference_summary_none"></string> <string name="security_settings_fingerprint_preference_summary_none"></string>
<!-- Introduction title shown in fingerprint enrollment to introduce the fingerprint feature [CHAR LIMIT=29] --> <!-- Introduction title shown in fingerprint enrollment to introduce the fingerprint feature [CHAR LIMIT=29] -->
@@ -4453,27 +4453,26 @@
<string name="reduce_bright_colors_persist_preference_title">Keep on after device restarts</string> <string name="reduce_bright_colors_persist_preference_title">Keep on after device restarts</string>
<!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] --> <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
<plurals name="accessibilty_autoclick_preference_subtitle_short_delay"> <string name="accessibilty_autoclick_preference_subtitle_short_delay">{count, plural,
<item quantity="one">Short (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item> =1 {Short ({time} second)}
<item quantity="other">Short (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item> other {Short ({time} seconds)}
</plurals> }</string>
<!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] --> <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
<plurals name="accessibilty_autoclick_preference_subtitle_medium_delay"> <string name="accessibilty_autoclick_preference_subtitle_medium_delay">{count, plural,
<item quantity="one">Medium (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item> =1 {Medium ({time} second)}
<item quantity="other">Medium (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item> other {Medium ({time} seconds)}
</plurals> }</string>
<!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] --> <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
<plurals name="accessibilty_autoclick_preference_subtitle_long_delay"> <string name="accessibilty_autoclick_preference_subtitle_long_delay">{count, plural,
<item quantity="one">Long (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item> =1 {Long ({time} second)}
<item quantity="other">Long (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item> other {Long ({time} seconds)}
</plurals> }</string>
<!-- Summary for autoclick seekbar settings preference when user selected custom item. [CHAR LIMIT=35] --> <!-- Summary for autoclick seekbar settings preference when user selected custom item. [CHAR LIMIT=35] -->
<plurals name="accessibilty_autoclick_delay_unit_second"> <string name="accessibilty_autoclick_delay_unit_second">{count, plural,
<item quantity="one"><xliff:g id="click_delay_label" example="1">%1$s</xliff:g> second</item> =1 {{time} second}
<item quantity="few"><xliff:g id="click_delay_label" example="0.6">%1$s</xliff:g> seconds</item> other {{time} seconds}
<item quantity="other"><xliff:g id="click_delay_label">%1$s</xliff:g> seconds</item> }</string>
</plurals>
<!-- Title for accessibility menu item to launch a settings activity. [CHAR LIMIT=15] --> <!-- Title for accessibility menu item to launch a settings activity. [CHAR LIMIT=15] -->
<string name="accessibility_menu_item_settings">Settings</string> <string name="accessibility_menu_item_settings">Settings</string>
@@ -4672,16 +4671,16 @@
<string name="print_settings">Printing</string> <string name="print_settings">Printing</string>
<!-- Print setting summary in settings screen [CHAR LIMIT=50] --> <!-- Print setting summary in settings screen [CHAR LIMIT=50] -->
<plurals name="print_settings_summary"> <string name="print_settings_summary">{count, plural,
<item quantity="one">1 print service on</item> =1 {1 print service on}
<item quantity="other"><xliff:g id="count">%1$d</xliff:g> print services on</item> other {# print services on}
</plurals> }</string>
<!-- Print setting summary in settings screenm indicating how many print jobs are active [CHAR LIMIT=None] --> <!-- Print setting summary in settings screenm indicating how many print jobs are active [CHAR LIMIT=None] -->
<plurals name="print_jobs_summary"> <string name="print_jobs_summary">{count, plural,
<item quantity="one">1 print job</item> =1 {1 print job}
<item quantity="other"><xliff:g id="count">%1$d</xliff:g> print jobs</item> other {# print jobs}
</plurals> }</string>
<!-- Title for print service settings screen [CHAR LIMIT=25] --> <!-- Title for print service settings screen [CHAR LIMIT=25] -->
<string name="print_settings_title">Print services</string> <string name="print_settings_title">Print services</string>
@@ -4878,31 +4877,31 @@
<!-- Footer message for battery tip dialog to show the status about the battery [CHAR LIMIT=NONE] --> <!-- Footer message for battery tip dialog to show the status about the battery [CHAR LIMIT=NONE] -->
<string name="battery_tip_dialog_message_footer">Includes high-power background activity</string> <string name="battery_tip_dialog_message_footer">Includes high-power background activity</string>
<!-- Title for restricted app preference, showing how many app need to be restricted [CHAR LIMIT=NONE] --> <!-- Title for restricted app preference, showing how many app need to be restricted [CHAR LIMIT=NONE] -->
<plurals name="battery_tip_restrict_title"> <string name="battery_tip_restrict_title">{count, plural,
<item quantity="one">Restrict %1$d app</item> =1 {Restrict # app}
<item quantity="other">Restrict %1$d apps</item> other {Restrict # apps}
</plurals> }</string>
<!-- Title for restricted app preference, showing how many app been restricted [CHAR LIMIT=NONE] --> <!-- Title for restricted app preference, showing how many app been restricted [CHAR LIMIT=NONE] -->
<plurals name="battery_tip_restrict_handled_title"> <string name="battery_tip_restrict_handled_title">{count, plural,
<item quantity="one">%1$s recently restricted</item> =1 {{label} recently restricted}
<item quantity="other">%2$d apps recently restricted</item> other {# apps recently restricted}
</plurals> }</string>
<!-- Summary for restricted app preference, showing the impact of the apps [CHAR LIMIT=NONE] --> <!-- Summary for restricted app preference, showing the impact of the apps [CHAR LIMIT=NONE] -->
<plurals name="battery_tip_restrict_summary"> <string name="battery_tip_restrict_summary">{count, plural,
<item quantity="one">%1$s has high background battery usage</item> =1 {{label} has high background battery usage}
<item quantity="other">%2$d apps have high background battery usage</item> other {# apps have high background battery usage}
</plurals> }</string>
<!-- Summary for restricted app preference, showing the impact of the apps [CHAR LIMIT=NONE] --> <!-- Summary for restricted app preference, showing the impact of the apps [CHAR LIMIT=NONE] -->
<plurals name="battery_tip_restrict_handled_summary"> <string name="battery_tip_restrict_handled_summary">{count, plural,
<item quantity="one">This app can\'t run in the background</item> =1 {This app can\'t run in the background}
<item quantity="other">These apps can\'t run in the background</item> other {These apps can\'t run in the background}
</plurals> }</string>
<!-- Title for dialog to restrict the app [CHAR LIMIT=NONE] --> <!-- Title for dialog to restrict the app [CHAR LIMIT=NONE] -->
<plurals name="battery_tip_restrict_app_dialog_title"> <string name="battery_tip_restrict_app_dialog_title">{count, plural,
<item quantity="one">Restrict app?</item> =1 {Restrict app?}
<item quantity="other">Restrict %1$d apps?</item> other {Restrict # apps?}
</plurals> }</string>
<!-- Message for battery tip dialog to show the info to restrict the app [CHAR LIMIT=NONE] --> <!-- Message for battery tip dialog to show the info to restrict the app [CHAR LIMIT=NONE] -->
<string name="battery_tip_restrict_app_dialog_message">To save battery, stop <xliff:g id="app">%1$s</xliff:g> from using battery in the background. This app may not work properly and notifications may be delayed.</string> <string name="battery_tip_restrict_app_dialog_message">To save battery, stop <xliff:g id="app">%1$s</xliff:g> from using battery in the background. This app may not work properly and notifications may be delayed.</string>
<!-- Message for battery tip dialog to show the info to restrict the app, below it app list will be shown as a view [CHAR LIMIT=NONE] --> <!-- Message for battery tip dialog to show the info to restrict the app, below it app list will be shown as a view [CHAR LIMIT=NONE] -->
@@ -4931,10 +4930,10 @@
<!-- Title for restricted app preference, clicking it will goes to restricted app list [CHAR LIMIT=NONE] --> <!-- Title for restricted app preference, clicking it will goes to restricted app list [CHAR LIMIT=NONE] -->
<string name="restricted_app_title">Restricted apps</string> <string name="restricted_app_title">Restricted apps</string>
<!-- Summary for restricted app preference, clicking it will goes to restricted app list [CHAR LIMIT=NONE] --> <!-- Summary for restricted app preference, clicking it will goes to restricted app list [CHAR LIMIT=NONE] -->
<plurals name="restricted_app_summary"> <string name="restricted_app_summary">{count, plural,
<item quantity="one">Limiting battery usage for %1$d app</item> =1 {Limiting battery usage for # app}
<item quantity="other">Limiting battery usage for %1$d apps</item> other {Limiting battery usage for # apps}
</plurals> }</string>
<!-- Summary for restricted app to show the restriction time [CHAR LIMIT=NONE] --> <!-- Summary for restricted app to show the restriction time [CHAR LIMIT=NONE] -->
<string name="restricted_app_time_summary">Restricted <xliff:g id="time" example="5 days ago">%1$s</xliff:g></string> <string name="restricted_app_time_summary">Restricted <xliff:g id="time" example="5 days ago">%1$s</xliff:g></string>
@@ -4953,10 +4952,10 @@
<string name="battery_manager_summary_unsupported">Detecting when apps drain battery</string> <string name="battery_manager_summary_unsupported">Detecting when apps drain battery</string>
<!-- Summary for battery manager, showing app restricted --> <!-- Summary for battery manager, showing app restricted -->
<plurals name="battery_manager_app_restricted"> <string name="battery_manager_app_restricted">{count, plural,
<item quantity="one">%1$d app restricted</item> =1 {# app restricted}
<item quantity="other">%1$d apps restricted</item> other {# apps restricted}
</plurals> }</string>
<!-- Title to display the battery percentage. [CHAR LIMIT=24] --> <!-- Title to display the battery percentage. [CHAR LIMIT=24] -->
<string name="battery_header_title_alternate"><xliff:g id="number" example="88">^1</xliff:g><small> <font size="20"><xliff:g id="unit" example="%">%</xliff:g></font></small></string> <string name="battery_header_title_alternate"><xliff:g id="number" example="88">^1</xliff:g><small> <font size="20"><xliff:g id="unit" example="%">%</xliff:g></font></small></string>
@@ -5406,10 +5405,10 @@
<!-- Dialog message for button to remove the credential management app [CHAR LIMIT=NONE] --> <!-- Dialog message for button to remove the credential management app [CHAR LIMIT=NONE] -->
<string name="remove_credential_management_app_dialog_message">This app won\u2019t manage certificates, but it will stay on your device. Any certificates installed by the app will be uninstalled.</string> <string name="remove_credential_management_app_dialog_message">This app won\u2019t manage certificates, but it will stay on your device. Any certificates installed by the app will be uninstalled.</string>
<!-- List item found in the credential management app's authentication policy [CHAR LIMIT=NONE] --> <!-- List item found in the credential management app's authentication policy [CHAR LIMIT=NONE] -->
<plurals name="number_of_urls"> <string name="number_of_urls">{count, plural,
<item quantity="one"><xliff:g id="number">%d</xliff:g> URL</item> =1 {# URL}
<item quantity="other"><xliff:g id="number">%d</xliff:g> URLs</item> other {# URLs}
</plurals> }</string>
<!-- Sound settings screen, setting check box label --> <!-- Sound settings screen, setting check box label -->
<string name="emergency_tone_title">Emergency dialing signal</string> <string name="emergency_tone_title">Emergency dialing signal</string>
@@ -5510,10 +5509,10 @@
<string name="notification_history_dismiss">Recently dismissed</string> <string name="notification_history_dismiss">Recently dismissed</string>
<!-- app summary of notification app list screen [CHAR LIMIT=100] --> <!-- app summary of notification app list screen [CHAR LIMIT=100] -->
<plurals name="notification_history_count"> <string name="notification_history_count">{count, plural,
<item quantity="one"><xliff:g id="number">%d</xliff:g> notification</item> =1 {# notification}
<item quantity="other"><xliff:g id="number">%d</xliff:g> notifications</item> other {# notifications}
</plurals> }</string>
<!-- Category title for phone call's ringtone and vibration settings in the Sound Setting. <!-- Category title for phone call's ringtone and vibration settings in the Sound Setting.
[CHAR LIMIT=40] --> [CHAR LIMIT=40] -->
@@ -5954,10 +5953,10 @@
<!-- Button to close the SSL CA cert warning dialog box, meaning the user is done reading. [CHAR LIMIT=NONE] --> <!-- Button to close the SSL CA cert warning dialog box, meaning the user is done reading. [CHAR LIMIT=NONE] -->
<string name="done_button">Done</string> <string name="done_button">Done</string>
<!-- Title of Dialog warning users of SSL monitoring. [CHAR LIMIT=NONE] --> <!-- Title of Dialog warning users of SSL monitoring. [CHAR LIMIT=NONE] -->
<plurals name="ssl_ca_cert_dialog_title"> <string name="ssl_ca_cert_dialog_title">{count, plural,
<item quantity="one">Trust or remove certificate</item> =1 {Trust or remove certificate}
<item quantity="other">Trust or remove certificates</item> other {Trust or remove certificates}
</plurals> }</string>
<!-- Text of message to show to device owner user whose administrator has installed a SSL CA Cert. [CHAR LIMIT=NONE] --> <!-- Text of message to show to device owner user whose administrator has installed a SSL CA Cert. [CHAR LIMIT=NONE] -->
<string name="ssl_ca_cert_info_message_device_owner"> {numberOfCertificates, plural, <string name="ssl_ca_cert_info_message_device_owner"> {numberOfCertificates, plural,
=1 {{orgName} has installed a certificate authority on your device, which may allow them to monitor your device network activity, including emails, apps, and secure websites.\n\nFor more information about this certificate, contact your admin.} =1 {{orgName} has installed a certificate authority on your device, which may allow them to monitor your device network activity, including emails, apps, and secure websites.\n\nFor more information about this certificate, contact your admin.}
@@ -5971,10 +5970,10 @@
<!-- Text of warning to show to users that have a SSL CA Cert installed. [CHAR LIMIT=NONE] --> <!-- Text of warning to show to users that have a SSL CA Cert installed. [CHAR LIMIT=NONE] -->
<string name="ssl_ca_cert_warning_message">A third party is capable of monitoring your network activity, including emails, apps, and secure websites.\n\nA trusted credential installed on your device is making this possible.</string> <string name="ssl_ca_cert_warning_message">A third party is capable of monitoring your network activity, including emails, apps, and secure websites.\n\nA trusted credential installed on your device is making this possible.</string>
<!-- Label on button that will take the user to the Trusted Credentials settings page. [CHAR LIMIT=NONE]--> <!-- Label on button that will take the user to the Trusted Credentials settings page. [CHAR LIMIT=NONE]-->
<plurals name="ssl_ca_cert_settings_button"> <string name="ssl_ca_cert_settings_button">{count, plural,
<item quantity="one">Check certificate</item> =1 {Check certificate}
<item quantity="other">Check certificates</item> other {Check certificates}
</plurals> }</string>
<!-- User settings screen title [CHAR LIMIT=40] --> <!-- User settings screen title [CHAR LIMIT=40] -->
<string name="user_settings_title">Multiple users</string> <string name="user_settings_title">Multiple users</string>
@@ -7430,10 +7429,10 @@
<string name="priority_conversation_count_zero">No priority conversations</string> <string name="priority_conversation_count_zero">No priority conversations</string>
<!-- [CHAR LIMIT=100] summary text on link to 'all conversations' page, some conversations are priority --> <!-- [CHAR LIMIT=100] summary text on link to 'all conversations' page, some conversations are priority -->
<plurals name="priority_conversation_count"> <string name="priority_conversation_count">{count, plural,
<item quantity="one"><xliff:g id="count" example="1">%d</xliff:g> priority conversation</item> =1 {# priority conversation}
<item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> priority conversations</item> other {# priority conversations}
</plurals> }</string>
<!-- [CHAR LIMIT=100] preference category title --> <!-- [CHAR LIMIT=100] preference category title -->
<string name="important_conversations">Priority conversations</string> <string name="important_conversations">Priority conversations</string>
@@ -7526,14 +7525,14 @@
<string name="notification_app_switch_label">All <xliff:g id="app_name" example="Android Services">%1$s</xliff:g> notifications</string> <string name="notification_app_switch_label">All <xliff:g id="app_name" example="Android Services">%1$s</xliff:g> notifications</string>
<!-- app summary of notification app list screen [CHAR LIMIT=100] --> <!-- app summary of notification app list screen [CHAR LIMIT=100] -->
<plurals name="notifications_sent_daily"> <string name="notifications_sent_daily">{count, plural,
<item quantity="one">About <xliff:g id="number">%d</xliff:g> notification per day</item> =1 {About # notification per day}
<item quantity="other">About <xliff:g id="number">%,d</xliff:g> notifications per day</item> other {About # notifications per day}
</plurals> }</string>
<plurals name="notifications_sent_weekly"> <string name="notifications_sent_weekly">{count, plural,
<item quantity="one">About <xliff:g id="number">%d</xliff:g> notification per week</item> =1 {About # notification per week}
<item quantity="other">About <xliff:g id="number">%,d</xliff:g> notifications per week</item> other {About # notifications per week}
</plurals> }</string>
<!-- app summary of notification app list screen [CHAR LIMIT=100] --> <!-- app summary of notification app list screen [CHAR LIMIT=100] -->
<string name="notifications_sent_never">Never</string> <string name="notifications_sent_never">Never</string>
@@ -7730,10 +7729,10 @@
<string name="interact_across_profiles_number_of_connected_apps_none">No apps connected</string> <string name="interact_across_profiles_number_of_connected_apps_none">No apps connected</string>
<!-- Summary of preference to manage connected work and personal apps, informing the user how many apps are connected --> <!-- Summary of preference to manage connected work and personal apps, informing the user how many apps are connected -->
<plurals name="interact_across_profiles_number_of_connected_apps"> <string name="interact_across_profiles_number_of_connected_apps">{count, plural,
<item quantity="one"><xliff:g id="count">%d</xliff:g> app connected</item> =1 {# app connected}
<item quantity="other"><xliff:g id="count">%d</xliff:g> apps connected</item> other {# apps connected}
</plurals> }</string>
<!-- Banner title. This banner lets a user know that they need to install an app in their <!-- Banner title. This banner lets a user know that they need to install an app in their
work profile in order to connect it to the corresponding personal app. work profile in order to connect it to the corresponding personal app.
@@ -7784,10 +7783,10 @@
<string name="app_settings_link">Additional settings in the app</string> <string name="app_settings_link">Additional settings in the app</string>
<!-- [CHAR LIMIT=NONE] Footer listing a count of deleted channels. --> <!-- [CHAR LIMIT=NONE] Footer listing a count of deleted channels. -->
<plurals name="deleted_channels"> <string name="deleted_channels">{count, plural,
<item quantity="one"><xliff:g id="count" example="1">%d</xliff:g> category deleted</item> =1 {# category deleted}
<item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> categories deleted</item> other {# categories deleted}
</plurals> }</string>
<!-- [CHAR LIMIT=NONE] App notification settings: Block option title --> <!-- [CHAR LIMIT=NONE] App notification settings: Block option title -->
<string name="app_notification_block_title">Block all</string> <string name="app_notification_block_title">Block all</string>

View File

@@ -33,6 +33,7 @@ import android.provider.Settings;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.utils.StringUtil;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
@@ -65,16 +66,17 @@ public class MonitoringCertInfoActivity extends Activity implements OnClickListe
final int numberOfCertificates = getIntent().getIntExtra( final int numberOfCertificates = getIntent().getIntExtra(
Settings.EXTRA_NUMBER_OF_CERTIFICATES, 1); Settings.EXTRA_NUMBER_OF_CERTIFICATES, 1);
final int titleId = RestrictedLockUtils.getProfileOrDeviceOwner(this, user) != null final int titleId = RestrictedLockUtils.getProfileOrDeviceOwner(this, user) != null
? R.plurals.ssl_ca_cert_settings_button // Check certificate ? R.string.ssl_ca_cert_settings_button // Check certificate
: R.plurals.ssl_ca_cert_dialog_title; // Trust or remove certificate : R.string.ssl_ca_cert_dialog_title; // Trust or remove certificate
final CharSequence title = getResources().getQuantityText(titleId, numberOfCertificates); final CharSequence title = StringUtil.getIcuPluralsString(this, numberOfCertificates,
titleId);
setTitle(title); setTitle(title);
final AlertDialog.Builder builder = new AlertDialog.Builder(this); final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(title); builder.setTitle(title);
builder.setCancelable(true); builder.setCancelable(true);
builder.setPositiveButton(getResources().getQuantityText( builder.setPositiveButton(StringUtil.getIcuPluralsString(this, numberOfCertificates,
R.plurals.ssl_ca_cert_settings_button, numberOfCertificates) , this); R.string.ssl_ca_cert_settings_button) , this);
builder.setNeutralButton(R.string.cancel, null); builder.setNeutralButton(R.string.cancel, null);
builder.setOnDismissListener(this); builder.setOnDismissListener(this);

View File

@@ -34,9 +34,9 @@ public class AutoclickPreferenceController extends BasePreferenceController {
* placeholder for integer delay value. * placeholder for integer delay value.
*/ */
private static final int[] AUTOCLICK_PREFERENCE_SUMMARIES = { private static final int[] AUTOCLICK_PREFERENCE_SUMMARIES = {
R.plurals.accessibilty_autoclick_preference_subtitle_short_delay, R.string.accessibilty_autoclick_preference_subtitle_short_delay,
R.plurals.accessibilty_autoclick_preference_subtitle_medium_delay, R.string.accessibilty_autoclick_preference_subtitle_medium_delay,
R.plurals.accessibilty_autoclick_preference_subtitle_long_delay R.string.accessibilty_autoclick_preference_subtitle_long_delay
}; };
public AutoclickPreferenceController(Context context, String preferenceKey) { public AutoclickPreferenceController(Context context, String preferenceKey) {
@@ -59,7 +59,7 @@ public class AutoclickPreferenceController extends BasePreferenceController {
Settings.Secure.ACCESSIBILITY_AUTOCLICK_DELAY, Settings.Secure.ACCESSIBILITY_AUTOCLICK_DELAY,
AccessibilityManager.AUTOCLICK_DELAY_DEFAULT); AccessibilityManager.AUTOCLICK_DELAY_DEFAULT);
final int summaryIndex = getAutoclickPreferenceSummaryIndex(delayMillis); final int summaryIndex = getAutoclickPreferenceSummaryIndex(delayMillis);
return AutoclickUtils.getAutoclickDelaySummary(mContext.getResources(), return AutoclickUtils.getAutoclickDelaySummary(mContext,
AUTOCLICK_PREFERENCE_SUMMARIES[summaryIndex], delayMillis); AUTOCLICK_PREFERENCE_SUMMARIES[summaryIndex], delayMillis);
} }

View File

@@ -20,9 +20,16 @@ import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.annotation.IntDef; import android.annotation.IntDef;
import android.annotation.PluralsRes; import android.annotation.PluralsRes;
import android.annotation.StringRes;
import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import com.android.settings.R;
import com.android.settingslib.utils.StringUtil;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.util.HashMap;
import java.util.Map;
/** Provides utility methods related auto click. */ /** Provides utility methods related auto click. */
public final class AutoclickUtils { public final class AutoclickUtils {
@@ -58,20 +65,23 @@ public final class AutoclickUtils {
/** /**
* Gets string that should be used for provided autoclick delay. * Gets string that should be used for provided autoclick delay.
* *
* @param resources Resources from which string should be retrieved. * @param context context from which string should be retrieved.
* @param id The desired resource identifier, as generated by the aapt * @param id The desired resource identifier, as generated by the aapt
* tool. This integer encodes the package, type, and resource * tool. This integer encodes the package, type, and resource
* entry. The value 0 is an invalid identifier. * entry. The value 0 is an invalid identifier.
* @param delayMillis Delay for whose value summary should be retrieved. * @param delayMillis Delay for whose value summary should be retrieved.
*/ */
public static CharSequence getAutoclickDelaySummary(Resources resources, public static CharSequence getAutoclickDelaySummary(Context context,
@PluralsRes int id, int delayMillis) { @StringRes int id, int delayMillis) {
final int quantity = (delayMillis == 1000) ? Quantity.ONE : Quantity.FEW; final int quantity = (delayMillis == 1000) ? Quantity.ONE : Quantity.FEW;
final float delaySecond = (float) delayMillis / 1000; final float delaySecond = (float) delayMillis / 1000;
// Only show integer when delay time is 1. // Only show integer when delay time is 1.
final String decimalFormat = (delaySecond == 1) ? "%.0f" : "%.1f"; final String decimalFormat = (delaySecond == 1) ? "%.0f" : "%.1f";
return resources.getQuantityString(id, quantity, String.format(decimalFormat, delaySecond)); Map<String, Object> arguments = new HashMap<>();
arguments.put("count", quantity);
arguments.put("time", String.format(decimalFormat, delaySecond));
return StringUtil.getIcuPluralsString(context, arguments, id);
} }
private AutoclickUtils(){} private AutoclickUtils(){}

View File

@@ -176,7 +176,7 @@ public class ToggleAutoclickCustomSeekbarController extends BasePreferenceContro
} }
} }
private CharSequence delayTimeToString(int delayMillis) { private CharSequence delayTimeToString(int delayMillis) {
return AutoclickUtils.getAutoclickDelaySummary(mContext.getResources(), return AutoclickUtils.getAutoclickDelaySummary(mContext,
R.plurals.accessibilty_autoclick_delay_unit_second, delayMillis); R.string.accessibilty_autoclick_delay_unit_second, delayMillis);
} }
} }

View File

@@ -110,11 +110,11 @@ public class AppStateNotificationBridge extends AppStateBaseBridge {
context, System.currentTimeMillis() - state.lastSent, true); context, System.currentTimeMillis() - state.lastSent, true);
} else if (sortOrder == R.id.sort_order_frequent_notification) { } else if (sortOrder == R.id.sort_order_frequent_notification) {
if (state.avgSentDaily > 0) { if (state.avgSentDaily > 0) {
return context.getResources().getQuantityString( return StringUtil.getIcuPluralsString(context, state.avgSentDaily,
R.plurals.notifications_sent_daily, state.avgSentDaily, state.avgSentDaily); R.string.notifications_sent_daily);
} }
return context.getResources().getQuantityString(R.plurals.notifications_sent_weekly, return StringUtil.getIcuPluralsString(context, state.avgSentWeekly,
state.avgSentWeekly, state.avgSentWeekly); R.string.notifications_sent_weekly);
} else { } else {
return ""; return "";
} }

View File

@@ -25,6 +25,7 @@ import android.os.UserManager;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.utils.StringUtil;
import java.util.List; import java.util.List;
@@ -66,9 +67,7 @@ public class InteractAcrossProfilesController extends BasePreferenceController {
return connectedApps == 0 return connectedApps == 0
? mContext.getResources().getString( ? mContext.getResources().getString(
R.string.interact_across_profiles_number_of_connected_apps_none) R.string.interact_across_profiles_number_of_connected_apps_none)
: mContext.getResources().getQuantityString( : StringUtil.getIcuPluralsString(mContext, connectedApps,
R.plurals.interact_across_profiles_number_of_connected_apps, R.string.interact_across_profiles_number_of_connected_apps);
connectedApps,
connectedApps);
} }
} }

View File

@@ -28,6 +28,7 @@ import com.android.settings.Settings;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.biometrics.ParentalControlsUtils; import com.android.settings.biometrics.ParentalControlsUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.utils.StringUtil;
/** /**
* Utilities for combined biometric details shared between Security Settings and Safety Center. * Utilities for combined biometric details shared between Security Settings and Safety Center.
@@ -102,9 +103,8 @@ public class CombinedBiometricStatusUtils {
} else if (faceEnrolled) { } else if (faceEnrolled) {
return mContext.getString(R.string.security_settings_face_preference_summary); return mContext.getString(R.string.security_settings_face_preference_summary);
} else if (numFingerprintsEnrolled > 0) { } else if (numFingerprintsEnrolled > 0) {
return mContext.getResources().getQuantityString( return StringUtil.getIcuPluralsString(mContext, numFingerprintsEnrolled,
R.plurals.security_settings_fingerprint_preference_summary, R.string.security_settings_fingerprint_preference_summary);
numFingerprintsEnrolled, numFingerprintsEnrolled);
} else { } else {
return mContext.getString( return mContext.getString(
R.string.security_settings_biometric_preference_summary_none_enrolled); R.string.security_settings_biometric_preference_summary_none_enrolled);

View File

@@ -28,6 +28,7 @@ import com.android.settings.Utils;
import com.android.settings.biometrics.ParentalControlsUtils; import com.android.settings.biometrics.ParentalControlsUtils;
import com.android.settings.biometrics2.ui.view.FingerprintEnrollmentActivity; import com.android.settings.biometrics2.ui.view.FingerprintEnrollmentActivity;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.utils.StringUtil;
/** /**
* Utilities for fingerprint details shared between Security Settings and Safety Center. * Utilities for fingerprint details shared between Security Settings and Safety Center.
@@ -69,9 +70,8 @@ public class FingerprintStatusUtils {
public String getSummary() { public String getSummary() {
if (hasEnrolled()) { if (hasEnrolled()) {
final int numEnrolled = mFingerprintManager.getEnrolledFingerprints(mUserId).size(); final int numEnrolled = mFingerprintManager.getEnrolledFingerprints(mUserId).size();
return mContext.getResources().getQuantityString( return StringUtil.getIcuPluralsString(mContext, numEnrolled,
R.plurals.security_settings_fingerprint_preference_summary, R.string.security_settings_fingerprint_preference_summary);
numEnrolled, numEnrolled);
} else { } else {
return mContext.getString( return mContext.getString(
R.string.security_settings_fingerprint_preference_summary_none); R.string.security_settings_fingerprint_preference_summary_none);

View File

@@ -31,6 +31,7 @@ import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.fuelgauge.batterytip.AppInfo; import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settings.fuelgauge.batterytip.BatteryTipUtils; import com.android.settings.fuelgauge.batterytip.BatteryTipUtils;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.utils.StringUtil;
import java.util.List; import java.util.List;
@@ -75,9 +76,8 @@ public class RestrictAppPreferenceController extends BasePreferenceController {
final int num = mAppInfos.size(); final int num = mAppInfos.size();
// Fragment change RestrictedAppsList after onPause(), UI needs to be updated in onResume() // Fragment change RestrictedAppsList after onPause(), UI needs to be updated in onResume()
preference.setVisible(num > 0); preference.setVisible(num > 0);
preference.setSummary( preference.setSummary(StringUtil.getIcuPluralsString(mContext, num,
mContext.getResources().getQuantityString(R.plurals.restricted_app_summary, num, R.string.restricted_app_summary));
num));
} }
@Override @Override

View File

@@ -27,6 +27,7 @@ import com.android.settings.R;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.fuelgauge.PowerUsageFeatureProvider; import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.utils.StringUtil;
/** /**
* Preference controller to control the battery manager * Preference controller to control the battery manager
@@ -67,8 +68,8 @@ public class BatteryManagerPreferenceController extends BasePreferenceController
@VisibleForTesting @VisibleForTesting
void updateSummary(Preference preference, int num) { void updateSummary(Preference preference, int num) {
if (num > 0) { if (num > 0) {
preference.setSummary(mContext.getResources().getQuantityString( preference.setSummary(StringUtil.getIcuPluralsString(mContext, num,
R.plurals.battery_manager_app_restricted, num, num)); R.string.battery_manager_app_restricted));
} else { } else {
preference.setSummary( preference.setSummary(
mPowerUsageFeatureProvider.isAdaptiveChargingSupported() mPowerUsageFeatureProvider.isAdaptiveChargingSupported()

View File

@@ -42,6 +42,7 @@ import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip; import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip;
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip; import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip; import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
import com.android.settingslib.utils.StringUtil;
import java.util.List; import java.util.List;
@@ -107,8 +108,8 @@ public class BatteryTipDialogFragment extends InstrumentedDialogFragment impleme
restrictedAppList.get(0).packageName); restrictedAppList.get(0).packageName);
final AlertDialog.Builder builder = new AlertDialog.Builder(context) final AlertDialog.Builder builder = new AlertDialog.Builder(context)
.setTitle(context.getResources().getQuantityString( .setTitle(StringUtil.getIcuPluralsString(context, num,
R.plurals.battery_tip_restrict_app_dialog_title, num, num)) R.string.battery_tip_restrict_app_dialog_title))
.setPositiveButton(R.string.battery_tip_restrict_app_dialog_ok, this) .setPositiveButton(R.string.battery_tip_restrict_app_dialog_ok, this)
.setNegativeButton(android.R.string.cancel, null); .setNegativeButton(android.R.string.cancel, null);
if (num == 1) { if (num == 1) {

View File

@@ -28,9 +28,12 @@ import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.fuelgauge.batterytip.AppInfo; import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.utils.StringUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* Tip to suggest user to restrict some bad apps * Tip to suggest user to restrict some bad apps
@@ -62,12 +65,15 @@ public class RestrictAppTip extends BatteryTip {
final int num = mRestrictAppList.size(); final int num = mRestrictAppList.size();
final CharSequence appLabel = num > 0 ? Utils.getApplicationLabel(context, final CharSequence appLabel = num > 0 ? Utils.getApplicationLabel(context,
mRestrictAppList.get(0).packageName) : ""; mRestrictAppList.get(0).packageName) : "";
final Resources resources = context.getResources();
Map<String, Object> arguments = new HashMap<>();
arguments.put("count", num);
arguments.put("label", appLabel);
return mState == StateType.HANDLED return mState == StateType.HANDLED
? resources.getQuantityString(R.plurals.battery_tip_restrict_handled_title, num, ? StringUtil.getIcuPluralsString(context, arguments,
appLabel, num) R.string.battery_tip_restrict_handled_title)
: resources.getQuantityString(R.plurals.battery_tip_restrict_title, num, num); : StringUtil.getIcuPluralsString(context, arguments,
R.string.battery_tip_restrict_title);
} }
@Override @Override
@@ -76,9 +82,12 @@ public class RestrictAppTip extends BatteryTip {
final CharSequence appLabel = num > 0 ? Utils.getApplicationLabel(context, final CharSequence appLabel = num > 0 ? Utils.getApplicationLabel(context,
mRestrictAppList.get(0).packageName) : ""; mRestrictAppList.get(0).packageName) : "";
final int resId = mState == StateType.HANDLED final int resId = mState == StateType.HANDLED
? R.plurals.battery_tip_restrict_handled_summary ? R.string.battery_tip_restrict_handled_summary
: R.plurals.battery_tip_restrict_summary; : R.string.battery_tip_restrict_summary;
return context.getResources().getQuantityString(resId, num, appLabel, num); Map<String, Object> arguments = new HashMap<>();
arguments.put("count", num);
arguments.put("label", appLabel);
return StringUtil.getIcuPluralsString(context, arguments, resId);
} }
@Override @Override

View File

@@ -21,6 +21,7 @@ import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop; import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.utils.StringUtil;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -63,8 +64,8 @@ public class TopLevelLocationPreferenceController extends BasePreferenceControll
@VisibleForTesting @VisibleForTesting
void setLocationAppCount(int numApps) { void setLocationAppCount(int numApps) {
sSummary = mContext.getResources().getQuantityString( sSummary = StringUtil.getIcuPluralsString(mContext, numApps,
R.plurals.location_settings_summary_location_on, numApps, numApps); R.string.location_settings_summary_location_on);
refreshSummary(mPreference); refreshSummary(mPreference);
} }

View File

@@ -20,6 +20,7 @@ import android.content.Context;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.utils.StringUtil;
public class ConversationListSummaryPreferenceController extends BasePreferenceController { public class ConversationListSummaryPreferenceController extends BasePreferenceController {
@@ -41,9 +42,8 @@ public class ConversationListSummaryPreferenceController extends BasePreferenceC
if (count == 0) { if (count == 0) {
return mContext.getText(R.string.priority_conversation_count_zero); return mContext.getText(R.string.priority_conversation_count_zero);
} }
return mContext.getResources().getQuantityString( return StringUtil.getIcuPluralsString(mContext, count,
R.plurals.priority_conversation_count, R.string.priority_conversation_count);
count, count);
} }
void setBackend(NotificationBackend backend) { void setBackend(NotificationBackend backend) {

View File

@@ -509,11 +509,11 @@ public class NotificationBackend {
context, System.currentTimeMillis() - state.lastSent, true); context, System.currentTimeMillis() - state.lastSent, true);
} else { } else {
if (state.avgSentDaily > 0) { if (state.avgSentDaily > 0) {
return context.getResources().getQuantityString(R.plurals.notifications_sent_daily, return StringUtil.getIcuPluralsString(context, state.avgSentDaily,
state.avgSentDaily, state.avgSentDaily); R.string.notifications_sent_daily);
} }
return context.getResources().getQuantityString(R.plurals.notifications_sent_weekly, return StringUtil.getIcuPluralsString(context, state.avgSentWeekly,
state.avgSentWeekly, state.avgSentWeekly); R.string.notifications_sent_weekly);
} }
} }

View File

@@ -23,6 +23,7 @@ import androidx.preference.Preference;
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.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.utils.StringUtil;
public class DeletedChannelsPreferenceController extends NotificationPreferenceController public class DeletedChannelsPreferenceController extends NotificationPreferenceController
implements PreferenceControllerMixin { implements PreferenceControllerMixin {
@@ -59,8 +60,8 @@ public class DeletedChannelsPreferenceController extends NotificationPreferenceC
public void updateState(Preference preference) { public void updateState(Preference preference) {
if (mAppRow != null) { if (mAppRow != null) {
int deletedChannelCount = mBackend.getDeletedChannelCount(mAppRow.pkg, mAppRow.uid); int deletedChannelCount = mBackend.getDeletedChannelCount(mAppRow.pkg, mAppRow.uid);
preference.setTitle(mContext.getResources().getQuantityString( preference.setTitle(StringUtil.getIcuPluralsString(mContext, deletedChannelCount,
R.plurals.deleted_channels, deletedChannelCount, deletedChannelCount)); R.string.deleted_channels));
} }
preference.setSelectable(false); preference.setSelectable(false);
} }

View File

@@ -60,6 +60,7 @@ import com.android.internal.widget.NotificationExpandButton;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity; import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity;
import com.android.settingslib.utils.StringUtil;
import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.widget.MainSwitchBar; import com.android.settingslib.widget.MainSwitchBar;
import com.android.settingslib.widget.OnMainSwitchChangeListener; import com.android.settingslib.widget.OnMainSwitchChangeListener;
@@ -203,16 +204,15 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
icon.setImageDrawable(nhp.icon); icon.setImageDrawable(nhp.icon);
TextView count = viewForPackage.findViewById(R.id.count); TextView count = viewForPackage.findViewById(R.id.count);
count.setText(getResources().getQuantityString(R.plurals.notification_history_count, count.setText(StringUtil.getIcuPluralsString(this, nhp.notifications.size(),
nhp.notifications.size(), nhp.notifications.size())); R.string.notification_history_count));
final NotificationHistoryRecyclerView rv = final NotificationHistoryRecyclerView rv =
viewForPackage.findViewById(R.id.notification_list); viewForPackage.findViewById(R.id.notification_list);
rv.setAdapter(new NotificationHistoryAdapter(mNm, rv, rv.setAdapter(new NotificationHistoryAdapter(mNm, rv,
newCount -> { newCount -> {
count.setText(getResources().getQuantityString( count.setText(StringUtil.getIcuPluralsString(this, newCount,
R.plurals.notification_history_count, R.string.notification_history_count));
newCount, newCount));
if (newCount == 0) { if (newCount == 0) {
viewForPackage.setVisibility(View.GONE); viewForPackage.setVisibility(View.GONE);
} }

View File

@@ -34,6 +34,7 @@ import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop; import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.utils.StringUtil;
import java.util.List; import java.util.List;
@@ -110,17 +111,16 @@ public class PrintSettingPreferenceController extends BasePreferenceController i
} }
if (numActivePrintJobs > 0) { if (numActivePrintJobs > 0) {
return mContext.getResources().getQuantityString( return StringUtil.getIcuPluralsString(mContext, numActivePrintJobs,
R.plurals.print_jobs_summary, numActivePrintJobs, numActivePrintJobs); R.string.print_jobs_summary);
} else { } else {
final List<PrintServiceInfo> services = final List<PrintServiceInfo> services =
mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES); mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES);
if (services == null || services.isEmpty()) { if (services == null || services.isEmpty()) {
return mContext.getText(R.string.off); return mContext.getText(R.string.off);
} else { } else {
final int count = services.size(); return StringUtil.getIcuPluralsString(mContext, services.size(),
return mContext.getResources().getQuantityString( R.string.print_settings_summary);
R.plurals.print_settings_summary, count, count);
} }
} }
} }

View File

@@ -34,6 +34,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R; import com.android.settings.R;
import com.android.settingslib.utils.StringUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -193,8 +194,8 @@ public class CredentialManagementAppAdapter extends RecyclerView.Adapter<Recycle
} }
private String getNumberOfUrlsText(Map<Uri, String> urisToAliases) { private String getNumberOfUrlsText(Map<Uri, String> urisToAliases) {
return mContext.getResources().getQuantityString(R.plurals.number_of_urls, return StringUtil.getIcuPluralsString(mContext, urisToAliases.size(),
urisToAliases.size(), urisToAliases.size()); R.string.number_of_urls);
} }
} }

View File

@@ -177,12 +177,14 @@ class AppNotificationRepository(
fun calculateFrequencySummary(sentCount: Int): String { fun calculateFrequencySummary(sentCount: Int): String {
val dailyFrequency = (sentCount.toFloat() / DAYS_TO_CHECK).roundToInt() val dailyFrequency = (sentCount.toFloat() / DAYS_TO_CHECK).roundToInt()
return if (dailyFrequency > 0) { return if (dailyFrequency > 0) {
context.resources.getQuantityString( context.formatString(
R.plurals.notifications_sent_daily, dailyFrequency, dailyFrequency R.string.notifications_sent_daily,
"count" to dailyFrequency,
) )
} else { } else {
context.resources.getQuantityString( context.formatString(
R.plurals.notifications_sent_weekly, sentCount, sentCount R.string.notifications_sent_weekly,
"count" to sentCount,
) )
} }
} }

View File

@@ -72,8 +72,8 @@ public class AutoclickPreferenceControllerTest {
assertThat(mController.getSummary().toString()) assertThat(mController.getSummary().toString())
.isEqualTo(AutoclickUtils.getAutoclickDelaySummary( .isEqualTo(AutoclickUtils.getAutoclickDelaySummary(
mContext.getResources(), mContext,
R.plurals.accessibilty_autoclick_preference_subtitle_medium_delay, R.string.accessibilty_autoclick_preference_subtitle_medium_delay,
AUTOCLICK_DELAY_DEFAULT).toString()); AUTOCLICK_DELAY_DEFAULT).toString());
} }
} }

View File

@@ -40,7 +40,7 @@ public final class AutoclickUtilsTest {
@Test @Test
public void getAutoclickDelaySummary_minDelay_shouldReturnOnSummary() { public void getAutoclickDelaySummary_minDelay_shouldReturnOnSummary() {
final CharSequence summary = AutoclickUtils.getAutoclickDelaySummary( final CharSequence summary = AutoclickUtils.getAutoclickDelaySummary(
mContext.getResources(), R.plurals.accessibilty_autoclick_delay_unit_second, mContext, R.string.accessibilty_autoclick_delay_unit_second,
MIN_AUTOCLICK_DELAY_MS); MIN_AUTOCLICK_DELAY_MS);
assertThat(summary.toString()).isEqualTo("0.2 seconds"); assertThat(summary.toString()).isEqualTo("0.2 seconds");
} }
@@ -48,7 +48,7 @@ public final class AutoclickUtilsTest {
@Test @Test
public void getAutoclickDelaySummary_maxDelay_shouldReturnOnSummary() { public void getAutoclickDelaySummary_maxDelay_shouldReturnOnSummary() {
final CharSequence summary = AutoclickUtils.getAutoclickDelaySummary( final CharSequence summary = AutoclickUtils.getAutoclickDelaySummary(
mContext.getResources(), R.plurals.accessibilty_autoclick_delay_unit_second, mContext, R.string.accessibilty_autoclick_delay_unit_second,
MAX_AUTOCLICK_DELAY_MS); MAX_AUTOCLICK_DELAY_MS);
assertThat(summary.toString()).isEqualTo("1 second"); assertThat(summary.toString()).isEqualTo("1 second");
} }

View File

@@ -46,6 +46,7 @@ import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.utils.StringUtil;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore; import org.junit.Ignore;
@@ -140,8 +141,8 @@ public class FingerprintStatusPreferenceControllerTest {
mController.updateState(mPreference); mController.updateState(mPreference);
assertThat(mPreference.getSummary()).isEqualTo(mContext.getResources().getQuantityString( assertThat(mPreference.getSummary()).isEqualTo(StringUtil.getIcuPluralsString(mContext, 1,
R.plurals.security_settings_fingerprint_preference_summary, 1, 1)); R.string.security_settings_fingerprint_preference_summary));
assertThat(mPreference.isVisible()).isTrue(); assertThat(mPreference.isVisible()).isTrue();
} }

View File

@@ -35,6 +35,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.fuelgauge.batterytip.AppInfo; import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.utils.StringUtil;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -148,8 +149,8 @@ public class RestrictAppTipTest {
@Test @Test
public void getSummary_oneAppHandled_showHandledSummary() { public void getSummary_oneAppHandled_showHandledSummary() {
assertThat(mHandledBatteryTip.getSummary(mContext).toString()) assertThat(mHandledBatteryTip.getSummary(mContext).toString())
.isEqualTo(mContext.getResources().getQuantityString( .isEqualTo(StringUtil.getIcuPluralsString(mContext, 1,
R.plurals.battery_tip_restrict_handled_summary, 1)); R.string.battery_tip_restrict_handled_summary));
} }
@Test @Test
@@ -157,8 +158,8 @@ public class RestrictAppTipTest {
mUsageAppList.add(new AppInfo.Builder().build()); mUsageAppList.add(new AppInfo.Builder().build());
mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList); mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList);
assertThat(mHandledBatteryTip.getSummary(mContext)) assertThat(mHandledBatteryTip.getSummary(mContext))
.isEqualTo(mContext.getResources().getQuantityString( .isEqualTo(StringUtil.getIcuPluralsString(mContext, 2,
R.plurals.battery_tip_restrict_handled_summary, 2)); R.string.battery_tip_restrict_handled_summary));
} }
@Test @Test

View File

@@ -22,6 +22,7 @@ import android.content.Context;
import android.location.LocationManager; import android.location.LocationManager;
import com.android.settings.R; import com.android.settings.R;
import com.android.settingslib.utils.StringUtil;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -67,9 +68,8 @@ public class TopLevelLocationPreferenceControllerTest {
// Turn on location again and check if the previous summary text is still cached. // Turn on location again and check if the previous summary text is still cached.
mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
assertThat(mController.getSummary()).isEqualTo( assertThat(mController.getSummary()).isEqualTo(
mContext.getResources().getQuantityString( StringUtil.getIcuPluralsString(mContext, locationAppCount,
R.plurals.location_settings_summary_location_on, locationAppCount, R.string.location_settings_summary_location_on));
locationAppCount));
} }
@Test @Test
@@ -78,9 +78,8 @@ public class TopLevelLocationPreferenceControllerTest {
mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
mController.setLocationAppCount(locationAppCount); mController.setLocationAppCount(locationAppCount);
assertThat(mController.getSummary()).isEqualTo( assertThat(mController.getSummary()).isEqualTo(
mContext.getResources().getQuantityString( StringUtil.getIcuPluralsString(mContext, locationAppCount,
R.plurals.location_settings_summary_location_on, R.string.location_settings_summary_location_on));
locationAppCount, locationAppCount));
} }
@Test @Test
@@ -89,8 +88,7 @@ public class TopLevelLocationPreferenceControllerTest {
mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle()); mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
mController.setLocationAppCount(locationAppCount); mController.setLocationAppCount(locationAppCount);
assertThat(mController.getSummary()).isEqualTo( assertThat(mController.getSummary()).isEqualTo(
mContext.getResources().getQuantityString( StringUtil.getIcuPluralsString(mContext, locationAppCount,
R.plurals.location_settings_summary_location_on, R.string.location_settings_summary_location_on));
locationAppCount, locationAppCount));
} }
} }

View File

@@ -43,6 +43,7 @@ import androidx.lifecycle.LifecycleOwner;
import com.android.settings.R; import com.android.settings.R;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.utils.StringUtil;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -119,8 +120,8 @@ public class PrintSettingsPreferenceControllerTest {
mController.updateState(mPreference); mController.updateState(mPreference);
assertThat(mPreference.getSummary()) assertThat(mPreference.getSummary())
.isEqualTo(mContext.getResources() .isEqualTo(StringUtil.getIcuPluralsString(mContext, 1,
.getQuantityString(R.plurals.print_jobs_summary, 1, 1)); R.string.print_jobs_summary));
} }
@Test @Test
@@ -135,8 +136,8 @@ public class PrintSettingsPreferenceControllerTest {
mController.updateState(mPreference); mController.updateState(mPreference);
assertThat(mPreference.getSummary()) assertThat(mPreference.getSummary())
.isEqualTo(mContext.getResources() .isEqualTo(StringUtil.getIcuPluralsString(mContext, 2,
.getQuantityString(R.plurals.print_settings_summary, 2, 2)); R.string.print_settings_summary));
// No service // No service
when(mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES)).thenReturn(null); when(mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES)).thenReturn(null);

View File

@@ -41,6 +41,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.Settings; import com.android.settings.Settings;
import com.android.settings.testutils.ResourcesUtils; import com.android.settings.testutils.ResourcesUtils;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.utils.StringUtil;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -244,11 +245,10 @@ public class CombinedBiometricStatusUtilsTest {
public void getSummary_whenNoFaceEnrolled_whenMultipleFingerprints_returnsFingerprints() { public void getSummary_whenNoFaceEnrolled_whenMultipleFingerprints_returnsFingerprints() {
final int enrolledFingerprintsCount = 2; final int enrolledFingerprintsCount = 2;
final int stringResId = ResourcesUtils.getResourcesId( final int stringResId = ResourcesUtils.getResourcesId(
ApplicationProvider.getApplicationContext(), "plurals", ApplicationProvider.getApplicationContext(), "string",
"security_settings_fingerprint_preference_summary"); "security_settings_fingerprint_preference_summary");
final String summary = mApplicationContext.getResources().getQuantityString( final String summary = StringUtil.getIcuPluralsString(mApplicationContext,
stringResId, enrolledFingerprintsCount /* quantity */, enrolledFingerprintsCount, stringResId);
enrolledFingerprintsCount /* formatArgs */);
when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(false); when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(false);
when(mFingerprintManager.getEnrolledFingerprints(anyInt())) when(mFingerprintManager.getEnrolledFingerprints(anyInt()))
@@ -261,11 +261,10 @@ public class CombinedBiometricStatusUtilsTest {
public void getSummary_whenNoFaceEnrolled_whenSingleFingerprints_returnsFingerprints() { public void getSummary_whenNoFaceEnrolled_whenSingleFingerprints_returnsFingerprints() {
final int enrolledFingerprintsCount = 1; final int enrolledFingerprintsCount = 1;
final int stringResId = ResourcesUtils.getResourcesId( final int stringResId = ResourcesUtils.getResourcesId(
ApplicationProvider.getApplicationContext(), "plurals", ApplicationProvider.getApplicationContext(), "string",
"security_settings_fingerprint_preference_summary"); "security_settings_fingerprint_preference_summary");
final String summary = mApplicationContext.getResources().getQuantityString( final String summary = StringUtil.getIcuPluralsString(mApplicationContext,
stringResId, enrolledFingerprintsCount /* quantity */, enrolledFingerprintsCount, stringResId);
enrolledFingerprintsCount /* formatArgs */);
when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(false); when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(false);
when(mFingerprintManager.getEnrolledFingerprints(anyInt())) when(mFingerprintManager.getEnrolledFingerprints(anyInt()))

View File

@@ -37,6 +37,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.testutils.ResourcesUtils; import com.android.settings.testutils.ResourcesUtils;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.utils.StringUtil;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -165,11 +166,10 @@ public class FingerprintStatusUtilsTest {
public void getSummary_whenEnrolled_returnsSummary() { public void getSummary_whenEnrolled_returnsSummary() {
final int enrolledFingerprintsCount = 2; final int enrolledFingerprintsCount = 2;
final int stringResId = ResourcesUtils.getResourcesId( final int stringResId = ResourcesUtils.getResourcesId(
ApplicationProvider.getApplicationContext(), "plurals", ApplicationProvider.getApplicationContext(), "string",
"security_settings_fingerprint_preference_summary"); "security_settings_fingerprint_preference_summary");
final String summary = mApplicationContext.getResources().getQuantityString( final String summary = StringUtil.getIcuPluralsString(mApplicationContext,
stringResId, enrolledFingerprintsCount /* quantity */, enrolledFingerprintsCount, stringResId);
enrolledFingerprintsCount /* formatArgs */);
when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(true); when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(true);
when(mFingerprintManager.getEnrolledFingerprints(anyInt())).thenReturn( when(mFingerprintManager.getEnrolledFingerprints(anyInt())).thenReturn(

View File

@@ -49,6 +49,7 @@ import com.android.settings.Settings;
import com.android.settings.biometrics.face.FaceEnrollIntroductionInternal; import com.android.settings.biometrics.face.FaceEnrollIntroductionInternal;
import com.android.settings.biometrics.fingerprint.FingerprintSettings; import com.android.settings.biometrics.fingerprint.FingerprintSettings;
import com.android.settings.testutils.ResourcesUtils; import com.android.settings.testutils.ResourcesUtils;
import com.android.settingslib.utils.StringUtil;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -568,13 +569,12 @@ public class BiometricsSafetySourceTest {
private void assertSafetySourceDisabledDataSetWithPluralSummary(String expectedTitleResName, private void assertSafetySourceDisabledDataSetWithPluralSummary(String expectedTitleResName,
String expectedSummaryResName, int expectedSummaryQuantity) { String expectedSummaryResName, int expectedSummaryQuantity) {
final int stringResId = ResourcesUtils.getResourcesId( final int stringResId = ResourcesUtils.getResourcesId(
ApplicationProvider.getApplicationContext(), "plurals", ApplicationProvider.getApplicationContext(), "string",
expectedSummaryResName); expectedSummaryResName);
assertSafetySourceDisabledDataSet( assertSafetySourceDisabledDataSet(
ResourcesUtils.getResourcesString(mApplicationContext, expectedTitleResName), ResourcesUtils.getResourcesString(mApplicationContext, expectedTitleResName),
mApplicationContext.getResources().getQuantityString(stringResId, StringUtil.getIcuPluralsString(mApplicationContext,
expectedSummaryQuantity /* quantity */, expectedSummaryQuantity, stringResId)
expectedSummaryQuantity /* formatArgs */)
); );
} }
@@ -582,13 +582,12 @@ public class BiometricsSafetySourceTest {
String expectedSummaryResName, int expectedSummaryQuantity, String expectedSummaryResName, int expectedSummaryQuantity,
String expectedSettingsClassName) { String expectedSettingsClassName) {
final int stringResId = ResourcesUtils.getResourcesId( final int stringResId = ResourcesUtils.getResourcesId(
ApplicationProvider.getApplicationContext(), "plurals", ApplicationProvider.getApplicationContext(), "string",
expectedSummaryResName); expectedSummaryResName);
assertSafetySourceEnabledDataSet( assertSafetySourceEnabledDataSet(
ResourcesUtils.getResourcesString(mApplicationContext, expectedTitleResName), ResourcesUtils.getResourcesString(mApplicationContext, expectedTitleResName),
mApplicationContext.getResources().getQuantityString(stringResId, StringUtil.getIcuPluralsString(mApplicationContext,
expectedSummaryQuantity /* quantity */, expectedSummaryQuantity, stringResId),
expectedSummaryQuantity /* formatArgs */),
expectedSettingsClassName expectedSettingsClassName
); );
} }