Plurals cleanup in packages/apps/Contacts
Fixes: 199230230
Test: manual
Change-Id: I6abb39c31fff8a25b38b820f5544eaf8a6ed8c53
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 9f25726..30e4f82 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -31,6 +31,7 @@
import android.content.OperationApplicationException;
import android.database.Cursor;
import android.database.DatabaseUtils;
+import android.icu.text.MessageFormat;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -75,8 +76,11 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
+import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -1214,8 +1218,12 @@
ContactSaveService.EXTRA_DISPLAY_NAME_ARRAY);
final String deleteToastMessage;
if (contactIds.length != names.length || names.length == 0) {
- deleteToastMessage = getResources().getQuantityString(
- R.plurals.contacts_deleted_toast, contactIds.length);
+ MessageFormat msgFormat = new MessageFormat(
+ getResources().getString(R.string.contacts_deleted_toast),
+ Locale.getDefault());
+ Map<String, Object> arguments = new HashMap<>();
+ arguments.put("count", contactIds.length);
+ deleteToastMessage = msgFormat.format(arguments);
} else if (names.length == 1) {
deleteToastMessage = getResources().getString(
R.string.contacts_deleted_one_named_toast, (Object[]) names);
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index 240588b..7438f0d 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -28,6 +28,7 @@
import android.content.DialogInterface.OnDismissListener;
import android.content.Loader;
import android.database.Cursor;
+import android.icu.text.MessageFormat;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts;
@@ -46,7 +47,10 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Sets;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Locale;
+import java.util.Map;
/**
* An interaction invoked to delete a contact.
@@ -353,8 +357,12 @@
final String name = ContactDisplayUtils.getPreferredDisplayName(mDisplayName,
mDisplayNameAlt, new ContactsPreferences(mContext));
if (TextUtils.isEmpty(name)) {
- deleteToastMessage = getResources().getQuantityString(
- R.plurals.contacts_deleted_toast, /* quantity */ 1);
+ MessageFormat msgFormat = new MessageFormat(
+ getResources().getString(R.string.contacts_deleted_toast),
+ Locale.getDefault());
+ Map<String, Object> arguments = new HashMap<>();
+ arguments.put("count", 1);
+ deleteToastMessage = msgFormat.format(arguments);
} else {
deleteToastMessage = getResources().getString(
R.string.contacts_deleted_one_named_toast, name);
diff --git a/src/com/android/contacts/interactions/ImportDialogFragment.java b/src/com/android/contacts/interactions/ImportDialogFragment.java
index 41b1c71..693536a 100644
--- a/src/com/android/contacts/interactions/ImportDialogFragment.java
+++ b/src/com/android/contacts/interactions/ImportDialogFragment.java
@@ -25,6 +25,7 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
+import android.icu.text.MessageFormat;
import android.os.Bundle;
import androidx.core.text.BidiFormatter;
import androidx.core.text.TextDirectionHeuristicsCompat;
@@ -50,7 +51,10 @@
import com.android.contacts.util.AccountSelectionUtil;
import com.google.common.util.concurrent.Futures;
+import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
+import java.util.Map;
import java.util.concurrent.Future;
/**
@@ -171,17 +175,22 @@
if (count != -1 && phone != null) {
// We use a template instead of format string so that the TTS span is preserved
- final CharSequence template = getResources()
- .getQuantityString(R.plurals.import_from_sim_secondary_template, count);
- return TextUtils.expandTemplate(template, String.valueOf(count), phone);
+ MessageFormat msgFormat = new MessageFormat(
+ getResources().getString(R.string.import_from_sim_secondary_template),
+ Locale.getDefault());
+ Map<String, Object> arguments = new HashMap<>();
+ arguments.put("count", count);
+ return TextUtils.expandTemplate(msgFormat.format(arguments), phone);
} else if (phone != null) {
return phone;
} else if (count != -1) {
- // count != -1
- return getResources()
- .getQuantityString(
- R.plurals.import_from_sim_secondary_contact_count_fmt, count,
- count);
+ MessageFormat msgFormat = new MessageFormat(
+ getResources()
+ .getString(R.string.import_from_sim_secondary_contact_count_fmt),
+ Locale.getDefault());
+ Map<String, Object> arguments = new HashMap<>();
+ arguments.put("count", count);
+ return msgFormat.format(arguments);
} else {
return null;
}
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 9851d2b..2aacabe 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -31,6 +31,7 @@
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
+import android.icu.text.MessageFormat;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -80,8 +81,10 @@
import com.android.contactsbind.experiments.Flags;
import com.google.common.util.concurrent.Futures;
+import java.util.HashMap;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import java.util.concurrent.Future;
/**
@@ -1123,8 +1126,12 @@
intent.setType(ContactsContract.Contacts.CONTENT_VCARD_TYPE);
intent.putExtra(Intent.EXTRA_STREAM, uri);
try {
- startActivityForResult(Intent.createChooser(intent, getResources().getQuantityString(
- R.plurals.title_share_via,/* quantity */ getSelectedContactIds().size()))
+ MessageFormat msgFormat = new MessageFormat(
+ getResources().getString(R.string.title_share_via),
+ Locale.getDefault());
+ Map<String, Object> arguments = new HashMap<>();
+ arguments.put("count", getSelectedContactIds().size());
+ startActivityForResult(Intent.createChooser(intent, msgFormat.format(arguments))
, ACTIVITY_REQUEST_CODE_SHARE);
} catch (final ActivityNotFoundException ex) {
Toast.makeText(getContext(), R.string.share_error, Toast.LENGTH_SHORT).show();
diff --git a/src/com/android/contacts/list/MultiSelectContactsListFragment.java b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
index 5e7f9e8..83b1ec9 100644
--- a/src/com/android/contacts/list/MultiSelectContactsListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
+import android.icu.text.MessageFormat;
import android.os.Bundle;
import android.provider.ContactsContract;
import androidx.core.view.ViewCompat;
@@ -46,7 +47,10 @@
import com.android.contacts.model.account.GoogleAccountType;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
+import java.util.Map;
import java.util.TreeSet;
/**
@@ -345,12 +349,21 @@
// Set text of count of contacts and account name
final TextView accountFilterHeader = (TextView) accountFilterContainer.findViewById(
R.id.account_filter_header);
- final String headerText = shouldShowAccountName(accountType)
- ? String.format(context.getResources().getQuantityString(
- R.plurals.contacts_count_with_account, memberCount),
- memberCount, accountWithDataSet.name)
- : context.getResources().getQuantityString(
- R.plurals.contacts_count, memberCount, memberCount);
+ String headerText;
+ Map<String, Object> arguments = new HashMap<>();
+ arguments.put("count", memberCount);
+ if (shouldShowAccountName(accountType)) {
+ arguments.put("account", accountWithDataSet.name);
+ MessageFormat msgFormat = new MessageFormat(
+ getResources().getString(R.string.contacts_count_with_account),
+ Locale.getDefault());
+ headerText = msgFormat.format(arguments);
+ } else {
+ MessageFormat msgFormat = new MessageFormat(
+ getResources().getString(R.string.contacts_count),
+ Locale.getDefault());
+ headerText = msgFormat.format(arguments);
+ }
accountFilterHeader.setText(headerText);
accountFilterHeader.setAllCaps(false);
diff --git a/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
index 69abf05..fd358aa 100644
--- a/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
+++ b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
@@ -27,6 +27,7 @@
import android.content.Loader;
import android.content.res.Resources;
import android.database.Cursor;
+import android.icu.text.MessageFormat;
import android.net.Uri;
import android.os.Bundle;
import android.preference.Preference;
@@ -63,7 +64,10 @@
import com.android.contacts.util.ImplicitIntentsUtil;
import com.android.contactsbind.HelpUtils;
+import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
+import java.util.Map;
/**
* This fragment shows the preferences for "display options"
@@ -429,8 +433,12 @@
SimImportService.RESULT_UNKNOWN);
final int count = intent.getIntExtra(SimImportService.EXTRA_RESULT_COUNT, -1);
if (code == SimImportService.RESULT_SUCCESS && count > 0) {
- Snackbar.make(mRootView, getResources().getQuantityString(
- R.plurals.sim_import_success_toast_fmt, count, count),
+ MessageFormat msgFormat = new MessageFormat(
+ getResources().getString(R.string.sim_import_success_toast_fmt),
+ Locale.getDefault());
+ Map<String, Object> arguments = new HashMap<>();
+ arguments.put("count", count);
+ Snackbar.make(mRootView, msgFormat.format(arguments),
Snackbar.LENGTH_LONG).show();
} else if (code == SimImportService.RESULT_FAILURE) {
Snackbar.make(mRootView, R.string.sim_import_failed_toast,
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 53dbf15..5b144e1 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -45,6 +45,7 @@
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.icu.text.MessageFormat;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.AsyncTask;
@@ -175,6 +176,7 @@
import java.util.Date;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
/**
@@ -2221,8 +2223,12 @@
intent.putExtra(Intent.EXTRA_STREAM, shareUri);
// Launch chooser to share contact via
- final CharSequence chooseTitle = getResources().getQuantityString(
- R.plurals.title_share_via, /* quantity */ 1);
+ MessageFormat msgFormat = new MessageFormat(
+ getResources().getString(R.string.title_share_via),
+ Locale.getDefault());
+ Map<String, Object> arguments = new HashMap<>();
+ arguments.put("count", 1);
+ CharSequence chooseTitle = msgFormat.format(arguments);
final Intent chooseIntent = Intent.createChooser(intent, chooseTitle);
try {