diff --git a/tests/robotests/src/com/android/settings/DisplaySettingsTest.java b/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
index e914b01..e251669 100644
--- a/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
@@ -35,6 +35,6 @@
         // Nightmode is currently hidden
         preferenceKeys.remove("night_mode");
 
-        assertThat(preferenceScreenKeys).containsAllIn(preferenceKeys);
+        assertThat(preferenceScreenKeys).containsAtLeastElementsIn(preferenceKeys);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/LegalSettingsTest.java b/tests/robotests/src/com/android/settings/LegalSettingsTest.java
index 78a5ee3..3418a40 100644
--- a/tests/robotests/src/com/android/settings/LegalSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/LegalSettingsTest.java
@@ -46,6 +46,6 @@
 
         final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.about_legal);
 
-        assertThat(keys).containsAllIn(niks);
+        assertThat(keys).containsAtLeastElementsIn(niks);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/SettingsInitializeTest.java b/tests/robotests/src/com/android/settings/SettingsInitializeTest.java
index c28ffc4..a8f42c2 100644
--- a/tests/robotests/src/com/android/settings/SettingsInitializeTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsInitializeTest.java
@@ -94,6 +94,6 @@
 
         final List<ShortcutInfo> updatedShortcuts = mShortcutManager.getPinnedShortcuts();
         assertThat(updatedShortcuts).hasSize(1);
-        assertThat(updatedShortcuts.get(0)).isSameAs(info);
+        assertThat(updatedShortcuts.get(0)).isSameInstanceAs(info);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
index bf63130..889ed95 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -99,7 +99,7 @@
         final List<String> keys =
                 XmlTestUtils.getKeysFromPreferenceXml(mContext, R.xml.accessibility_settings);
 
-        assertThat(keys).containsAllIn(niks);
+        assertThat(keys).containsAtLeastElementsIn(niks);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
index 2bb93b5..37673c1 100644
--- a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
@@ -280,7 +280,7 @@
 
         final List<String> expectedPackages = Arrays.asList(testDialer, testSms,
                 testLocationHistory);
-        assertThat(keepEnabledPackages).containsAllIn(expectedPackages);
+        assertThat(keepEnabledPackages).containsAtLeastElementsIn(expectedPackages);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
index a5ac209..9a65dc8 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
@@ -420,7 +420,7 @@
         mController.forceStopPackage(PACKAGE_NAME);
 
         verify(mAm).forceStopPackage(PACKAGE_NAME);
-        assertThat(mController.mAppEntry).isSameAs(appEntry);
+        assertThat(mController.mAppEntry).isSameInstanceAs(appEntry);
         verify(mController).updateForceStopButton();
     }
 
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java
index 8be6b30..a969e06 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java
@@ -17,6 +17,7 @@
 package com.android.settings.biometrics.fingerprint;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
@@ -92,7 +93,7 @@
         ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
         IntentForResult startedActivity =
                 shadowActivity.getNextStartedActivityForResult();
-        assertThat(startedActivity).named("Next activity 1").isNotNull();
+        assertWithMessage("Next activity 1").that(startedActivity).isNotNull();
         assertThat(startedActivity.intent.getComponent())
                 .isEqualTo(new ComponentName(application, FingerprintEnrollEnrolling.class));
     }
@@ -107,12 +108,12 @@
         ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
         IntentForResult startedActivity =
                 shadowActivity.getNextStartedActivityForResult();
-        assertThat(startedActivity).named("Next activity 1").isNotNull();
+        assertWithMessage("Next activity 1").that(startedActivity).isNotNull();
         assertThat(startedActivity.intent.getComponent())
                 .isEqualTo(new ComponentName(application, FingerprintEnrollEnrolling.class));
 
         // Should only start one next activity
-        assertThat(shadowActivity.getNextStartedActivityForResult()).named("Next activity 2")
+        assertWithMessage("Next activity 2").that(shadowActivity.getNextStartedActivityForResult())
                 .isNull();
     }
 
@@ -129,7 +130,7 @@
         ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
         IntentForResult startedActivity =
                 shadowActivity.getNextStartedActivityForResult();
-        assertThat(startedActivity).named("Next activity").isNotNull();
+        assertWithMessage("Next activity").that(startedActivity).isNotNull();
         assertThat(startedActivity.intent.getComponent())
                 .isEqualTo(new ComponentName(application, FingerprintEnrollEnrolling.class));
     }
@@ -140,7 +141,7 @@
         layout.getMixin(FooterBarMixin.class).getSecondaryButtonView().performClick();
 
         ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
-        assertThat(shadowActivity.getResultCode()).named("result code")
+        assertWithMessage("result code").that(shadowActivity.getResultCode())
                 .isEqualTo(BiometricEnrollBase.RESULT_SKIP);
     }
 
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSuggestionActivityTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSuggestionActivityTest.java
index 9fa6099..ea5511d 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSuggestionActivityTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSuggestionActivityTest.java
@@ -17,6 +17,7 @@
 package com.android.settings.biometrics.fingerprint;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.robolectric.RuntimeEnvironment.application;
 
@@ -70,12 +71,13 @@
         final Button cancelButton =
                 layout.getMixin(FooterBarMixin.class).getSecondaryButtonView();
         assertThat(cancelButton.getText().toString()).isEqualTo("Cancel");
