[automerger skipped] Merge "Merge stage-aosp-master to aosp-master - DO NOT MERGE" am: 6b25dfb882 am: 10b124b4c4 -s ours
am skip reason: subject contains skip directive

Change-Id: Ic6852aafdd03528e5730067aa62ccf68df878075
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index b40d2fa..c393f07 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -127,7 +127,7 @@
     <string name="groupDeletedToast" msgid="7774363940327847515">"تم حذف التصنيف"</string>
     <string name="groupCreatedToast" msgid="1685148819468403239">"تم إنشاء التصنيف"</string>
     <string name="groupCreateFailedToast" msgid="1836425392831964024">"يتعذر إنشاء تصنيف"</string>
-    <string name="groupUpdatedToast" msgid="3381549467345607379">"تم إعادة تحميل التصنيف"</string>
+    <string name="groupUpdatedToast" msgid="3381549467345607379">"تمت إعادة تحميل التصنيف"</string>
     <string name="groupMembersRemovedToast" msgid="8019566066934628011">"تمت الإزالة من التصنيف"</string>
     <string name="groupMembersAddedToast" msgid="1939782548900157287">"تمت الإضافة إلى التصنيف"</string>
     <string name="groupSavedErrorToast" msgid="8456912862816145318">"لا يمكن حفظ التغييرات على التصنيف"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index a70d500..480f10a 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -28,10 +28,10 @@
     <string name="groupMemberPickerActivityTitle" msgid="8745419913947478380">"Тандоо"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="4098233078586958762">"Жаңы байланыш түзүү"</string>
     <string name="searchHint" msgid="1487501532610025473">"Байланыштарды издөө"</string>
-    <string name="menu_addStar" msgid="4903812703386825130">"Сүйүктүүлөргө кошуу"</string>
+    <string name="menu_addStar" msgid="4903812703386825130">"Тандалмаларга кошуу"</string>
     <string name="menu_removeStar" msgid="3707373931808303701">"Сүйүктүүлөрдөн алып салуу"</string>
     <string name="description_action_menu_remove_star" msgid="4044390281910122890">"Сүйүктүүлөрдөн чыгарылды"</string>
-    <string name="description_action_menu_add_star" msgid="7316521132809388851">"Сүйүктүүлөргө кошулду"</string>
+    <string name="description_action_menu_add_star" msgid="7316521132809388851">"Тандалмаларга кошулду"</string>
     <string name="menu_editContact" msgid="5039663761025630208">"Өзгөртүү"</string>
     <string name="menu_deleteContact" msgid="15161764025276217">"Жок кылуу"</string>
     <string name="menu_change_photo" msgid="4911246106907208055">"Сүрөттү өзгөртүү"</string>
@@ -47,7 +47,7 @@
     <string name="menu_new_group_action_bar" msgid="1670312283925872483">"Энбелги түзүү"</string>
     <string name="splitConfirmation" msgid="4750158900636307469">"Бул байланыш ажыратылсынбы?"</string>
     <string name="splitConfirmation_positive_button" msgid="3109235536045409854">"Ажыратуу"</string>
-    <string name="splitConfirmationWithPendingChanges" msgid="8617395780141069527">"Сиз киргизген өзгөртүүлөрдү сактап, бул байланышты бир нече байланышка ажыраткыңыз келеби?"</string>
+    <string name="splitConfirmationWithPendingChanges" msgid="8617395780141069527">"Сиз киргизген өзгөртүүлөрдү сактап, бул байланышты бир нече байланышка ажыратасызбы?"</string>
     <string name="splitConfirmationWithPendingChanges_positive_button" msgid="131293000921403021">"Сактоо жана ажыратуу"</string>
     <string name="joinConfirmation" msgid="1245184431169363397">"Сиз киргизген өзгөртүүлөрдү сактап, тандалган байланышка бириктиргиңиз келеби?"</string>
     <string name="joinConfirmation_positive_button" msgid="8300713422725610480">"Сактоо жана бириктирүү"</string>
