Plurals cleanup in packages/apps/Contacts

Fixes: 199230230
Test: manual

Change-Id: I6abb39c31fff8a25b38b820f5544eaf8a6ed8c53
diff --git a/lint-baseline.xml b/lint-baseline.xml
index 764546f..659b24d 100644
--- a/lint-baseline.xml
+++ b/lint-baseline.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="" dependencies="true" name="" variant="all" version="7.1.0-dev">
 
     <issue
         id="NewApi"
-        message="Call requires API level 31 (current min is 21): `android.provider.ContactsContract.SimContacts#getSimAccounts`"
+        message="Call requires API level S (current min is 21): `android.provider.ContactsContract.SimContacts#getSimAccounts`"
         errorLine1="                        ContactsContract.SimContacts.getSimAccounts(mContext.getContentResolver());"
         errorLine2="                                                     ~~~~~~~~~~~~~~">
         <location
@@ -14,7 +14,7 @@
 
     <issue
         id="NewApi"
-        message="Call requires API level 31 (current min is 21): `android.provider.ContactsContract.SimAccount#getAccountName`"
+        message="Call requires API level S (current min is 21): `android.provider.ContactsContract.SimAccount#getAccountName`"
         errorLine1="                    simAccountWithDataSets.add(new AccountWithDataSet(simAccount.getAccountName(),"
         errorLine2="                                                                                 ~~~~~~~~~~~~~~">
         <location
@@ -25,7 +25,7 @@
 
     <issue
         id="NewApi"
-        message="Call requires API level 31 (current min is 21): `android.provider.ContactsContract.SimAccount#getAccountType`"
+        message="Call requires API level S (current min is 21): `android.provider.ContactsContract.SimAccount#getAccountType`"
         errorLine1="                            simAccount.getAccountType(), null));"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
@@ -179,6 +179,17 @@
 
     <issue
         id="NewApi"
+        message="Call requires API level 24 (current min is 21): `new android.icu.text.MessageFormat`"
+        errorLine1="                MessageFormat msgFormat = new MessageFormat("
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/Contacts/src/com/android/contacts/interactions/ContactDeletionInteraction.java"
+            line="360"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
         message="Call requires API level 23 (current min is 21): `android.widget.QuickContactBadge#setPrioritizedMimeType`"
         errorLine1="            quickContact.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~">
@@ -190,7 +201,29 @@
 
     <issue
         id="NewApi"
-        message="Call requires API level 31 (current min is 21): `android.provider.ContactsContract.SimContacts#getSimAccounts`"
+        message="Call requires API level 24 (current min is 21): `new android.icu.text.MessageFormat`"
+        errorLine1="            MessageFormat msgFormat = new MessageFormat("
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/Contacts/src/com/android/contacts/ContactSaveService.java"
+            line="1221"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `new android.icu.text.MessageFormat`"
+        errorLine1="            MessageFormat msgFormat = new MessageFormat("
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/Contacts/src/com/android/contacts/list/DefaultContactBrowseListFragment.java"
+            line="1129"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level S (current min is 21): `android.provider.ContactsContract.SimContacts#getSimAccounts`"
         errorLine1="                    ContactsContract.SimContacts.getSimAccounts("
         errorLine2="                                                 ~~~~~~~~~~~~~~">
         <location
@@ -201,7 +234,7 @@
 
     <issue
         id="NewApi"
-        message="Call requires API level 31 (current min is 21): `android.provider.ContactsContract.SimAccount#getAccountType`"
+        message="Call requires API level S (current min is 21): `android.provider.ContactsContract.SimAccount#getAccountType`"
         errorLine1="                        simAccount.getAccountType())) {"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
@@ -223,13 +256,13 @@
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 21): `android.provider.BlockedNumberContract#canCurrentUserBlockNumbers`"
-        errorLine1="                &amp;&amp; BlockedNumberContract.canCurrentUserBlockNumbers(getContext());"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        message="Call requires API level 24 (current min is 21): `new android.icu.text.MessageFormat`"
+        errorLine1="                MessageFormat msgFormat = new MessageFormat("
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/Contacts/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java"
-            line="300"
-            column="42"/>
+            line="436"
+            column="43"/>
     </issue>
 
     <issue
@@ -245,6 +278,28 @@
 
     <issue
         id="NewApi"