-        assertThat(cancelButton.getVisibility()).named("Cancel visible").isEqualTo(View.VISIBLE);
+        assertWithMessage("Cancel visible").that(cancelButton.getVisibility())
+                .isEqualTo(View.VISIBLE);
         cancelButton.performClick();
 
         ShadowActivity shadowActivity = Shadows.shadowOf(mController.get());
-        assertThat(mController.get().isFinishing()).named("Is finishing").isTrue();
-        assertThat(shadowActivity.getResultCode()).named("Result code")
+        assertWithMessage("Is finishing").that(mController.get().isFinishing()).isTrue();
+        assertWithMessage("Result code").that(shadowActivity.getResultCode())
             .isEqualTo(Activity.RESULT_CANCELED);
     }
 
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java
index 57a56fc..e238a0e 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java
@@ -19,6 +19,7 @@
 import static com.android.settings.biometrics.fingerprint.FingerprintEnrollFinish.FINGERPRINT_SUGGESTION_ACTIVITY;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.robolectric.RuntimeEnvironment.application;
 
@@ -76,7 +77,7 @@
 
         ShadowActivity.IntentForResult startedActivity =
                 Shadows.shadowOf(mActivity).getNextStartedActivityForResult();
-        assertThat(startedActivity).named("Next activity").isNotNull();
+        assertWithMessage("Next activity").that(startedActivity).isNotNull();
         assertThat(startedActivity.intent.getComponent())
                 .isEqualTo(enrollingComponent);
     }
@@ -91,7 +92,7 @@
 
         ShadowActivity.IntentForResult startedActivity =
                 Shadows.shadowOf(mActivity).getNextStartedActivityForResult();
-        assertThat(startedActivity).named("Next activity").isNotNull();
+        assertWithMessage("Next activity").that(startedActivity).isNotNull();
         assertThat(startedActivity.intent.getComponent())
                 .isEqualTo(enrollingComponent);
     }
@@ -162,4 +163,4 @@
         assertThat(application.getPackageManager().getComponentEnabledSetting(
                 mComponentName)).isEqualTo(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
     }
-}
\ No newline at end of file
+}
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java
index 3fa0ed4..4c15e08 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java
@@ -17,6 +17,7 @@
 package com.android.settings.biometrics.fingerprint;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.robolectric.RuntimeEnvironment.application;
 
@@ -90,12 +91,12 @@
                 mController.get().findViewById(R.id.setup_wizard_layout);
         final Button skipButton =
                 layout.getMixin(FooterBarMixin.class).getSecondaryButtonView();
-        assertThat(skipButton.getVisibility()).named("Skip visible").isEqualTo(View.VISIBLE);
+        assertWithMessage("Skip visible").that(skipButton.getVisibility()).isEqualTo(View.VISIBLE);
         skipButton.performClick();
 
         ShadowActivity shadowActivity = Shadows.shadowOf(mController.get());
-        assertThat(mController.get().isFinishing()).named("Is finishing").isTrue();
-        assertThat(shadowActivity.getResultCode()).named("Result code")
+        assertWithMessage("Is finishing").that(mController.get().isFinishing()).isTrue();
+        assertWithMessage("Result code").that(shadowActivity.getResultCode())
             .isEqualTo(SetupSkipDialog.RESULT_SKIP);
     }
 
@@ -109,12 +110,12 @@
                 mController.get().findViewById(R.id.setup_wizard_layout);
         final Button skipButton =
                 layout.getMixin(FooterBarMixin.class).getSecondaryButtonView();
-        assertThat(skipButton.getVisibility()).named("Skip visible").isEqualTo(View.VISIBLE);
+        assertWithMessage("Skip visible").that(skipButton.getVisibility()).isEqualTo(View.VISIBLE);
         skipButton.performClick();
 
         ShadowActivity shadowActivity = Shadows.shadowOf(mController.get());
-        assertThat(mController.get().isFinishing()).named("Is finishing").isTrue();
-        assertThat(shadowActivity.getResultCode()).named("Result code")
+        assertWithMessage("Is finishing").that(mController.get().isFinishing()).isTrue();
+        assertWithMessage("Result code").that(shadowActivity.getResultCode())
             .isEqualTo(BiometricEnrollBase.RESULT_SKIP);
     }
 
diff --git a/tests/robotests/src/com/android/settings/core/instrumentation/MetricsFeatureProviderTest.java b/tests/robotests/src/com/android/settings/core/instrumentation/MetricsFeatureProviderTest.java
index 9b1c411..a6bd865 100644
--- a/tests/robotests/src/com/android/settings/core/instrumentation/MetricsFeatureProviderTest.java
+++ b/tests/robotests/src/com/android/settings/core/instrumentation/MetricsFeatureProviderTest.java
@@ -47,6 +47,6 @@
         MetricsFeatureProvider feature2 =
                 FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
 
-        assertThat(feature1).isSameAs(feature2);
+        assertThat(feature1).isSameInstanceAs(feature2);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java b/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java
index 64eaad5..a0db866 100644
--- a/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java
@@ -67,7 +67,7 @@
 
     @Test
     public void getInstance_shouldBeSingleton() {
-        assertThat(mCategoryManager).isSameAs(CategoryManager.get(mContext));
+        assertThat(mCategoryManager).isSameInstanceAs(CategoryManager.get(mContext));
     }
 
     @Test