@@ -62,12 +62,12 @@
     <string name="separatorJoinAggregateAll" msgid="5378346138684490784">"Бардык байланыштар"</string>
     <string name="contactsJoinedNamedMessage" msgid="8732933595873458166">"<xliff:g id="NAME">%s</xliff:g> байланыштырылды"</string>
     <string name="contactsJoinedMessage" msgid="7605856897709458707">"Байланыштар шилтемеленди"</string>
-    <string name="contacts_deleted_one_named_toast" msgid="2707266264779781309">"<xliff:g id="NAME">%1$s</xliff:g> жок кылынды"</string>
-    <string name="contacts_deleted_two_named_toast" msgid="6908761620236434380">"<xliff:g id="NAME_0">%1$s</xliff:g> жана <xliff:g id="NAME_1">%2$s</xliff:g> жок кылынды"</string>
-    <string name="contacts_deleted_many_named_toast" msgid="4879197068250337298">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… жок кылынды"</string>
+    <string name="contacts_deleted_one_named_toast" msgid="2707266264779781309">"<xliff:g id="NAME">%1$s</xliff:g> өчүрүлдү"</string>
+    <string name="contacts_deleted_two_named_toast" msgid="6908761620236434380">"<xliff:g id="NAME_0">%1$s</xliff:g> жана <xliff:g id="NAME_1">%2$s</xliff:g> өчүрүлдү"</string>
+    <string name="contacts_deleted_many_named_toast" msgid="4879197068250337298">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… өчүрүлдү"</string>
     <plurals name="contacts_deleted_toast" formatted="false" msgid="198534700386623765">
-      <item quantity="other">Байланыштар жок кылынды</item>
-      <item quantity="one">Байланыш жок кылынды</item>
+      <item quantity="other">Байланыштар өчүрүлдү</item>
+      <item quantity="one">Байланыш өчүрүлдү</item>
     </plurals>
     <plurals name="contacts_count" formatted="false" msgid="8804860300387044572">
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> байланыш</item>
@@ -89,7 +89,7 @@
     <string name="batch_delete_confirmation" msgid="4149615167210863403">"Тандалган байланыштар жок кылынсынбы?"</string>
     <string name="batch_delete_read_only_contact_confirmation" msgid="381691735715182700">"Окуу үчүн гана арналган аккаунтуңуздан байланыштарды жок кылуу мүмкүн эмес, бирок аларды жашырып койсо болот."</string>
     <string name="batch_delete_multiple_accounts_confirmation" msgid="4547718538924570984">"Жок кылына турган байланыштарда бир нече аккаунтунун чоо-жайы бар. Окуу үчүн гана арналган каттоо эсептеринин чоо-жайы жашырылып, жок кылынбайт."</string>
-    <string name="multipleContactDeleteConfirmation" msgid="2970218685653877287">"Бул байланыш жок кылынса, анын бир нече аккаунтундагы чоо-жайы өчүп калат."</string>
+    <string name="multipleContactDeleteConfirmation" msgid="2970218685653877287">"Бул байланыш өчүрүлсө, анын бир нече аккаунтундагы чоо-жайы өчүп калат."</string>
     <string name="deleteConfirmation" msgid="3727809366015979585">"Бул байланыш жок кылынсынбы?"</string>
     <string name="deleteConfirmation_positive_button" msgid="1604511403421785160">"Жок кылуу"</string>
     <string name="invalidContactMessage" msgid="6204402264821083362">"Мындай байланыш жок."</string>
@@ -101,7 +101,7 @@
     <string name="removePhoto" msgid="1190099414600730001">"Сүрөттү алып салуу"</string>
     <string name="noContacts" msgid="3030512741779213810">"Байланыштар тизмеңиз бош"</string>
     <string name="emptyGroup" msgid="8598261660865081152">"Бул энбелги коюлган бир дагы байланыш жок"</string>