+        message="Call requires API level 24 (current min is 21): `new android.icu.text.MessageFormat`"
+        errorLine1="                    MessageFormat msgFormat = new MessageFormat("
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/Contacts/src/com/android/contacts/interactions/ImportDialogFragment.java"
+            line="178"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `new android.icu.text.MessageFormat`"
+        errorLine1="                    MessageFormat msgFormat = new MessageFormat("
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/Contacts/src/com/android/contacts/interactions/ImportDialogFragment.java"
+            line="187"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NewApi"
         message="Call requires API level 26 (current min is 21): `android.graphics.drawable.AdaptiveIconDrawable#getExtraInsetFraction`"
         errorLine1="        return 1 / (1 + (2 * AdaptiveIconDrawable.getExtraInsetFraction()));"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
@@ -256,6 +311,28 @@
 
     <issue
         id="NewApi"
+        message="Call requires API level 24 (current min is 21): `new android.icu.text.MessageFormat`"
+        errorLine1="            MessageFormat msgFormat = new MessageFormat("
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/Contacts/src/com/android/contacts/list/MultiSelectContactsListFragment.java"
+            line="357"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `new android.icu.text.MessageFormat`"
+        errorLine1="            MessageFormat msgFormat = new MessageFormat("
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/Contacts/src/com/android/contacts/list/MultiSelectContactsListFragment.java"
+            line="362"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
         message="Call requires API level 23 (current min is 21): `android.telecom.PhoneAccount#getIcon`"
         errorLine1="            return phoneAccount.getIcon();"
         errorLine2="                                ~~~~~~~">
@@ -360,7 +437,7 @@
         errorLine2="                                                                          ~~~~~~~~~~~">
         <location
             file="packages/apps/Contacts/src/com/android/contacts/quickcontact/QuickContactActivity.java"
-            line="652"
+            line="654"
             column="75"/>
     </issue>
 
@@ -371,12 +448,23 @@
         errorLine2="                        ~~~~~~~~~~~">
         <location
             file="packages/apps/Contacts/src/com/android/contacts/quickcontact/QuickContactActivity.java"
-            line="653"
+            line="655"
             column="25"/>
     </issue>
 
     <issue
         id="NewApi"
+        message="Call requires API level 24 (current min is 21): `new android.icu.text.MessageFormat`"
+        errorLine1="        MessageFormat msgFormat = new MessageFormat("
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/Contacts/src/com/android/contacts/quickcontact/QuickContactActivity.java"
+            line="2226"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
         message="Class requires API level 23 (current min is 21): `android.telecom.PhoneAccountHandle`"
         errorLine1="                        (PhoneAccountHandle) resultData.getParcelable("
         errorLine2="                         ~~~~~~~~~~~~~~~~~~">
@@ -454,7 +542,7 @@
 
     <issue
         id="NewApi"
-        message="Call requires API level R (current min is 21): `android.telephony.TelephonyManager#getSubscriptionId`"
+        message="Call requires API level 30 (current min is 21): `android.telephony.TelephonyManager#getSubscriptionId`"
         errorLine1="            return new SimCard(telephony.getSimSerialNumber(), telephony.getSubscriptionId(),"
         errorLine2="                                                                         ~~~~~~~~~~~~~~~~~">
         <location
@@ -465,7 +553,7 @@
 
     <issue
         id="NewApi"
-        message="Call requires API level 31 (current min is 21): `android.provider.SimPhonebookContract.SimRecords#getContentUri`"
+        message="Call requires API level S (current min is 21): `android.provider.SimPhonebookContract.SimRecords#getContentUri`"
         errorLine1="                SimRecords.getContentUri("
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
diff --git a/res/values/strings.xml b/res/values/strings.xml
index faa1d96..d87be0b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -169,22 +169,22 @@
     <string name="contacts_deleted_many_named_toast"><xliff:g id="name">%1$s</xliff:g>, <xliff:g id="name">%2$s</xliff:g>, <xliff:g id="name">%3$s</xliff:g>\u2026 deleted</string>
 
     <!-- Toast shown after contacts that the user has selected are deleted by a user action. [CHAR LIMIT=30] -->