@@ -147,9 +147,9 @@
         mCategoryManager.sortCategories(RuntimeEnvironment.application, mCategoryByKeyMap);
 
         // Verify they are now sorted.
-        assertThat(category.getTile(0)).isSameAs(tile3);
-        assertThat(category.getTile(1)).isSameAs(tile1);
-        assertThat(category.getTile(2)).isSameAs(tile2);
+        assertThat(category.getTile(0)).isSameInstanceAs(tile3);
+        assertThat(category.getTile(1)).isSameInstanceAs(tile1);
+        assertThat(category.getTile(2)).isSameInstanceAs(tile2);
     }
 
     @Test
@@ -170,9 +170,9 @@
         mCategoryManager.sortCategories(mContext, mCategoryByKeyMap);
 
         // Verify they are now sorted.
-        assertThat(category.getTile(0)).isSameAs(tile2);
-        assertThat(category.getTile(1)).isSameAs(tile1);
-        assertThat(category.getTile(2)).isSameAs(tile3);
+        assertThat(category.getTile(0)).isSameInstanceAs(tile2);
+        assertThat(category.getTile(1)).isSameInstanceAs(tile1);
+        assertThat(category.getTile(2)).isSameInstanceAs(tile3);
     }
 
     @Test
@@ -192,9 +192,9 @@
         mCategoryManager.sortCategories(mContext, mCategoryByKeyMap);
 
         // Verify the sorting order is not changed
-        assertThat(category.getTile(0)).isSameAs(tile1);
-        assertThat(category.getTile(1)).isSameAs(tile2);
-        assertThat(category.getTile(2)).isSameAs(tile3);
+        assertThat(category.getTile(0)).isSameInstanceAs(tile1);
+        assertThat(category.getTile(1)).isSameInstanceAs(tile2);
+        assertThat(category.getTile(2)).isSameInstanceAs(tile3);
     }
 
     @Test
@@ -217,10 +217,10 @@
         mCategoryManager.sortCategories(mContext, mCategoryByKeyMap);
 
         // Verify the sorting order is not changed
-        assertThat(category.getTile(0)).isSameAs(tile1);
-        assertThat(category.getTile(1)).isSameAs(tile2);
-        assertThat(category.getTile(2)).isSameAs(tile3);
-        assertThat(category.getTile(3)).isSameAs(tile4);
+        assertThat(category.getTile(0)).isSameInstanceAs(tile1);
+        assertThat(category.getTile(1)).isSameInstanceAs(tile2);
+        assertThat(category.getTile(2)).isSameInstanceAs(tile3);
+        assertThat(category.getTile(3)).isSameInstanceAs(tile4);
     }
 
     @Test
@@ -242,9 +242,9 @@
         mCategoryManager.sortCategories(mContext, mCategoryByKeyMap);
 
         // Verify the sorting order is internal first, follow by package name ordering
-        assertThat(category.getTile(0)).isSameAs(tile2);
-        assertThat(category.getTile(1)).isSameAs(tile3);
-        assertThat(category.getTile(2)).isSameAs(tile1);
+        assertThat(category.getTile(0)).isSameInstanceAs(tile2);
+        assertThat(category.getTile(1)).isSameInstanceAs(tile3);
+        assertThat(category.getTile(2)).isSameInstanceAs(tile1);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index e70578e..b5125af 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -129,7 +129,7 @@
         final TestPreferenceController retrievedController = mTestFragment.use
                 (TestPreferenceController.class);
 
-        assertThat(controller).isSameAs(retrievedController);
+        assertThat(controller).isSameInstanceAs(retrievedController);
     }
 
     @Test
@@ -142,7 +142,7 @@
         final TestPreferenceController retrievedController = mTestFragment.use
                 (TestPreferenceController.class);
 
-        assertThat(controller1).isSameAs(retrievedController);
+        assertThat(controller1).isSameInstanceAs(retrievedController);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/datetime/timezone/model/TimeZoneDataTest.java b/tests/robotests/src/com/android/settings/datetime/timezone/model/TimeZoneDataTest.java
index 1acbcda..d21aa04 100644
--- a/tests/robotests/src/com/android/settings/datetime/timezone/model/TimeZoneDataTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/timezone/model/TimeZoneDataTest.java
@@ -54,7 +54,7 @@
         when(countryTimeZones.getTimeZoneMappings()).thenReturn(emptyList());
         when(mCountryZonesFinder.lookupCountryTimeZones("US")).thenReturn(countryTimeZones);
         assertThat(timeZoneData.lookupCountryTimeZones("US").getCountryTimeZones())
-                .isSameAs(countryTimeZones);
+                .isSameInstanceAs(countryTimeZones);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
index 0faddc3..163529b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
@@ -533,7 +533,7 @@
         BatterySipper sipper = mBatteryUtils.findBatterySipperByType(mUsageList,
                 BatterySipper.DrainType.SCREEN);
 
-        assertThat(sipper).isSameAs(mScreenBatterySipper);
+        assertThat(sipper).isSameInstanceAs(mScreenBatterySipper);
     }
 
     @Test
@@ -541,7 +541,7 @@
         BatterySipper sipper = mBatteryUtils.findBatterySipperByType(mUsageList,
                 BatterySipper.DrainType.APP);
 