-    <string name="emptyAccount" msgid="7450843210977018582">"Бул каттоо эсебинде эч кандай байланыш жок"</string>
+    <string name="emptyAccount" msgid="7450843210977018582">"Бул аккаунтта эч кандай байланыш жок"</string>
     <string name="emptyMainList" msgid="3266182207039677163">"Байланыштар тизмеңиз бош"</string>
     <string name="contactSavedNamedToast" msgid="3067050290584834386">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> сакталды"</string>
     <string name="contactSavedToast" msgid="4370392215196995301">"Байланыш сакталды"</string>
@@ -112,11 +112,11 @@
     <string name="contactGenericErrorToast" msgid="5689457475864876100">"Байланышты сактоодогу ката."</string>
     <string name="contactPhotoSavedErrorToast" msgid="8568460180541397272">"Байланыштын сүрөт өзгөрүүлөрү сакталган жок."</string>
     <string name="groupLoadErrorToast" msgid="4141488223976370583">"Энбелги жүктөлгөн жок"</string>
-    <string name="groupDeletedToast" msgid="7774363940327847515">"Энбелги жок кылынды"</string>
+    <string name="groupDeletedToast" msgid="7774363940327847515">"Энбелги өчүрүлдү"</string>
     <string name="groupCreatedToast" msgid="1685148819468403239">"Энбелги түзүлдү"</string>
     <string name="groupCreateFailedToast" msgid="1836425392831964024">"Энбелги түзүлгөн жок"</string>
-    <string name="groupUpdatedToast" msgid="3381549467345607379">"Энбелги жаңыртылды"</string>
-    <string name="groupMembersRemovedToast" msgid="8019566066934628011">"Энбелгиден алынып салынды"</string>
+    <string name="groupUpdatedToast" msgid="3381549467345607379">"Энбелги жаңырды"</string>
+    <string name="groupMembersRemovedToast" msgid="8019566066934628011">"Энбелгиден өчүрүлдү"</string>
     <string name="groupMembersAddedToast" msgid="1939782548900157287">"Кошулду"</string>
     <string name="groupSavedErrorToast" msgid="8456912862816145318">"Энбелгинин өзгөрүүлөрүн сактай алган жок."</string>
     <string name="groupExistsErrorMessage" msgid="912222525098791136">"Мындай энбелги бар"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 844900f..6598310 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -97,7 +97,7 @@
     <string name="createContactShortcutSuccessful" msgid="6980032407920515698">"<xliff:g id="NAME">%s</xliff:g> என்ற தொடர்பு முகப்புத் திரையில் சேர்க்கப்பட்டது."</string>
     <string name="photoPickerNotFoundText" msgid="6535222297923110991">"சாதனத்தில் படங்கள் எதுவுமில்லை."</string>
     <string name="attach_photo_dialog_title" msgid="7948754072673745235">"தொடர்பின் படம்"</string>
-    <string name="customLabelPickerTitle" msgid="816694850254307154">"தனிப்பயன் லேபிள் பெயர்"</string>
+    <string name="customLabelPickerTitle" msgid="816694850254307154">"பிரத்தியேக லேபிள் பெயர்"</string>
     <string name="removePhoto" msgid="1190099414600730001">"படத்தை அகற்று"</string>
     <string name="noContacts" msgid="3030512741779213810">"தொடர்புகள் பட்டியல் காலியாக உள்ளது"</string>
     <string name="emptyGroup" msgid="8598261660865081152">"இந்த லேபிளைக் கொண்ட தொடர்புகள் இல்லை"</string>
@@ -326,7 +326,7 @@
     <string name="ghostData_company" msgid="3873500610390675876">"நிறுவனம்"</string>
     <string name="ghostData_title" msgid="8584897460662904533">"தலைப்பு"</string>
     <string name="label_notes" msgid="7134226125644463585">"குறிப்புகள்"</string>