-    <plurals name="contacts_deleted_toast">
-        <item quantity="one">Contact deleted</item>
-        <item quantity="other">Contacts deleted</item>
-    </plurals>
+    <string name="contacts_deleted_toast"> {count, plural,
+        =1    {Contact deleted}
+        other {Contacts deleted}
+    }</string>
 
     <!-- List header indicating the number of contacts in the list [CHAR LIMIT=30] -->
-    <plurals name="contacts_count">
-        <item quantity="one"><xliff:g id="count">%d</xliff:g> contact</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> contacts</item>
-    </plurals>
+    <string name="contacts_count"> {count, plural,
+        =1    {# contact}
+        other {# contacts}
+    }</string>
 
     <!-- List header indicating the number of contacts and account name in the list [CHAR LIMIT=30] -->
-    <plurals name="contacts_count_with_account">
-        <item quantity="one"><xliff:g id="count">%1$d</xliff:g> contact · <xliff:g id="account">%2$s</xliff:g></item>
-        <item quantity="other"><xliff:g id="count">%1$d</xliff:g> contacts · <xliff:g id="account">%2$s</xliff:g></item>
-    </plurals>
+    <string name="contacts_count_with_account"> {count, plural,
+        =1    {# contact · {account}}
+        other {# contacts · {account}}
+    }</string>
 
     <!-- Activity title indicating contacts are from a Google account [CHAR LIMIT=30] -->
     <string name="title_from_google">From Google</string>
@@ -373,10 +373,10 @@
     <string name="menu_add_contacts">Add</string>
 
     <!-- Dialog title when picking the application to share one or multiple contacts with. [CHAR LIMIT=40] -->
-    <plurals name="title_share_via">
-        <item quantity="one">Share contact via</item>
-        <item quantity="other">Share contacts via</item>
-    </plurals>
+    <string name="title_share_via"> {count, plural,
+        =1    {Share contact via}
+        other {Share contacts via}
+    }</string>
 
     <!-- Title for the disambiguation dialog that requests the user choose an account for the new label to be created under [CHAR LIMIT=NONE] -->
     <string name="dialog_new_group_account">Choose account</string>
@@ -1101,21 +1101,19 @@
     <!-- Secondary string showing the number of SIM contacts for the SIM card on the action for
          importing from that SIM. Only shown if there is no phone number available for the SIM card
          [CHAR LIMIT=25] -->
-    <plurals name="import_from_sim_secondary_contact_count_fmt">
-        <item quantity="one">1 contact</item>
-        <item quantity="other">%1$d contacts</item>
-    </plurals>
+    <string name="import_from_sim_secondary_contact_count_fmt"> {count, plural,
+        =1    {# contact}
+        other {# contacts}
+    }</string>
 
     <!-- Secondary string showing the number of SIM contacts and phone number for the SIM card
          on the action for importing that SIM. Note that the bullet character is purely a visual
          separator between the contact count and phone number; it has no grammatical meaning in
          this string [CHAR LIMIT=35]-->
-    <plurals name="import_from_sim_secondary_template">
-        <item quantity="one"><xliff:g id="count">^1</xliff:g> contact • <xliff:g id="phone_number">^2</xliff:g></item>
-        <item quantity="other"><xliff:g id="count">^1</xliff:g> contacts • <xliff:g id="phone_number">^2</xliff:g></item>
-    </plurals>
-
-
+    <string name="import_from_sim_secondary_template"> {count, plural,
+        =1    {# contact • <xliff:g id="phone_number">^1</xliff:g>}
+        other {# contacts • <xliff:g id="phone_number">^1</xliff:g>}
+    }</string>
 
     <!-- Action string for selecting a .vcf file to import contacts from [CHAR LIMIT=30] -->
     <string name="import_from_vcf_file">.vcf file</string>
@@ -1484,10 +1482,10 @@
     <string name="sim_import_contact_exists_toast">Contact already exists in your list</string>
 
     <!-- Toast shown on settings screen when importing from SIM completes successfully -->
-    <plurals name="sim_import_success_toast_fmt">
-        <item quantity="one">1 SIM contact imported</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> SIM contacts imported</item>
-    </plurals>
+    <string name="sim_import_success_toast_fmt"> {count, plural,
+        =1    {# SIM contact imported}
+        other {# SIM contacts imported}
+    }</string>
 
     <!-- Toast shown on settings screen when importing from SIM completes with an error -->
     <string name="sim_import_failed_toast">Failed to import SIM contacts</string>
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 {