-        assertThat(sipper).isSameAs(mNormalBatterySipper);
+        assertThat(sipper).isSameInstanceAs(mNormalBatterySipper);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 7839e1a..a94ca93 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -232,7 +232,7 @@
         final List<String> keys =
                 XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.power_usage_summary);
 
-        assertThat(keys).containsAllIn(niks);
+        assertThat(keys).containsAtLeastElementsIn(niks);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java b/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
index a6a362e..5a92aa2 100644
--- a/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
@@ -133,7 +133,7 @@
 
         final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
 
-        assertThat(keys).containsAllIn(niks);
+        assertThat(keys).containsAtLeastElementsIn(niks);
     }
 
     @Test
@@ -151,7 +151,7 @@
             preferenceKeys.add(controller.getPreferenceKey());
         }
 
-        assertThat(preferenceScreenKeys).containsAllIn(preferenceKeys);
+        assertThat(preferenceScreenKeys).containsAtLeastElementsIn(preferenceKeys);
     }
 
     /**
diff --git a/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java b/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java
index a7e59fc..5fd417d 100644
--- a/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java
@@ -22,6 +22,7 @@
 import static android.provider.Settings.Global.PRIVATE_DNS_MODE;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.mock;
@@ -145,13 +146,13 @@
             mPreference.mEditText.setText(invalid);
 
             mPreference.onCheckedChanged(null, R.id.private_dns_mode_off);
-            assertThat(mSaveButton.isEnabled()).named("off: " + invalid).isTrue();
+            assertWithMessage("off: " + invalid).that(mSaveButton.isEnabled()).isTrue();
 
             mPreference.onCheckedChanged(null, R.id.private_dns_mode_opportunistic);
-            assertThat(mSaveButton.isEnabled()).named("opportunistic: " + invalid).isTrue();
+            assertWithMessage("opportunistic: " + invalid).that(mSaveButton.isEnabled()).isTrue();
 
             mPreference.onCheckedChanged(null, R.id.private_dns_mode_provider);
-            assertThat(mSaveButton.isEnabled()).named("provider: " + invalid).isFalse();
+            assertWithMessage("provider: " + invalid).that(mSaveButton.isEnabled()).isFalse();
         }
     }
 
diff --git a/tests/robotests/src/com/android/settings/nfc/PaymentSettingsTest.java b/tests/robotests/src/com/android/settings/nfc/PaymentSettingsTest.java
index 525f3ef..6740cb0 100644
--- a/tests/robotests/src/com/android/settings/nfc/PaymentSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/nfc/PaymentSettingsTest.java
@@ -113,7 +113,7 @@
         final List<String> niks =
                 PaymentSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
 
-        assertThat(niks).containsAllOf(FOREGROUND_KEY, PAYMENT_KEY);
+        assertThat(niks).containsAtLeast(FOREGROUND_KEY, PAYMENT_KEY);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/notification/SoundSettingsTest.java b/tests/robotests/src/com/android/settings/notification/SoundSettingsTest.java
index b6f06f4..af0567f 100644
--- a/tests/robotests/src/com/android/settings/notification/SoundSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/notification/SoundSettingsTest.java
@@ -70,7 +70,7 @@
         keys.add("ring_volume");
         keys.add("notification_volume");
 
-        assertThat(keys).containsAllIn(niks);
+        assertThat(keys).containsAtLeastElementsIn(niks);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericControllerTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericControllerTest.java
index 4adc01b..5067de6 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericControllerTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericControllerTest.java
@@ -22,6 +22,7 @@
 import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
@@ -84,24 +85,24 @@
     public void isScreenLockVisible_shouldRespectResourceConfig() {
         for (ScreenLockType lock : ScreenLockType.values()) {
             // All locks except managed defaults to visible
-            assertThat(mController.isScreenLockVisible(lock)).named(lock + " visible")
+            assertWithMessage(lock + " visible").that(mController.isScreenLockVisible(lock))
                     .isEqualTo(lock != ScreenLockType.MANAGED);
         }
 
         SettingsShadowResources.overrideResource(R.bool.config_hide_none_security_option, true);
         SettingsShadowResources.overrideResource(R.bool.config_hide_swipe_security_option, true);
-        assertThat(mController.isScreenLockVisible(ScreenLockType.NONE)).named("NONE visible")
+        assertWithMessage("NONE visible").that(mController.isScreenLockVisible(ScreenLockType.NONE))
                 .isFalse();
-        assertThat(mController.isScreenLockVisible(ScreenLockType.SWIPE)).named("SWIPE visible")
-                .isFalse();
+        assertWithMessage("SWIPE visible").that(
+                mController.isScreenLockVisible(ScreenLockType.SWIPE)).isFalse();
     }
 
     @Test
     public void isScreenLockVisible_notCurrentUser_shouldHideInsecure() {
         mController = new ChooseLockGenericController(application, 1 /* userId */);
-        assertThat(mController.isScreenLockVisible(ScreenLockType.SWIPE)).named("SWIPE visible")
-                .isFalse();
-        assertThat(mController.isScreenLockVisible(ScreenLockType.NONE)).named("NONE visible")
+        assertWithMessage("SWIPE visible").that(
+                mController.isScreenLockVisible(ScreenLockType.SWIPE)).isFalse();
+        assertWithMessage("NONE visible").that(mController.isScreenLockVisible(ScreenLockType.NONE))
                 .isFalse();
     }
 