-    <string name="label_custom_field" msgid="4160584225306364924">"தனிப்பயன்"</string>
+    <string name="label_custom_field" msgid="4160584225306364924">"பிரத்தியேகம்"</string>
     <string name="label_sip_address" msgid="8876347942587537552">"SIP"</string>
     <string name="websiteLabelsGroup" msgid="114754928100220315">"இணையதளம்"</string>
     <string name="groupsLabel" msgid="5622154133880646122">"லேபிள்கள்"</string>
@@ -365,7 +365,7 @@
     <string name="announce_collapsed_fields" msgid="7611318715383228182">"சுருக்கப்பட்டது"</string>
     <string name="list_filter_all_accounts" msgid="6173785387972096770">"எல்லா தொடர்புகளும்"</string>
     <string name="list_filter_all_starred" msgid="2582865760150432568">"நட்சத்திரமிட்டவை"</string>
-    <string name="list_filter_customize" msgid="2368900508906139537">"தனிப்பயனாக்கு"</string>
+    <string name="list_filter_customize" msgid="2368900508906139537">"பிரத்தியேகமாக்கு"</string>
     <string name="list_filter_single" msgid="6003845379327432129">"தொடர்பு"</string>
     <string name="display_ungrouped" msgid="4823012484407759332">"பிற எல்லா தொடர்புகளும்"</string>
     <string name="display_all_contacts" msgid="1281067776483704512">"எல்லா தொடர்புகளும்"</string>
@@ -374,7 +374,7 @@
     <string name="display_more_groups" msgid="8398232980355188133">"மேலும் குழுக்கள்…"</string>
     <string name="display_warn_remove_ungrouped" msgid="522866344738506017">"ஒத்திசைவிலிருந்து \"<xliff:g id="GROUP">%s</xliff:g>\" ஐ அகற்றுவது, ஒத்திசைவிலிருந்து குழுவாக்கப்படாத எல்லா தொடர்புகளையும் அகற்றும்."</string>
     <string name="savingDisplayGroups" msgid="6779839417901711381">"காட்சி விருப்பங்களைச் சேமிக்கிறது…"</string>
-    <string name="listCustomView" msgid="5782275477737032610">"தனிப்பயனாக்கிய காட்சி"</string>
+    <string name="listCustomView" msgid="5782275477737032610">"பிரத்தியேகப்படுத்தப்பட்ட காட்சி"</string>
     <string name="dialog_new_contact_account" msgid="5652018124788855057">"இறக்கிய தொடர்புகளை இதில் சேமிக்கவும்:"</string>
     <string name="import_from_sim" msgid="7825280799813847991">"சிம் கார்டு"</string>
     <string name="import_from_sim_summary_fmt" msgid="4234771828377985321">"<xliff:g id="SIM_NAME">%1$s</xliff:g> சிம்"</string>
diff --git a/src/com/android/contacts/drawer/DrawerAdapter.java b/src/com/android/contacts/drawer/DrawerAdapter.java
index 0c8423a..b5a1ea7 100644
--- a/src/com/android/contacts/drawer/DrawerAdapter.java
+++ b/src/com/android/contacts/drawer/DrawerAdapter.java
@@ -271,16 +271,16 @@
             result.setId(item.id);
         }
         final ContactListFilter account = item.account;
+        final AccountDisplayInfo displayableAccount =
+                mAccountDisplayFactory.getAccountDisplayInfoFor(item.account);
         final TextView textView = ((TextView) result.findViewById(R.id.title));
-        textView.setText(account.accountName);
+        textView.setText(displayableAccount.getNameLabel());
         final boolean activated = account.equals(mSelectedAccount)
                 && mSelectedView == ContactsView.ACCOUNT_VIEW;
         textView.setTextAppearance(mActivity, activated
                 ? TYPEFACE_STYLE_ACTIVATE : TYPEFACE_STYLE_INACTIVE);
 
         final ImageView icon = (ImageView) result.findViewById(R.id.icon);
