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 {