@@ -109,34 +110,31 @@
     public void isScreenLockVisible_managedPasswordChoosable_shouldShowManaged() {
         doReturn(true).when(mManagedLockPasswordProvider).isManagedPasswordChoosable();
 
-        assertThat(mController.isScreenLockVisible(ScreenLockType.MANAGED)).named("MANAGED visible")
-                .isTrue();
+        assertWithMessage("MANAGED visible").that(
+                mController.isScreenLockVisible(ScreenLockType.MANAGED)).isTrue();
     }
 
     @Test
     public void isScreenLockEnabled_lowerQuality_shouldReturnFalse() {
         for (ScreenLockType lock : ScreenLockType.values()) {
-            assertThat(mController.isScreenLockEnabled(lock, lock.maxQuality + 1))
-                    .named(lock + " enabled")
-                    .isFalse();
+            assertWithMessage(lock + " enabled").that(
+                    mController.isScreenLockEnabled(lock, lock.maxQuality + 1)).isFalse();
         }
     }
 
     @Test
     public void isScreenLockEnabled_equalQuality_shouldReturnTrue() {
         for (ScreenLockType lock : ScreenLockType.values()) {
-            assertThat(mController.isScreenLockEnabled(lock, lock.defaultQuality))
-                    .named(lock + " enabled")
-                    .isTrue();
+            assertWithMessage(lock + " enabled").that(
+                    mController.isScreenLockEnabled(lock, lock.defaultQuality)).isTrue();
         }
     }
 
     @Test
     public void isScreenLockEnabled_higherQuality_shouldReturnTrue() {
         for (ScreenLockType lock : ScreenLockType.values()) {
-            assertThat(mController.isScreenLockEnabled(lock, lock.maxQuality - 1))
-                    .named(lock + " enabled")
-                    .isTrue();
+            assertWithMessage(lock + " enabled").that(
+                    mController.isScreenLockEnabled(lock, lock.maxQuality - 1)).isTrue();
         }
     }
 
@@ -144,9 +142,8 @@
     public void isScreenLockDisabledByAdmin_lowerQuality_shouldReturnTrue() {
         doReturn(true).when(mManagedLockPasswordProvider).isManagedPasswordChoosable();
         for (ScreenLockType lock : ScreenLockType.values()) {
-            assertThat(mController.isScreenLockDisabledByAdmin(lock, lock.maxQuality + 1))
-                    .named(lock + " disabledByAdmin")
-                    .isTrue();
+            assertWithMessage(lock + " disabledByAdmin").that(
+                    mController.isScreenLockDisabledByAdmin(lock, lock.maxQuality + 1)).isTrue();
         }
     }
 
@@ -154,9 +151,8 @@
     public void isScreenLockDisabledByAdmin_equalQuality_shouldReturnFalse() {
         doReturn(true).when(mManagedLockPasswordProvider).isManagedPasswordChoosable();
         for (ScreenLockType lock : ScreenLockType.values()) {
-            assertThat(mController.isScreenLockDisabledByAdmin(lock, lock.maxQuality))
-                    .named(lock + " disabledByAdmin")
-                    .isFalse();
+            assertWithMessage(lock + " disabledByAdmin").that(
+                    mController.isScreenLockDisabledByAdmin(lock, lock.maxQuality)).isFalse();
         }
     }
 
@@ -164,18 +160,16 @@
     public void isScreenLockDisabledByAdmin_higherQuality_shouldReturnFalse() {
         doReturn(true).when(mManagedLockPasswordProvider).isManagedPasswordChoosable();
         for (ScreenLockType lock : ScreenLockType.values()) {
-            assertThat(mController.isScreenLockDisabledByAdmin(lock, lock.maxQuality - 1))
-                    .named(lock + " disabledByAdmin")
-                    .isFalse();
+            assertWithMessage(lock + " disabledByAdmin").that(
+                    mController.isScreenLockDisabledByAdmin(lock, lock.maxQuality - 1)).isFalse();
         }
     }
 
     @Test
     public void isScreenLockDisabledByAdmin_managedNotChoosable_shouldReturnTrue() {
         doReturn(false).when(mManagedLockPasswordProvider).isManagedPasswordChoosable();
-        assertThat(mController.isScreenLockDisabledByAdmin(
+        assertWithMessage("MANANGED disabledByAdmin").that(mController.isScreenLockDisabledByAdmin(
                 ScreenLockType.MANAGED, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED))
-                .named("MANANGED disabledByAdmin")
                 .isTrue();
     }
 
@@ -218,7 +212,7 @@
 
         final int upgradedQuality =
             mController.upgradeQuality(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC);
-        assertThat(upgradedQuality).named("upgradedQuality")
+        assertWithMessage("upgradedQuality").that(upgradedQuality)
                 .isEqualTo(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC);
     }
 
@@ -230,7 +224,7 @@
 
         final int upgradedQuality =
             mController.upgradeQuality(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
-        assertThat(upgradedQuality).named("upgradedQuality")
+        assertWithMessage("upgradedQuality").that(upgradedQuality)
                 .isEqualTo(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC);
     }
 
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
index 5ec6f41..3c8af7c 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
@@ -33,6 +33,7 @@
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.robolectric.RuntimeEnvironment.application;
 
@@ -92,18 +93,16 @@
                 .setUserId(123)
                 .build();
 
-        assertThat(intent.getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true))
-                .named("EXTRA_KEY_HAS_CHALLENGE")
+        assertWithMessage("EXTRA_KEY_HAS_CHALLENGE").that(intent
+                .getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true))
                 .isFalse();
