diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..1fd8e8b
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,37 @@
+android_app {
+    name: "Contacts",
+
+    srcs: [
+        "src/**/*.java",
+        "src-bind/**/*.java",
+    ],
+
+    static_libs: [
+        "com.android.phone.common-lib",
+
+        "com.google.android.material_material",
+        "androidx.transition_transition",
+        "androidx.legacy_legacy-support-v13",
+        "androidx.appcompat_appcompat",
+        "androidx.cardview_cardview",
+        "androidx.recyclerview_recyclerview",
+        "androidx.palette_palette",
+        "androidx.legacy_legacy-support-v4",
+        "android-common",
+        "com.android.vcard",
+        "guava",
+        "libphonenumber",
+    ],
+
+    certificate: "shared",
+    product_specific: true,
+    privileged: true,
+    required: ["privapp_whitelist_com.android.contacts"],
+
+    optimize: {
+        proguard_flags_files: ["proguard.flags"],
+    },
+
+    sdk_version: "current",
+    min_sdk_version: "21",
+}
diff --git a/Android.mk b/Android.mk
deleted file mode 100644
index 2a3a485..0000000
--- a/Android.mk
+++ /dev/null
@@ -1,52 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-phone_common_dir := ../PhoneCommon
-
-src_dirs := src src-bind $(phone_common_dir)/src
-res_dirs := res $(phone_common_dir)/res
-asset_dirs := assets
-
-LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
-LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
-LOCAL_ASSET_DIR := $(addprefix $(LOCAL_PATH)/, $(asset_dirs))
-
-LOCAL_STATIC_ANDROID_LIBRARIES := \
-    com.google.android.material_material \
-    androidx.transition_transition \
-    androidx.legacy_legacy-support-v13 \
-    androidx.appcompat_appcompat \
-    androidx.cardview_cardview \
-    androidx.recyclerview_recyclerview \
-    androidx.palette_palette \
-    androidx.legacy_legacy-support-v4
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-common \
-    com.android.vcard \
-    guava \
-    libphonenumber
-
-LOCAL_USE_AAPT2 := true
-
-LOCAL_AAPT_FLAGS := \
-    --auto-add-overlay \
-    --extra-packages com.android.phone.common
-
-LOCAL_PACKAGE_NAME := Contacts
-LOCAL_CERTIFICATE := shared
-LOCAL_PRODUCT_MODULE := true
-LOCAL_PRIVILEGED_MODULE := true
-LOCAL_REQUIRED_MODULES := privapp_whitelist_com.android.contacts
-
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-
-LOCAL_SDK_VERSION := current
-LOCAL_MIN_SDK_VERSION := 21
-
-include $(BUILD_PACKAGE)
-
-# Use the following include to make our test apk.
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b0783d4..e0814c1 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -21,7 +21,7 @@
 
     <uses-sdk
         android:minSdkVersion="21"
-        android:targetSdkVersion="28"/>
+        android:targetSdkVersion="29"/>
 
     <original-package android:name="com.android.contacts"/>
 
diff --git a/res/values-ja/donottranslate_config.xml b/res/values-ja/donottranslate_config.xml
index ff8a8eb..b357856 100644
--- a/res/values-ja/donottranslate_config.xml
+++ b/res/values-ja/donottranslate_config.xml
@@ -32,7 +32,4 @@
 
     <!-- If true, the order of name fields in the editor is primary (i.e. given name first) -->
     <bool name="config_editor_field_order_primary">false</bool>
-
-    <!-- If true, phonetic name is included in the contact editor by default -->
-    <bool name="config_editor_include_phonetic_name">true</bool>
 </resources>
diff --git a/src/com/android/contacts/SimImportFragment.java b/src/com/android/contacts/SimImportFragment.java
index 6042939..cee1b1a 100644
--- a/src/com/android/contacts/SimImportFragment.java
+++ b/src/com/android/contacts/SimImportFragment.java
@@ -55,6 +55,7 @@
 import com.google.common.base.Function;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -477,7 +478,7 @@
                     simLoadResult.accounts = accounts;
                     return simLoadResult;
                 }
-            });
+            }, MoreExecutors.directExecutor());
         }
 
         private LoaderResult loadFromSim() {
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 f67f074..196e67f 100644
--- a/src/com/android/contacts/model/AccountTypeManager.java
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -59,6 +59,7 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -404,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();
     }
 