-        final AccountDisplayInfo displayableAccount =
-                mAccountDisplayFactory.getAccountDisplayInfoFor(item.account);
         icon.setScaleType(ImageView.ScaleType.FIT_CENTER);
         icon.setImageDrawable(displayableAccount.getIcon());
 
diff --git a/src/com/android/contacts/model/AccountTypeManager.java b/src/com/android/contacts/model/AccountTypeManager.java
index 34f9cb2..196e67f 100644
--- a/src/com/android/contacts/model/AccountTypeManager.java
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -405,28 +405,26 @@
 
         ContentResolver.addStatusChangeListener(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS, this);
 
-        if (Flags.getInstance().getBoolean(Experiments.CP2_DEVICE_ACCOUNT_DETECTION_ENABLED)) {
-            // Observe changes to RAW_CONTACTS so that we will update the list of "Device" accounts
-            // if a new device contact is added.
-            mContext.getContentResolver().registerContentObserver(
-                    ContactsContract.RawContacts.CONTENT_URI, /* notifyDescendents */ true,
-                    new ContentObserver(mMainThreadHandler) {
-                        @Override
-                        public boolean deliverSelfNotifications() {
-                            return true;
-                        }
+        // Observe changes to RAW_CONTACTS so that we will update the list of "Device" accounts
+        // if a new device contact is added or removed.
+        mContext.getContentResolver().registerContentObserver(
+                ContactsContract.RawContacts.CONTENT_URI, /* notifyDescendents */ true,
+                new ContentObserver(mMainThreadHandler) {
+                    @Override
+                    public boolean deliverSelfNotifications() {
+                        return true;
+                    }
 
-                        @Override
-                        public void onChange(boolean selfChange) {
-                            reloadLocalAccounts();
-                        }
+                    @Override
+                    public void onChange(boolean selfChange) {
+                        reloadLocalAccounts();
+                    }
 
-                        @Override
-                        public void onChange(boolean selfChange, Uri uri) {
-                            reloadLocalAccounts();
-                        }
-                    });
-        }
+                    @Override
+                    public void onChange(boolean selfChange, Uri uri) {
+                        reloadLocalAccounts();
+                    }
+                });
         loadAccountTypes();
     }
 
diff --git a/src/com/android/contacts/model/DeviceLocalAccountLocator.java b/src/com/android/contacts/model/DeviceLocalAccountLocator.java
index 4281de9..2b987d3 100644
--- a/src/com/android/contacts/model/DeviceLocalAccountLocator.java
+++ b/src/com/android/contacts/model/DeviceLocalAccountLocator.java
@@ -18,6 +18,8 @@
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.content.Context;
+import android.database.Cursor;
+import android.provider.ContactsContract;
 
 import com.android.contacts.Experiments;
 import com.android.contacts.model.account.AccountWithDataSet;