-        assertThat((LockscreenCredential) intent.getParcelableExtra(
-                ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD))
-                .named("EXTRA_KEY_PASSWORD")
+        assertWithMessage("EXTRA_KEY_PASSWORD").that(
+                (LockscreenCredential) intent.getParcelableExtra(
+                        ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD))
                 .isEqualTo(LockscreenCredential.createPassword("password"));
-        assertThat(intent.getIntExtra(PASSWORD_TYPE_KEY, 0))
-                .named("PASSWORD_TYPE_KEY")
+        assertWithMessage("PASSWORD_TYPE_KEY").that(intent.getIntExtra(PASSWORD_TYPE_KEY, 0))
                 .isEqualTo(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC);
-        assertThat(intent.getIntExtra(Intent.EXTRA_USER_ID, 0))
-                .named("EXTRA_USER_ID")
+        assertWithMessage("EXTRA_USER_ID").that(intent.getIntExtra(Intent.EXTRA_USER_ID, 0))
                 .isEqualTo(123);
     }
 
@@ -115,17 +114,15 @@
                 .setUserId(123)
                 .build();
 
-        assertThat(intent.getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false))
-                .named("EXTRA_KEY_HAS_CHALLENGE")
+        assertWithMessage("EXTRA_KEY_HAS_CHALLENGE").that(intent
+                .getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false))
                 .isTrue();
-        assertThat(intent.getLongExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L))
-                .named("EXTRA_KEY_CHALLENGE")
+        assertWithMessage("EXTRA_KEY_CHALLENGE").that(intent
+                .getLongExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L))
                 .isEqualTo(12345L);
-        assertThat(intent.getIntExtra(PASSWORD_TYPE_KEY, 0))
-                .named("PASSWORD_TYPE_KEY")
+        assertWithMessage("PASSWORD_TYPE_KEY").that(intent.getIntExtra(PASSWORD_TYPE_KEY, 0))
                 .isEqualTo(PASSWORD_QUALITY_ALPHANUMERIC);
-        assertThat(intent.getIntExtra(Intent.EXTRA_USER_ID, 0))
-                .named("EXTRA_USER_ID")
+        assertWithMessage("EXTRA_USER_ID").that(intent.getIntExtra(Intent.EXTRA_USER_ID, 0))
                 .isEqualTo(123);
     }
 
@@ -153,12 +150,12 @@
                 .setProfileToUnify(23, LockscreenCredential.createNone())
                 .build();
 
-        assertThat(intent.getIntExtra(ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_ID, 0))
-                .named("EXTRA_KEY_UNIFICATION_PROFILE_ID")
+        assertWithMessage("EXTRA_KEY_UNIFICATION_PROFILE_ID").that(
+                intent.getIntExtra(ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_ID, 0))
                 .isEqualTo(23);
-        assertThat((LockscreenCredential) intent.getParcelableExtra(
-                ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL))
-                .named("EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL")
+        assertWithMessage("EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL").that(
+                (LockscreenCredential) intent.getParcelableExtra(
+                        ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL))
                 .isNotNull();
     }
 
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
index 3f3dcd6..e2d412d 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
@@ -17,6 +17,7 @@
 package com.android.settings.password;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.robolectric.RuntimeEnvironment.application;
 
@@ -58,16 +59,13 @@
                 .setUserId(123)
                 .build();
 
-        assertThat(intent
+        assertWithMessage("EXTRA_KEY_HAS_CHALLENGE").that(intent
                 .getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true))
-                .named("EXTRA_KEY_HAS_CHALLENGE")
                 .isFalse();
-        assertThat((LockscreenCredential) intent
+        assertWithMessage("EXTRA_KEY_PASSWORD").that((LockscreenCredential) intent
                 .getParcelableExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD))
-                .named("EXTRA_KEY_PASSWORD")
                 .isEqualTo(createPattern("1234"));
-        assertThat(intent.getIntExtra(Intent.EXTRA_USER_ID, 0))
-                .named("EXTRA_USER_ID")
+        assertWithMessage("EXTRA_USER_ID").that(intent.getIntExtra(Intent.EXTRA_USER_ID, 0))
                 .isEqualTo(123);
     }
 
@@ -78,17 +76,14 @@
                 .setUserId(123)
                 .build();
 
-        assertThat(intent
+        assertWithMessage("EXTRA_KEY_HAS_CHALLENGE").that(intent
                 .getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false))
-                .named("EXTRA_KEY_HAS_CHALLENGE")
                 .isTrue();
-        assertThat(intent
+        assertWithMessage("EXTRA_KEY_CHALLENGE").that(intent
                 .getLongExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L))
-                .named("EXTRA_KEY_CHALLENGE")
                 .isEqualTo(12345L);