@@ -503,7 +502,8 @@
     private synchronized void reloadAccountTypes() {
         loadAccountTypes();
         Futures.addCallback(
-                Futures.transform(mAccountTypesFuture, mAccountsExtractor),
+                Futures.transform(mAccountTypesFuture, mAccountsExtractor,
+                        MoreExecutors.directExecutor()),
                 newAccountsUpdatedCallback(mAccountManagerAccounts),
                 mMainThreadExecutor);
     }
@@ -534,7 +534,8 @@
         final ListenableFuture<List<List<AccountWithDataSet>>> all =
                 Futures.nonCancellationPropagating(
                         Futures.successfulAsList(
-                                Futures.transform(mAccountTypesFuture, mAccountsExtractor),
+                                Futures.transform(mAccountTypesFuture, mAccountsExtractor,
+                                        MoreExecutors.directExecutor()),
                                 mLocalAccountsFuture));
 
         return Futures.transform(all, new Function<List<List<AccountWithDataSet>>,
@@ -560,7 +561,7 @@
                 AccountInfo.sortAccounts(null, result);
                 return result;
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     @Override
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/src/com/android/contacts/util/concurrent/FuturesUtil.java b/src/com/android/contacts/util/concurrent/FuturesUtil.java
index 113af93..ba72446 100644
--- a/src/com/android/contacts/util/concurrent/FuturesUtil.java
+++ b/src/com/android/contacts/util/concurrent/FuturesUtil.java
@@ -3,9 +3,10 @@
 
 import android.os.Handler;
 
-import com.google.common.util.concurrent.FutureFallback;
+import com.google.common.util.concurrent.AsyncFunction;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.ScheduledExecutorService;
@@ -46,14 +47,14 @@
             }
         }, time, unit);
 
-        return Futures.withFallback(future, new FutureFallback<V>() {
+        return Futures.catchingAsync(future, Throwable.class, new AsyncFunction<Throwable, V>() {
             @Override
-            public ListenableFuture<V> create(Throwable t) throws Exception {
+            public ListenableFuture<V> apply(Throwable t) throws Exception {
                 if ((t instanceof CancellationException) && didTimeout.get()) {
                     return Futures.immediateFailedFuture(new TimeoutException("Timeout expired"));
                 }
                 return Futures.immediateFailedFuture(t);
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 }
diff --git a/tests/Android.bp b/tests/Android.bp
new file mode 100644
index 0000000..2e1d47b
--- /dev/null
+++ b/tests/Android.bp
@@ -0,0 +1,27 @@
+android_test {
+    name: "ContactsTests",
+
+    certificate: "shared",
+
+    srcs: ["src/**/*.java"],
+
+    instrumentation_for: "Contacts",
+
+    sdk_version: "current",
+    min_sdk_version: "21",
+
+    static_libs: [
+        "androidx.test.rules",
+        "hamcrest-library",
+        "mockito-target-minus-junit4",
+        "ub-uiautomator",
+    ],
+
+    libs: [
+        "android.test.runner.stubs",
+        "android.test.base.stubs",
+        "android.test.mock.stubs",
+    ],
+
+    test_suites: ["general-tests"],
+}
diff --git a/tests/Android.mk b/tests/Android.mk
deleted file mode 100644
index ce4e6ad..0000000
--- a/tests/Android.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-# We only want this apk build for tests.
-LOCAL_MODULE_TAGS := tests
-LOCAL_CERTIFICATE := shared
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-res_dirs := res
-LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
-
-LOCAL_PACKAGE_NAME := ContactsTests
-
-LOCAL_INSTRUMENTATION_FOR := Contacts
-
-LOCAL_SDK_VERSION := current
-LOCAL_MIN_SDK_VERSION := 21
-
-LOCAL_STATIC_JAVA_LIBRARIES += \
-    androidx.test.rules \
-    hamcrest-library \
-    mockito-target-minus-junit4 \
-    ub-uiautomator
-
-LOCAL_JAVA_LIBRARIES := \
-    android.test.runner.stubs \
-    android.test.base.stubs \
-    android.test.mock.stubs \
-
-
-LOCAL_AAPT_FLAGS := \
-    --auto-add-overlay \
-    --extra-packages com.android.contacts.common.tests
-
-include $(BUILD_PACKAGE)
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index dfc40a9..f61efda 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -17,7 +17,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.contacts.tests">
 
-    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
+    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />
 
     <uses-permission android:name="android.permission.READ_CONTACTS" />
     <uses-permission android:name="android.permission.WRITE_CONTACTS" />
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();
+    }
 }