@@ -69,23 +71,25 @@
             return new Cp2DeviceLocalAccountLocator(context.getContentResolver(),
                     ObjectFactory.getDeviceLocalAccountTypeFactory(context), knownTypes);
         } else {
-            return new NexusDeviceAccountLocator(accountManager);
+            return new NexusDeviceAccountLocator(context, accountManager);
         }
     }
 
     /**
      * On Nexus the "device" account uses "null" values for the account name and type columns
      *
-     * <p>However, the focus sync adapter automatically migrates contacts from this null
-     * account to a Google account if one exists. Hence, the device account should be returned
-     * only when there is no Google Account added
+     * <p>However, the focus sync adapter migrates contacts from this null account to a Google
+     * account if one exists. Hence, the device account should be returned only when there is no
+     * Google Account added or when there already exists contacts in the null account.
      * </p>
      */
     public static class NexusDeviceAccountLocator extends DeviceLocalAccountLocator {
-
+        private final Context mContext;
         private final AccountManager mAccountManager;
 
-        public NexusDeviceAccountLocator(AccountManager accountManager) {
+
+        public NexusDeviceAccountLocator(Context context, AccountManager accountManager) {
+            mContext = context;
             mAccountManager = accountManager;
         }
 
@@ -95,7 +99,7 @@
             final Account[] accounts = mAccountManager
                     .getAccountsByType(GoogleAccountType.ACCOUNT_TYPE);
 
-            if (accounts.length > 0) {
+            if (accounts.length > 0 && !AccountWithDataSet.getNullAccount().hasData(mContext)) {
                 return Collections.emptyList();
             } else {
                 return Collections.singletonList(AccountWithDataSet.getNullAccount());
diff --git a/tests/Android.bp b/tests/Android.bp
index 7754fd4..2e1d47b 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -22,4 +22,6 @@
         "android.test.base.stubs",
         "android.test.mock.stubs",
     ],
+
+    test_suites: ["general-tests"],
 }
diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml
new file mode 100644
index 0000000..5665490
--- /dev/null
+++ b/tests/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Runs Tests for Contacts.">
+  <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+    <option name="cleanup-apks" value="true" />
+    <option name="test-file-name" value="ContactsTests.apk" />
+  </target_preparer>
+
+  <option name="test-suite-tag" value="apct" />
+  <option name="test-tag" value="ContactsTests" />
+  <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+    <option name="package" value="com.android.contacts.tests" />
+    <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
+    <option name="hidden-api-checks" value="false"/>
+  </test>
+</configuration>
diff --git a/tests/README b/tests/README
new file mode 100644
index 0000000..43d905c
--- /dev/null
+++ b/tests/README
@@ -0,0 +1,13 @@
+# Running tests
+
+Build and install Contacts.apk
+
+Grant Contacts permissions to Contacts.apk
+
+Run
+```shell
+$ atest ContactsTests
+```
+
+More information can be found at
+https://source.android.com/compatibility/tests/development/atest
diff --git a/tests/src/com/android/contacts/activities/SimImportActivityTest.java b/tests/src/com/android/contacts/activities/SimImportActivityTest.java
index 9c90426..7069ef1 100644
--- a/tests/src/com/android/contacts/activities/SimImportActivityTest.java
+++ b/tests/src/com/android/contacts/activities/SimImportActivityTest.java
@@ -327,9 +327,9 @@
         mDevice.findObject(By.textContains(targetAccount.name)).click();
         mDevice.waitForIdle();
 
-        assertTrue(mDevice.wait(Until.hasObject(By.text("Import One").checked(false).enabled(false)), TIMEOUT));
-        assertTrue(mDevice.hasObject(By.text("Import Three").checked(false).enabled(false)));
-        assertTrue(mDevice.hasObject(By.text("Import Six").checked(false).enabled(false)));
+        assertTrue(mDevice.wait(Until.hasObject(By.text("Import One").checked(false)), TIMEOUT));
+        assertTrue(mDevice.hasObject(By.text("Import Three").checked(false)));
+        assertTrue(mDevice.hasObject(By.text("Import Six").checked(false)));
 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             contactsProviderClient.close();
diff --git a/tests/src/com/android/contacts/model/AccountTypeManagerTest.java b/tests/src/com/android/contacts/model/AccountTypeManagerTest.java
index 982517b..dfcb390 100644
--- a/tests/src/com/android/contacts/model/AccountTypeManagerTest.java
+++ b/tests/src/com/android/contacts/model/AccountTypeManagerTest.java
@@ -96,7 +96,7 @@
     }
 
     public void testGetDefaultAccount_NoAccounts_DefaultPreferenceSet() {
-        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+        when(mPrefs.getString(Mockito.anyString(), Mockito.any())).thenReturn(
                 getDefaultAccountPreference("name1", GoogleAccountType.ACCOUNT_TYPE));
         assertNull(getDefaultGoogleAccountName());
     }
@@ -108,21 +108,21 @@
 
     public void testGetDefaultAccount_DefaultAccountPreferenceSet() {
         when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
-        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+        when(mPrefs.getString(Mockito.anyString(), Mockito.any())).thenReturn(
                 getDefaultAccountPreference("name2", GoogleAccountType.ACCOUNT_TYPE));
         assertEquals("name2", getDefaultGoogleAccountName());
     }
 
     public void testGetDefaultAccount_DefaultAccountPreferenceSet_NonGoogleAccountType() {
         when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
-        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+        when(mPrefs.getString(Mockito.anyString(), Mockito.any())).thenReturn(
                 getDefaultAccountPreference("name3", "type3"));
         assertEquals("name1", getDefaultGoogleAccountName());
     }
 
     public void testGetDefaultAccount_DefaultAccountPreferenceSet_UnknownName() {
         when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
-        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+        when(mPrefs.getString(Mockito.anyString(), Mockito.any())).thenReturn(
                 getDefaultAccountPreference("name4",GoogleAccountType.ACCOUNT_TYPE));
         assertEquals("name1", getDefaultGoogleAccountName());
     }
diff --git a/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java b/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
index 998f385..d7f34ee 100644
--- a/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
+++ b/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
@@ -56,7 +56,7 @@
         Mockito.when(mResources.getString(Mockito.anyInt()))
                 .thenReturn(ACCOUNT_KEY); // contact_editor_default_account_key
 
-        Mockito.when(mContext.getSharedPreferences(Mockito.anyString(), Mockito.anyInt()))
+        Mockito.when(mContext.getSharedPreferences(Mockito.any(), Mockito.anyInt()))
                 .thenReturn(mSharedPreferences);
         Mockito.when(mSharedPreferences.contains(ContactsPreferences.SORT_ORDER_KEY))
                 .thenReturn(true);
@@ -184,7 +184,7 @@
         mContactsPreferences = new ContactsPreferences(mContext,
                 /* isDefaultAccountUserChangeable */ true);
 
-        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.any()))
                 .thenReturn(new AccountWithDataSet("name1", "type1", "dataset1").stringify(),
                         new AccountWithDataSet("name2", "type2", "dataset2").stringify());
 