-        assertThat(intent
+        assertWithMessage("EXTRA_USER_ID").that(intent
                 .getIntExtra(Intent.EXTRA_USER_ID, 0))
-                .named("EXTRA_USER_ID")
                 .isEqualTo(123);
     }
 
@@ -98,12 +93,12 @@
                 .setProfileToUnify(23, LockscreenCredential.createNone())
                 .build();
 
-        assertThat(intent.getIntExtra(ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_ID, 0))
-                .named("EXTRA_KEY_UNIFICATION_PROFILE_ID")
+        assertWithMessage("EXTRA_KEY_UNIFICATION_PROFILE_ID").that(intent
+                .getIntExtra(ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_ID, 0))
                 .isEqualTo(23);
-        assertThat((LockscreenCredential) intent.getParcelableExtra(
-                ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL))
-                .named("EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL")
+        assertWithMessage("EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL").that(
+                (LockscreenCredential) intent.getParcelableExtra(
+                        ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL))
                 .isNotNull();
     }
 
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
index 1a76799..5242e11 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
@@ -17,6 +17,7 @@
 package com.android.settings.password;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.robolectric.RuntimeEnvironment.application;
 
@@ -115,7 +116,7 @@
         activity.findViewById(R.id.screen_lock_options).performClick();
         AlertDialog latestAlertDialog = (AlertDialog) ShadowDialog.getLatestDialog();
         int count = latestAlertDialog.getListView().getCount();
-        assertThat(count).named("List items shown").isEqualTo(3);
+        assertWithMessage("List items shown").that(count).isEqualTo(3);
     }
 
     @Test
@@ -141,7 +142,7 @@
         assertThat(nextStartedActivity).isNotNull();
         assertThat(nextStartedActivity.getBooleanExtra(
                 ChooseLockGenericFragment.EXTRA_SHOW_OPTIONS_BUTTON, false)).isTrue();
-        assertThat(nextStartedActivity.getStringExtra("foo")).named("Foo extra")
+        assertWithMessage("Foo extra").that(nextStartedActivity.getStringExtra("foo"))
                 .isEqualTo("bar");
     }
 
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
index 4852546..53e68d9 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
@@ -17,6 +17,7 @@
 package com.android.settings.password;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.robolectric.RuntimeEnvironment.application;
 
@@ -112,7 +113,7 @@
         AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(chooserDialog).isNotNull();
         int count = chooserDialog.getListView().getCount();
-        assertThat(count).named("List items shown").isEqualTo(3);
+        assertWithMessage("List items shown").that(count).isEqualTo(3);
     }
 
     @Config(qualifiers = "sw400dp")
diff --git a/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java b/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
index c9bff38..1fc0230 100644
--- a/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
+++ b/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
@@ -117,7 +117,7 @@
         }
 
         assertThat(keys).hasSize(3);
-        assertThat(keys).containsAllOf("pref_key_1", "pref_key_3", "pref_key_5");
+        assertThat(keys).containsAtLeast("pref_key_1", "pref_key_3", "pref_key_5");
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/security/InstallCertificateFromStorageTest.java b/tests/robotests/src/com/android/settings/security/InstallCertificateFromStorageTest.java
index 2adad00..43d8d94 100644
--- a/tests/robotests/src/com/android/settings/security/InstallCertificateFromStorageTest.java
+++ b/tests/robotests/src/com/android/settings/security/InstallCertificateFromStorageTest.java
@@ -80,7 +80,7 @@
         final List<String> nonIndexableKeys =
                 SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
 
-        assertThat(nonIndexableKeys).containsAllIn(mTestKeys);
+        assertThat(nonIndexableKeys).containsAtLeastElementsIn(mTestKeys);
     }
 
 }
diff --git a/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java
index 8b5c5fe..294d05e 100644
--- a/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java
@@ -74,7 +74,7 @@
         List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(RuntimeEnvironment.application,
                 mTestFragment.getPreferenceScreenResId());
 
-        assertThat(keys).containsAllOf(LockscreenDashboardFragment.KEY_LOCK_SCREEN_NOTIFICATON,
+        assertThat(keys).containsAtLeast(LockscreenDashboardFragment.KEY_LOCK_SCREEN_NOTIFICATON,
                 LockscreenDashboardFragment.KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE,
                 LockscreenDashboardFragment.KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE_HEADER);
     }
diff --git a/tests/robotests/src/com/android/settings/security/SecurityFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/security/SecurityFeatureProviderImplTest.java
index 8dc0db5..392d44e 100644
--- a/tests/robotests/src/com/android/settings/security/SecurityFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/security/SecurityFeatureProviderImplTest.java
@@ -48,7 +48,7 @@
         final TrustAgentManager m1 = mImpl.getTrustAgentManager();
         final TrustAgentManager m2 = mImpl.getTrustAgentManager();
 
-        assertThat(m1).isSameAs(m2);
+        assertThat(m1).isSameInstanceAs(m2);
     }
 
     @Test
@@ -56,6 +56,6 @@
         final LockPatternUtils l1 = mImpl.getLockPatternUtils(mContext);
         final LockPatternUtils l2 = mImpl.getLockPatternUtils(mContext);
 
-        assertThat(l1).isSameAs(l2);
+        assertThat(l1).isSameInstanceAs(l2);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java
index 7bdc368..baa4690 100644
--- a/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java
@@ -73,7 +73,7 @@
 
         final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext, xmlId);
 
-        assertThat(keys).containsAllIn(niks);
+        assertThat(keys).containsAtLeastElementsIn(niks);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
index 2057788..2ecc1cb 100644
--- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -399,7 +399,7 @@
         ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class);
         verify(mFragment.mUserListCategory).addPreference(captor.capture());
         UserPreference adminPref = captor.getValue();
-        assertThat(adminPref).isSameAs(mMePreference);
+        assertThat(adminPref).isSameInstanceAs(mMePreference);
     }
 
     @Test
@@ -418,7 +418,7 @@
         assertThat(guestPref.getKey()).isEqualTo(KEY_USER_GUEST);
         assertThat(guestPref.isEnabled()).isEqualTo(true);
         assertThat(guestPref.isSelectable()).isEqualTo(true);
-        assertThat(guestPref.getOnPreferenceClickListener()).isSameAs(mFragment);
+        assertThat(guestPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment);
     }
 
     @Test
@@ -437,7 +437,7 @@
         assertThat(userPref.getKey()).isEqualTo("id=" + INACTIVE_SECONDARY_USER_ID);
         assertThat(userPref.isEnabled()).isEqualTo(true);
         assertThat(userPref.isSelectable()).isEqualTo(true);
-        assertThat(userPref.getOnPreferenceClickListener()).isSameAs(mFragment);
+        assertThat(userPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment);
     }
 
     @Test
@@ -457,7 +457,7 @@
         assertThat(userPref.getSummary()).isEqualTo("Restricted profile");
         assertThat(userPref.isEnabled()).isEqualTo(true);
         assertThat(userPref.isSelectable()).isEqualTo(true);
-        assertThat(userPref.getOnPreferenceClickListener()).isSameAs(mFragment);
+        assertThat(userPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment);
     }
 
     @Test
@@ -494,7 +494,7 @@
         assertThat(userPref.getSummary()).isEqualTo("Not set up - Restricted profile");
         assertThat(userPref.isEnabled()).isEqualTo(true);
         assertThat(userPref.isSelectable()).isEqualTo(true);
-        assertThat(userPref.getOnPreferenceClickListener()).isSameAs(mFragment);
+        assertThat(userPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment);
     }
 
     @Test
@@ -519,7 +519,7 @@
         assertThat(userPref.getSummary()).isEqualTo("Not set up");
         assertThat(userPref.isEnabled()).isEqualTo(false);
         assertThat(userPref.isSelectable()).isEqualTo(true);
-        assertThat(userPref.getOnPreferenceClickListener()).isSameAs(mFragment);
+        assertThat(userPref.getOnPreferenceClickListener()).isSameInstanceAs(mFragment);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/utils/LocalClassLoaderContextThemeWrapperTest.java b/tests/robotests/src/com/android/settings/utils/LocalClassLoaderContextThemeWrapperTest.java
index f7702be..5a17622 100644
--- a/tests/robotests/src/com/android/settings/utils/LocalClassLoaderContextThemeWrapperTest.java
+++ b/tests/robotests/src/com/android/settings/utils/LocalClassLoaderContextThemeWrapperTest.java
@@ -36,6 +36,6 @@
         final Class clazz = LocalClassLoaderContextThemeWrapperTest.class;
         mContextThemeWrapper = new LocalClassLoaderContextThemeWrapper(clazz, context, 0);
 
-        assertThat(mContextThemeWrapper.getClassLoader()).isSameAs(clazz.getClassLoader());
+        assertThat(mContextThemeWrapper.getClassLoader()).isSameInstanceAs(clazz.getClassLoader());
     }
 }
diff --git a/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java b/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
index df9a2c1..f73d0f7 100644
--- a/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
@@ -105,7 +105,7 @@
         mController = EntityHeaderController.newInstance(mActivity, mFragment, inputView);
         View view = mController.done(mActivity);
 
-        assertThat(view).isSameAs(inputView);
+        assertThat(view).isSameInstanceAs(inputView);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
index 9521e7a..89df035 100644
--- a/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
@@ -36,6 +36,6 @@
 
         final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext, xmlId);
         assertThat(keys).isNotNull();
-        assertThat(niks).containsAllIn(keys);
+        assertThat(niks).containsAtLeastElementsIn(keys);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
index 81615f2..c9d2119 100644
--- a/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
@@ -103,7 +103,7 @@
             preferenceKeys.add(controller.getPreferenceKey());
         }
 
-        assertThat(preferenceScreenKeys).containsAllIn(preferenceKeys);
+        assertThat(preferenceScreenKeys).containsAtLeastElementsIn(preferenceKeys);
     }
 
     @Test
diff --git a/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java b/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java
index cc0253f..037c805 100644
--- a/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java
+++ b/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java
@@ -27,6 +27,7 @@
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.hamcrest.CoreMatchers.not;
 
@@ -80,7 +81,7 @@
         assertThat(skipOrClearButton.getText()).isEqualTo(mContext.getString(R.string.skip_label));
         assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
         skipOrClearButton.performClick();
-        assertThat(activity.isFinishing()).named("Is finishing").isTrue();
+        assertWithMessage("Is finishing").that(activity.isFinishing()).isTrue();
     }
 
     @Test