@@ -199,7 +199,7 @@
     public void testShouldShowAccountChangedNotificationIfAccountNotSaved() {
         mContactsPreferences = new ContactsPreferences(mContext,
                 /* isDefaultAccountUserChangeable */ true);
-        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.any()))
                 .thenReturn(null);
 
         assertTrue("Should prompt to change default if no default is saved",
@@ -211,7 +211,7 @@
     public void testShouldShowAccountChangedNotification() {
         mContactsPreferences = new ContactsPreferences(mContext,
                 /* isDefaultAccountUserChangeable */ true);
-        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.any()))
                 .thenReturn(new AccountWithDataSet("name", "type", "dataset").stringify());
 
         assertFalse("Should not prompt to change default if current default exists",
@@ -228,7 +228,7 @@
     public void testShouldShowAccountChangedNotificationWhenThereIsOneAccount() {
         mContactsPreferences = new ContactsPreferences(mContext,
                 /* isDefaultAccountUserChangeable */ true);
-        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.any()))
                 .thenReturn(null);
 
         // Normally we would prompt because there is no default set but if there is just one
diff --git a/tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java b/tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java
index 993d0b7..a08bff9 100644
--- a/tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java
+++ b/tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java
@@ -23,8 +23,10 @@
 import android.content.res.AssetFileDescriptor;
 import android.database.Cursor;
 import android.net.Uri;
+import android.os.Binder;
 import android.os.Bundle;
 import android.os.CancellationSignal;
+import android.os.IBinder;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import androidx.annotation.Nullable;
@@ -203,4 +205,8 @@
             throw new RuntimeException(e);
         }
     }
+
+    public IBinder getIContentProviderBinder() {
+        return new Binder();
+    }
 }