[automerger skipped] Import translations. DO NOT MERGE
am: f20fa5b865 -s ours
am skip reason: subject contains skip directive

Change-Id: I00e06f87ecd29895585bdfc45291c6a25e63ec10
diff --git a/Android.mk b/Android.mk
index f7bddf2..4bb74f4 100644
--- a/Android.mk
+++ b/Android.mk
@@ -21,13 +21,15 @@
 LOCAL_MODULE_TAGS := optional
 LOCAL_PROGUARD_FLAG_FILES := proguard.cfg
 
+LOCAL_PRODUCT_MODULE := true
 LOCAL_PRIVILEGED_MODULE := true
+LOCAL_REQUIRED_MODULES := privapp_whitelist_com.android.storagemanager
 
 LOCAL_STATIC_ANDROID_LIBRARIES := \
-    android-support-v14-preference \
-    android-support-v7-appcompat \
-    android-support-v7-preference \
-    android-support-v7-recyclerview
+      androidx.legacy_legacy-preference-v14 \
+      androidx.appcompat_appcompat \
+      androidx.preference_preference \
+      androidx.recyclerview_recyclerview
 
 LOCAL_USE_AAPT2 := true
 
@@ -43,4 +45,4 @@
 # Use the following include to make our test apk.
 ifeq (,$(ONE_SHOT_MAKEFILE))
 include $(call all-makefiles-under,$(LOCAL_PATH))
-endif
\ No newline at end of file
+endif
diff --git a/CleanSpec.mk b/CleanSpec.mk
new file mode 100644
index 0000000..e844614
--- /dev/null
+++ b/CleanSpec.mk
@@ -0,0 +1,50 @@
+# Copyright (C) 2019 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.
+#
+
+# If you don't need to do a full clean build but would like to touch
+# a file or delete some intermediate files, add a clean step to the end
+# of the list.  These steps will only be run once, if they haven't been
+# run before.
+#
+# E.g.:
+#     $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
+#     $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
+#
+# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
+# files that are missing or have been moved.
+#
+# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
+# Use $(OUT_DIR) to refer to the "out" directory.
+#
+# If you need to re-do something that's already mentioned, just copy
+# the command and add it to the bottom of the list.  E.g., if a change
+# that you made last week required touching a file and a change you
+# made today requires touching the same file, just copy the old
+# touch step and add it to the end of the list.
+#
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
+
+# For example:
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
+#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
+#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app/StorageManager)
+
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
diff --git a/proguard.cfg b/proguard.cfg
index b4e8c79..4fc57b4 100644
--- a/proguard.cfg
+++ b/proguard.cfg
@@ -1,22 +1,7 @@
--optimizationpasses 5
 -dontusemixedcaseclassnames
 -dontskipnonpubliclibraryclasses
 -dontpreverify
 -verbose
--optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-
--keep public class * extends android.app.Activity
--keep public class * extends android.app.Application
--keep public class * extends android.app.Service
--keep public class * extends android.content.BroadcastReceiver
--keep public class * extends android.content.ContentProvider
--keep public class * extends android.preference.Preference
--keep public class android.support.v7.preference.Preference {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
--keep public class * extends android.support.v7.preference.Preference {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
 
 -keepclasseswithmembernames class * {
     native <methods>;
@@ -43,9 +28,9 @@
   public static final android.os.Parcelable$Creator *;
 }
 
--keep @android.support.annotation.Keep class *
+-keep @androidx.annotation.Keep class *
 -keepclassmembers class * {
-    @android.support.annotation.Keep *;
+    @androidx.annotation.Keep *;
 }
 
 -keep class com.android.storagemanager.overlay.FeatureFactoryImpl
diff --git a/robotests/Android.mk b/robotests/Android.mk
index 0ef13d7..dbc010d 100644
--- a/robotests/Android.mk
+++ b/robotests/Android.mk
@@ -1,40 +1,47 @@
-#############################################
-# Add app-specific Robolectric test target. #
-#############################################
+#############################################################
+# StorageManager Robolectric test target.                   #
+#############################################################
 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 
+LOCAL_MODULE := StorageManagerRoboTests
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-# Include the testing libraries (JUnit4 + Robolectric libs).
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    platform-robolectric-android-all-stubs \
+LOCAL_JAVA_RESOURCE_DIRS := config
+
+LOCAL_JAVA_LIBRARIES := \
+    robolectric_android-all-stub \
+    Robolectric_all-target \
     mockito-robolectric-prebuilt \
     truth-prebuilt
 
-LOCAL_JAVA_LIBRARIES := \
-    junit \
-    platform-robolectric-3.6.1-prebuilt
-
 LOCAL_INSTRUMENTATION_FOR := StorageManager
-LOCAL_MODULE := StorageManagerRoboTests
 
 LOCAL_MODULE_TAGS := optional
 
+# Generate test_config.properties
+include external/robolectric-shadows/gen_test_config.mk
+
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
 #############################################################
-# Add Robolectric runner target to run the previous target. #
+# StorageManager runner target to run the previous target.  #
 #############################################################
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := RunStorageManagerRoboTests
 
-LOCAL_SDK_VERSION := current
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    StorageManagerRoboTests
+LOCAL_JAVA_LIBRARIES := \
+    StorageManagerRoboTests \
+    robolectric_android-all-stub \
+    Robolectric_all-target \
+    mockito-robolectric-prebuilt \
+    truth-prebuilt
 
 LOCAL_TEST_PACKAGE := StorageManager
 
-include prebuilts/misc/common/robolectric/3.6.1/run_robotests.mk
+LOCAL_ROBOTEST_TIMEOUT := 36000
+
+include external/robolectric-shadows/run_robotests.mk
diff --git a/robotests/config/robolectric.properties b/robotests/config/robolectric.properties
new file mode 100644
index 0000000..850557a
--- /dev/null
+++ b/robotests/config/robolectric.properties
@@ -0,0 +1 @@
+sdk=NEWEST_SDK
\ No newline at end of file
diff --git a/robotests/src/android/util/IconDrawableFactory.java b/robotests/src/android/util/IconDrawableFactory.java
deleted file mode 100644
index 47f9b55..0000000
--- a/robotests/src/android/util/IconDrawableFactory.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-package android.util;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageItemInfo;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-
-/** This class is only needed to get around Robolectric issue. */
-public class IconDrawableFactory {
-
-    public static IconDrawableFactory newInstance(Context context) {
-        return new IconDrawableFactory();
-    }
-
-    public Drawable getBadgedIcon(ApplicationInfo appInfo) {
-        return getBadgedIcon(appInfo, 0);
-    }
-
-    public Drawable getBadgedIcon(ApplicationInfo appInfo, int userId) {
-        return getBadgedIcon(appInfo, appInfo, userId);
-    }
-
-    public Drawable getBadgedIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo, int userId) {
-        return new ColorDrawable(0);
-    }
-}
diff --git a/robotests/src/com/android/storagemanager/automatic/AutomaticStorageBroadcastReceiverTest.java b/robotests/src/com/android/storagemanager/automatic/AutomaticStorageBroadcastReceiverTest.java
index 3056b7c..2840003 100644
--- a/robotests/src/com/android/storagemanager/automatic/AutomaticStorageBroadcastReceiverTest.java
+++ b/robotests/src/com/android/storagemanager/automatic/AutomaticStorageBroadcastReceiverTest.java
@@ -16,30 +16,28 @@
 
 package com.android.storagemanager.automatic;
 
-import android.app.job.JobInfo;
-import android.app.job.JobScheduler;
-import android.content.Context;
-import android.content.Intent;
-import com.android.storagemanager.testing.TestingConstants;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
-
-import java.util.List;
-
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
+import android.content.Context;
+import android.content.Intent;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.List;
+import org.robolectric.RobolectricTestRunner;
+
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest=TestingConstants.MANIFEST, sdk=TestingConstants.SDK_VERSION)
 public class AutomaticStorageBroadcastReceiverTest {
     @Mock private Context mMockContext;
     @Mock private JobScheduler mJobScheduler;
diff --git a/robotests/src/com/android/storagemanager/automatic/AutomaticStorageManagementJobServiceTest.java b/robotests/src/com/android/storagemanager/automatic/AutomaticStorageManagementJobServiceTest.java
index 27bd7c8..0ccc893 100644
--- a/robotests/src/com/android/storagemanager/automatic/AutomaticStorageManagementJobServiceTest.java
+++ b/robotests/src/com/android/storagemanager/automatic/AutomaticStorageManagementJobServiceTest.java
@@ -17,12 +17,12 @@
 package com.android.storagemanager.automatic;
 
 import static com.google.common.truth.Truth.assertThat;
-
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.nullable;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -35,6 +35,7 @@
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.BatteryManager;
+import android.os.SystemProperties;
 import android.os.storage.StorageManager;
 import android.os.storage.VolumeInfo;
 import android.provider.Settings;
@@ -42,10 +43,7 @@
 import com.android.settingslib.deviceinfo.StorageVolumeProvider;
 import com.android.storagemanager.overlay.FeatureFactory;
 import com.android.storagemanager.overlay.StorageManagementJobProvider;
-import com.android.storagemanager.testing.StorageManagerShadowSystemProperties;
-import com.android.storagemanager.testing.TestingConstants;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -53,7 +51,7 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.shadows.ShadowApplication;
 import org.robolectric.util.ReflectionHelpers;
 
@@ -61,21 +59,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.nullable;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
 @RunWith(RobolectricTestRunner.class)
-@Config(
-    manifest = TestingConstants.MANIFEST,
-    sdk = TestingConstants.SDK_VERSION,
-    shadows = {StorageManagerShadowSystemProperties.class}
-)
 public class AutomaticStorageManagementJobServiceTest {
     @Mock private BatteryManager mBatteryManager;
     @Mock private NotificationManager mNotificationManager;
@@ -87,6 +71,7 @@
     @Mock private StorageVolumeProvider mStorageVolumeProvider;
     @Mock private AutomaticStorageManagementJobService.Clock mClock;
     private AutomaticStorageManagementJobService mJobService;
+    private Context mContext;
     private ShadowApplication mApplication;
     private List<VolumeInfo> mVolumes;
 
@@ -119,6 +104,7 @@
                         nullable(StorageStatsManager.class), eq(mVolumeInfo)))
                 .thenReturn(100L);
 
+        mContext = RuntimeEnvironment.application;
         mApplication = ShadowApplication.getInstance();
         mApplication.setSystemService(Context.BATTERY_SERVICE, mBatteryManager);
         mApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNotificationManager);
@@ -137,6 +123,7 @@
 
         // And we can't forget to initialize the actual job service.
         mJobService = spy(Robolectric.setupService(AutomaticStorageManagementJobService.class));
+        mJobService.onBind(null);
         mJobService.setStorageVolumeProvider(mStorageVolumeProvider);
         mJobService.setClock(mClock);
 
@@ -148,11 +135,6 @@
         when(mJobService.getResources()).thenReturn(fakeResources);
     }
 
-    @After
-    public void tearDown() {
-        StorageManagerShadowSystemProperties.clear();
-    }
-
     @Test
     public void testJobRequiresCharging() {
         when(mBatteryManager.isCharging()).thenReturn(false);
@@ -192,7 +174,7 @@
 
     @Test
     public void testASMJobRunsWithValidConditionsIfEnabledByDefaultAndUnset() {
-        StorageManagerShadowSystemProperties.put("ro.storage_manager.enabled", "true");
+        SystemProperties.set("ro.storage_manager.enabled", "true");
         assertThat(mJobService.onStartJob(mJobParameters)).isFalse();
         assertStorageManagerJobRan();
     }
@@ -225,7 +207,7 @@
 
     @Test
     public void testNonDefaultDaysToRetain() {
-        ContentResolver resolver = mApplication.getApplicationContext().getContentResolver();
+        ContentResolver resolver = mContext.getContentResolver();
         Settings.Secure.putInt(resolver, Settings.Secure.AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN,
                 30);
         activateASM();
@@ -281,7 +263,7 @@
 
     @Test
     public void disableSmartStorageIfPastThreshold() throws Exception {
-        ContentResolver resolver = mApplication.getApplicationContext().getContentResolver();
+        ContentResolver resolver = mContext.getContentResolver();
         activateASM();
 
         AutomaticStorageManagementJobService.Clock fakeClock =
@@ -290,7 +272,7 @@
         when(mStorageManagementJobProvider.getDisableThresholdMillis(any(Context.class)))
                 .thenReturn(1000L);
         AutomaticStorageManagementJobService.maybeDisableDueToPolicy(
-                mStorageManagementJobProvider, mApplication.getApplicationContext(), fakeClock);
+                mStorageManagementJobProvider, mContext, fakeClock);
 
         assertThat(
                         Settings.Secure.getInt(
@@ -300,7 +282,7 @@
 
     @Test
     public void dontDisableSmartStorageIfPastThresholdAndDisabledInThePast() throws Exception {
-        ContentResolver resolver = mApplication.getApplicationContext().getContentResolver();
+        ContentResolver resolver = mContext.getContentResolver();
         activateASM();
         Settings.Secure.putInt(
                 resolver, Settings.Secure.AUTOMATIC_STORAGE_MANAGER_TURNED_OFF_BY_POLICY, 1);
@@ -311,7 +293,7 @@
         when(mStorageManagementJobProvider.getDisableThresholdMillis(any(Context.class)))
                 .thenReturn(1000L);
         AutomaticStorageManagementJobService.maybeDisableDueToPolicy(
-                mStorageManagementJobProvider, mApplication.getApplicationContext(), fakeClock);
+                mStorageManagementJobProvider, mContext, fakeClock);
 
         assertThat(
                         Settings.Secure.getInt(
@@ -321,7 +303,7 @@
 
     @Test
     public void logDisabledByPolicyIfPastThreshold() throws Exception {
-        ContentResolver resolver = mApplication.getApplicationContext().getContentResolver();
+        ContentResolver resolver = mContext.getContentResolver();
         activateASM();
 
         AutomaticStorageManagementJobService.Clock fakeClock =
@@ -330,7 +312,7 @@
         when(mStorageManagementJobProvider.getDisableThresholdMillis(any(Context.class)))
                 .thenReturn(1000L);
         AutomaticStorageManagementJobService.maybeDisableDueToPolicy(
-                mStorageManagementJobProvider, mApplication.getApplicationContext(), fakeClock);
+                mStorageManagementJobProvider, mContext, fakeClock);
 
         assertThat(
                         Settings.Secure.getInt(
@@ -341,7 +323,7 @@
 
     @Test
     public void dontDisableSmartStorageIfNotPastThreshold() throws Exception {
-        ContentResolver resolver = mApplication.getApplicationContext().getContentResolver();
+        ContentResolver resolver = mContext.getContentResolver();
         activateASM();
 
         AutomaticStorageManagementJobService.Clock fakeClock =
@@ -350,7 +332,7 @@
         when(mStorageManagementJobProvider.getDisableThresholdMillis(any(Context.class)))
                 .thenReturn(1000L);
         AutomaticStorageManagementJobService.maybeDisableDueToPolicy(
-                mStorageManagementJobProvider, mApplication.getApplicationContext(), fakeClock);
+                mStorageManagementJobProvider, mContext, fakeClock);
 
         assertThat(
                         Settings.Secure.getInt(
@@ -378,7 +360,7 @@
     }
 
     private void activateASM() {
-        ContentResolver resolver = mApplication.getApplicationContext().getContentResolver();
+        ContentResolver resolver = mContext.getContentResolver();
         Settings.Secure.putInt(resolver, Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED, 1);
     }
 }
diff --git a/robotests/src/com/android/storagemanager/automatic/DownloadsDeletionTypeTest.java b/robotests/src/com/android/storagemanager/automatic/DownloadsDeletionTypeTest.java
index b5e7737..a669b13 100644
--- a/robotests/src/com/android/storagemanager/automatic/DownloadsDeletionTypeTest.java
+++ b/robotests/src/com/android/storagemanager/automatic/DownloadsDeletionTypeTest.java
@@ -16,32 +16,31 @@
 
 package com.android.storagemanager.automatic;
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
 import android.os.Bundle;
 import android.os.Environment;
+
 import com.android.storagemanager.deletionhelper.DeletionHelperSettings;
 import com.android.storagemanager.deletionhelper.DeletionType;
 import com.android.storagemanager.deletionhelper.DeletionType.LoadingStatus;
 import com.android.storagemanager.deletionhelper.DownloadsDeletionType;
 import com.android.storagemanager.deletionhelper.FetchDownloadsLoader.DownloadsResult;
-import com.android.storagemanager.testing.TestingConstants;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
 
 import java.io.File;
 import java.io.FileWriter;
 import java.util.Set;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest= TestingConstants.MANIFEST, sdk=23)
 public class DownloadsDeletionTypeTest {
     private DownloadsDeletionType mDeletion;
     private File mDownloadsDirectory;
@@ -54,7 +53,7 @@
     }
 
     @Test
-    public void testInitializeWithUncheckedFiles() throws Exception {
+    public void testInitializeWithUncheckedFiles() {
         File temp = new File(mDownloadsDirectory, "temp");
         File temp2 = new File(mDownloadsDirectory, "temp2");
         String[] filePaths = new String[2];
@@ -67,7 +66,7 @@
     }
 
     @Test
-    public void testFetchDownloads() throws Exception {
+    public void testFetchDownloads() {
         File temp = new File(mDownloadsDirectory, "temp");
         File temp2 = new File(mDownloadsDirectory, "temp2");
         DownloadsResult result = new DownloadsResult();
@@ -82,7 +81,7 @@
     }
 
     @Test
-    public void testSetChecked() throws Exception {
+    public void testSetChecked() {
         File temp = new File(mDownloadsDirectory, "temp");
         DownloadsResult result = new DownloadsResult();
         result.files.add(temp);
@@ -121,7 +120,7 @@
     }
 
     @Test
-    public void testSaveAndRestoreRemembersUncheckedFiles() throws Exception {
+    public void testSaveAndRestoreRemembersUncheckedFiles() {
         File temp = new File(mDownloadsDirectory, "temp");
         File temp2 = new File(mDownloadsDirectory, "temp2");
         DownloadsResult result = new DownloadsResult();
@@ -140,7 +139,7 @@
     }
 
     @Test
-    public void testCallbackOnFileLoad() throws Exception {
+    public void testCallbackOnFileLoad() {
         File temp = new File(mDownloadsDirectory, "temp");
         File temp2 = new File(mDownloadsDirectory, "temp2");
         DownloadsResult result = new DownloadsResult();
diff --git a/robotests/src/com/android/storagemanager/automatic/JobPreconditionsTest.java b/robotests/src/com/android/storagemanager/automatic/JobPreconditionsTest.java
index 4c9e93a..2c6d5d4 100644
--- a/robotests/src/com/android/storagemanager/automatic/JobPreconditionsTest.java
+++ b/robotests/src/com/android/storagemanager/automatic/JobPreconditionsTest.java
@@ -16,12 +16,18 @@
 
 package com.android.storagemanager.automatic;
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+import static org.robolectric.Shadows.shadowOf;
+
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.Network;
 import android.net.NetworkInfo;
 import android.os.BatteryManager;
-import com.android.storagemanager.testing.TestingConstants;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -31,26 +37,18 @@
 import org.mockito.stubbing.Answer;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.when;
-import static org.robolectric.Shadows.shadowOf;
-
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest=TestingConstants.MANIFEST, sdk=23)
 public class JobPreconditionsTest {
     // TODO: Instead of mocking, use ShadowConnectivityManager. Right now, using it causes a crash.
     //       Use the shadow once we get it working.
-    @Mock ConnectivityManager mConnectivityManager;
-    @Mock BatteryManager mBatteryManager;
-    @Mock Network mWifiNetwork;
-    @Mock NetworkInfo mWifiNetworkInfo;
+    @Mock private ConnectivityManager mConnectivityManager;
+    @Mock private BatteryManager mBatteryManager;
+    @Mock private Network mWifiNetwork;
+    @Mock private NetworkInfo mWifiNetworkInfo;
     private Context mContext;
     private ArrayList<Network> mNetworkList;
     private HashMap<Network, NetworkInfo> mNetworkMap;
diff --git a/robotests/src/com/android/storagemanager/automatic/NotificationControllerTest.java b/robotests/src/com/android/storagemanager/automatic/NotificationControllerTest.java
index af74ad7..215dde2 100644
--- a/robotests/src/com/android/storagemanager/automatic/NotificationControllerTest.java
+++ b/robotests/src/com/android/storagemanager/automatic/NotificationControllerTest.java
@@ -16,31 +16,36 @@
 
 package com.android.storagemanager.automatic;
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+
+import android.app.Activity;
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.content.Context;
 import android.content.Intent;
 import android.provider.Settings;
-import com.android.storagemanager.testing.TestingConstants;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.shadows.ShadowApplication;
 
 import java.util.concurrent.TimeUnit;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Mockito.*;
-
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest=TestingConstants.MANIFEST, sdk=TestingConstants.SDK_VERSION)
 public class NotificationControllerTest {
     @Mock
     private NotificationManager mNotificationManager;
@@ -56,7 +61,7 @@
         mController = new NotificationController();
         mClock = new FakeClock();
         mController.setClock(mClock);
-        mContext = application.getApplicationContext();
+        mContext = RuntimeEnvironment.application;
     }
 
     @Test
@@ -83,6 +88,7 @@
             mClock.time += TimeUnit.DAYS.toMillis(91);
         }
 
+        reset(mNotificationManager);
         // The next time should show nothing.
         mController.onReceive(mContext,
                 new Intent(NotificationController.INTENT_ACTION_SHOW_NOTIFICATION));
@@ -102,6 +108,7 @@
             mClock.time += TimeUnit.DAYS.toMillis(14);
         }
 
+        reset(mNotificationManager);
         // The next time should show nothing.
         mController.onReceive(mContext,
                 new Intent(NotificationController.INTENT_ACTION_SHOW_NOTIFICATION));
@@ -117,6 +124,7 @@
                 getNotificationIntent(NotificationController.INTENT_ACTION_DISMISS, 1));
         verify(mNotificationManager).cancel(1);
 
+        reset(mNotificationManager);
         // Another attempt should not show a notification.
         mController.onReceive(mContext,
                 new Intent(NotificationController.INTENT_ACTION_SHOW_NOTIFICATION));
@@ -126,7 +134,7 @@
         mClock.time = TimeUnit.DAYS.toMillis(14);
         mController.onReceive(mContext,
                 new Intent(NotificationController.INTENT_ACTION_SHOW_NOTIFICATION));
-        verify(mNotificationManager, times(2)).notify(anyInt(), any(Notification.class));
+        verify(mNotificationManager).notify(anyInt(), any(Notification.class));
     }
 
     @Test
@@ -138,28 +146,33 @@
                 getNotificationIntent(NotificationController.INTENT_ACTION_NO_THANKS, 1));
         verify(mNotificationManager).cancel(1);
 
+        reset(mNotificationManager);
         // Another attempt should not show a notification.
         mController.onReceive(mContext,
                 new Intent(NotificationController.INTENT_ACTION_SHOW_NOTIFICATION));
-        verifyZeroInteractions(mNotificationManager);
+        verifyNoMoreInteractions(mNotificationManager);
 
         // The notification should show against after 90 days.
         mClock.time = TimeUnit.DAYS.toMillis(90);
         mController.onReceive(mContext,
                 new Intent(NotificationController.INTENT_ACTION_SHOW_NOTIFICATION));
-        verify(mNotificationManager, times(2)).notify(anyInt(), any(Notification.class));
+        verify(mNotificationManager).notify(anyInt(), any(Notification.class));
     }
 
     @Test
     public void testActivateStorageManagerIntent() throws Exception {
-        mController.onReceive(mContext,
-                new Intent(NotificationController.INTENT_ACTION_ACTIVATE_ASM));
-        assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
-                Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED)).isEqualTo(1);
+        final Context activity = Robolectric.buildActivity(Activity.class).get();
+        final Intent intent = new Intent(NotificationController.INTENT_ACTION_ACTIVATE_ASM);
+        mController.onReceive(activity, intent);
+        assertThat(
+                        Settings.Secure.getInt(
+                                activity.getContentResolver(),
+                                Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED))
+                .isEqualTo(1);
     }
 
     @Test
-    public void testNotificationIsLocalOnly(){
+    public void testNotificationIsLocalOnly() {
         ArgumentCaptor<Notification> captor = ArgumentCaptor.forClass(Notification.class);
         mController.onReceive(mContext,
                 new Intent(NotificationController.INTENT_ACTION_SHOW_NOTIFICATION));
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceGroupTest.java b/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceGroupTest.java
index 55ee9b3..24719d8 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceGroupTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceGroupTest.java
@@ -18,9 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-import com.android.storagemanager.testing.TestingConstants;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 import java.util.ArrayList;
 import java.util.List;
 import org.junit.Before;
@@ -31,15 +30,13 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
 
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest = TestingConstants.MANIFEST, sdk = TestingConstants.SDK_VERSION)
 public class AppDeletionPreferenceGroupTest {
     @Mock private AppsAsyncLoader.PackageInfo mPackage1;
     @Mock private AppDeletionType mBackend;
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceTest.java b/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceTest.java
index f21dfd8..f0da99b 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceTest.java
@@ -18,27 +18,24 @@
 
 import android.content.Context;
 import com.android.storagemanager.deletionhelper.AppsAsyncLoader.PackageInfo;
-import com.android.storagemanager.testing.TestingConstants;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
 
 import static com.google.common.truth.Truth.assertThat;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest=TestingConstants.MANIFEST, sdk=TestingConstants.SDK_VERSION)
 public class AppDeletionPreferenceTest {
 
     private static final String TEST_PACKAGE_LABEL = "App";
     private static final String TEST_PACKAGE_NAME = "com.package.mcpackageface";
-    public static final long KILOBYTE = 1024L;
-    public static final long HUNDRED_BYTES = 100L;
-    public static final String KB_STRING = "1.00 KB";
-    public static final String HUNDRED_BYTE_STRING = "100 B";
+    private static final long KILOBYTE = 1000L;
+    private static final long HUNDRED_BYTES = 100L;
+    private static final String KB_STRING = "1.00 kB";
+    private static final String HUNDRED_BYTE_STRING = "100 B";
     private Context mContext;
 
     @Before
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionTypeTest.java b/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionTypeTest.java
index a3a29a4..2345c9d 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionTypeTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/AppDeletionTypeTest.java
@@ -17,7 +17,6 @@
 package com.android.storagemanager.deletionhelper;
 
 import com.android.storagemanager.deletionhelper.DeletionType.LoadingStatus;
-import com.android.storagemanager.testing.TestingConstants;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -25,17 +24,15 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.verify;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest = TestingConstants.MANIFEST, sdk = TestingConstants.SDK_VERSION)
 public class AppDeletionTypeTest {
     private static String PACKAGE_NAME = "com.package.package";
 
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/AppStateUsageStatsBridgeTest.java b/robotests/src/com/android/storagemanager/deletionhelper/AppStateUsageStatsBridgeTest.java
index ab3159d..85ad307 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/AppStateUsageStatsBridgeTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/AppStateUsageStatsBridgeTest.java
@@ -23,7 +23,6 @@
 import android.content.pm.PackageInfo;
 import android.os.Looper;
 import com.android.settingslib.applications.ApplicationsState;
-import com.android.storagemanager.testing.TestingConstants;
 import com.android.storagemanager.deletionhelper.AppStateUsageStatsBridge.UsageStatsState;
 import org.junit.Before;
 import org.junit.Test;
@@ -34,7 +33,6 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.Shadows;
-import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowApplication;
 import org.robolectric.shadows.ShadowPackageManager;
 
@@ -43,8 +41,8 @@
 import java.util.concurrent.TimeUnit;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -52,14 +50,13 @@
 import static org.robolectric.Shadows.shadowOf;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest=TestingConstants.MANIFEST, sdk=23)
 public class AppStateUsageStatsBridgeTest {
 
-    public static final String PACKAGE_SYSTEM = "package.system";
+    private static final String PACKAGE_SYSTEM = "package.system";
     private static final long STARTING_TIME = TimeUnit.DAYS.toMillis(1000);
     private static final String PACKAGE_NAME = "package.mcpackageface";
-    public static final String PACKAGE_CLEARABLE = "package.clearable";
-    public static final String PACKAGE_TOO_NEW_TO_DELETE = "package.tooNewToDelete";
+    private static final String PACKAGE_CLEARABLE = "package.clearable";
+    private static final String PACKAGE_TOO_NEW_TO_DELETE = "package.tooNewToDelete";
 
     @Mock private ApplicationsState mState;
     @Mock private ApplicationsState.Session mSession;
@@ -417,13 +414,4 @@
         when(usageStats.getLastTimeUsed()).thenReturn(time);
         mUsageStats.put(packageName, usageStats);
     }
-
-    private class FakeClock extends AppStateUsageStatsBridge.Clock {
-        public long time;
-
-        @Override
-        public long getCurrentTime() {
-            return time;
-        }
-    }
 }
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/AppsAsyncLoaderTest.java b/robotests/src/com/android/storagemanager/deletionhelper/AppsAsyncLoaderTest.java
index f058c84..4fbdf28 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/AppsAsyncLoaderTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/AppsAsyncLoaderTest.java
@@ -21,24 +21,23 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.storage.VolumeInfo;
 import android.text.TextUtils;
+
 import com.android.settingslib.applications.StorageStatsSource;
 import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
-import com.android.settingslib.wrapper.PackageManagerWrapper;
 import com.android.storagemanager.deletionhelper.AppsAsyncLoader.PackageInfo;
-import com.android.storagemanager.testing.StorageManagerRobolectricTestRunner;
-import com.android.storagemanager.testing.TestingConstants;
 import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.Shadows;
-import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowApplication;
 
 import java.util.ArrayList;
@@ -46,28 +45,27 @@
 import java.util.concurrent.TimeUnit;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@RunWith(StorageManagerRobolectricTestRunner.class)
-@Config(manifest = TestingConstants.MANIFEST, sdk = 23)
+@RunWith(RobolectricTestRunner.class)
 public class AppsAsyncLoaderTest {
 
-    public static final String PACKAGE_SYSTEM = "package.system";
+    private static final String PACKAGE_SYSTEM = "package.system";
     private static final long STARTING_TIME = TimeUnit.DAYS.toMillis(1000);
     private static final String PACKAGE_NAME = "package.mcpackageface";
-    public static final String PACKAGE_CLEARABLE = "package.clearable";
-    public static final String PACKAGE_TOO_NEW_TO_DELETE = "package.tooNewToDelete";
-    public static final String PACKAGE_DEFAULT_LAUNCHER = "package.launcherface";
+    private static final String PACKAGE_CLEARABLE = "package.clearable";
+    private static final String PACKAGE_TOO_NEW_TO_DELETE = "package.tooNewToDelete";
+    private static final String PACKAGE_DEFAULT_LAUNCHER = "package.launcherface";
 
     @Mock private UsageStatsManager mUsageStatsManager;
     @Mock private StorageStatsSource mStorageStatsSource;
     @Mock private AppsAsyncLoader.Clock mClock;
-    @Mock private PackageManagerWrapper mPackageManager;
+    @Mock private PackageManager mPackageManager;
     @Mock private AppStorageStats mAppStorageStats;
     private AppsAsyncLoader mLoader;
     private HashMap<String, UsageStats> mUsageStats;
@@ -379,7 +377,7 @@
         try {
             when(mPackageManager.getPackageInfo(eq(info.packageName), anyInt()))
                     .thenReturn(packageInfo);
-            when(mPackageManager.loadLabel(eq(applicationInfo)))
+            when(applicationInfo.loadLabel(eq(mPackageManager)))
                     .thenReturn(applicationInfo.packageName);
         } catch (NameNotFoundException e) {
             e.printStackTrace();
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/CollapsibleCheckboxPreferenceGroupTest.java b/robotests/src/com/android/storagemanager/deletionhelper/CollapsibleCheckboxPreferenceGroupTest.java
index bec2f2b..892ae78 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/CollapsibleCheckboxPreferenceGroupTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/CollapsibleCheckboxPreferenceGroupTest.java
@@ -16,14 +16,16 @@
 
 package com.android.storagemanager.deletionhelper;
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
+
 import android.content.Context;
-import android.support.v7.preference.PreferenceViewHolder;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.LinearLayout;
-import com.android.storagemanager.deletionhelper.DeletionType.LoadingStatus;
-import com.android.storagemanager.testing.TestingConstants;
+import androidx.preference.PreferenceViewHolder;
 import com.android.storagemanager.R;
+import com.android.storagemanager.deletionhelper.DeletionType.LoadingStatus;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -32,13 +34,8 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest = TestingConstants.MANIFEST, sdk = TestingConstants.SDK_VERSION)
 public class CollapsibleCheckboxPreferenceGroupTest {
 
     private Context mContext;
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/ConfirmDeletionDialogTest.java b/robotests/src/com/android/storagemanager/deletionhelper/ConfirmDeletionDialogTest.java
index 7a29592..15a6124 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/ConfirmDeletionDialogTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/ConfirmDeletionDialogTest.java
@@ -22,25 +22,22 @@
 import android.widget.Button;
 import android.widget.TextView;
 
-import com.android.storagemanager.testing.TestingConstants;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
 
 import static org.robolectric.util.FragmentTestUtil.startFragment;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest = TestingConstants.MANIFEST, sdk = TestingConstants.SDK_VERSION)
 public class ConfirmDeletionDialogTest {
     @Test
     public void testOnCreateDialog_saysCorrectStrings() {
         final ConfirmDeletionDialog alertDialog = ConfirmDeletionDialog.newInstance(100L);
         startFragment(alertDialog);
 
-        TextView message = (TextView) alertDialog.getDialog().findViewById(R.id.message);
-        Button button1 = (Button) alertDialog.getDialog().findViewById(android.R.id.button1);
-        Button button2 = (Button) alertDialog.getDialog().findViewById(android.R.id.button2);
+        TextView message = alertDialog.getDialog().findViewById(R.id.message);
+        Button button1 = alertDialog.getDialog().findViewById(android.R.id.button1);
+        Button button2 = alertDialog.getDialog().findViewById(android.R.id.button2);
         assertThat(message.getText().toString())
                 .isEqualTo("100 B of content will be removed from your device");
         assertThat(button1.getText().toString()).isEqualTo("Free up space");
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/DeletionHelperSettingsTest.java b/robotests/src/com/android/storagemanager/deletionhelper/DeletionHelperSettingsTest.java
index 388f8b8..e724b1d 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/DeletionHelperSettingsTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/DeletionHelperSettingsTest.java
@@ -18,9 +18,9 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -28,32 +28,28 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.os.storage.StorageManager;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.storagemanager.testing.StorageManagerRobolectricTestRunner;
-import com.android.storagemanager.testing.TestingConstants;
+import androidx.preference.PreferenceScreen;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
 
-@RunWith(StorageManagerRobolectricTestRunner.class)
-@Config(manifest = TestingConstants.MANIFEST, sdk = TestingConstants.SDK_VERSION)
+@RunWith(RobolectricTestRunner.class)
 public class DeletionHelperSettingsTest {
-    private static final String URI_APP_SCHEME = "android-app";
     private static final String PACKAGE_NAME = "com.package";
     private Context mContext;
     private PackageManager mPackageManager;
 
     @Before
-    public void setUp() throws Exception {
+    public void setUp() {
         mContext = spy(RuntimeEnvironment.application);
         mPackageManager = spy(mContext.getPackageManager());
     }
@@ -79,7 +75,7 @@
     }
 
     @Test
-    public void downloadsNotDeletedInNoThresholdMode() throws Exception {
+    public void downloadsNotDeletedInNoThresholdMode() {
         DeletionHelperSettings settings =
                 spy(DeletionHelperSettings.newInstance(AppsAsyncLoader.NO_THRESHOLD));
         PreferenceScreen preferenceScreen = mock(PreferenceScreen.class);
@@ -94,7 +90,7 @@
     }
 
     @Test
-    public void onFreeableChangeChecksForNull() throws Exception {
+    public void onFreeableChangeChecksForNull() {
         DeletionHelperSettings settings =
                 DeletionHelperSettings.newInstance(AppsAsyncLoader.NO_THRESHOLD);
         AppDeletionType appBackend = mock(AppDeletionType.class);
@@ -103,4 +99,59 @@
 
         settings.onFreeableChanged(0, 0L);
     }
+
+    @Test
+    public void requestingSpecificBytesToClearSetsOkResultCodeOnSufficientClear() {
+        DeletionHelperSettings settings =
+                spy(DeletionHelperSettings.newInstance(AppsAsyncLoader.NORMAL_THRESHOLD));
+        settings.mBytesToFree = 1000L;
+        PreferenceScreen preferenceScreen = mock(PreferenceScreen.class);
+        doReturn(preferenceScreen).when(settings).getPreferenceScreen();
+        // The deletion helper will not delete items which aren't viewable on the UI -- this
+        // will trick it into thinking there's an UI.
+        settings.mDownloadsPreference = mock(DownloadsDeletionPreferenceGroup.class);
+        DownloadsDeletionType downloadsDeletionType = mock(DownloadsDeletionType.class);
+        settings.setDownloadsDeletionType(downloadsDeletionType);
+        when(downloadsDeletionType.getFreeableBytes(any(Boolean.class))).thenReturn(1001L);
+
+        settings.clearData();
+
+        assertThat(settings.getResultCode()).isEqualTo(Activity.RESULT_OK);
+    }
+
+    @Test
+    public void requestingSpecificBytesToClearSetsNegativeResultCodeOnSufficientClear() {
+        DeletionHelperSettings settings =
+                spy(DeletionHelperSettings.newInstance(AppsAsyncLoader.NORMAL_THRESHOLD));
+        settings.mBytesToFree = 1000L;
+        PreferenceScreen preferenceScreen = mock(PreferenceScreen.class);
+        doReturn(preferenceScreen).when(settings).getPreferenceScreen();
+        // The deletion helper will not delete items which aren't viewable on the UI -- this
+        // will trick it into thinking there's an UI
+        settings.mDownloadsPreference = mock(DownloadsDeletionPreferenceGroup.class);
+        DownloadsDeletionType downloadsDeletionType = mock(DownloadsDeletionType.class);
+        settings.setDownloadsDeletionType(downloadsDeletionType);
+        when(downloadsDeletionType.getFreeableBytes(any(Boolean.class))).thenReturn(999L);
+
+        settings.clearData();
+
+        assertThat(settings.getResultCode()).isEqualTo(Activity.RESULT_CANCELED);
+    }
+
+    @Test
+    public void requestingSpecificBytesToClearSetsNegativeResultCodeOnNoClear() {
+        DeletionHelperSettings settings =
+                spy(DeletionHelperSettings.newInstance(AppsAsyncLoader.NORMAL_THRESHOLD));
+        settings.mBytesToFree = 1000L;
+        PreferenceScreen preferenceScreen = mock(PreferenceScreen.class);
+        doReturn(preferenceScreen).when(settings).getPreferenceScreen();
+        // The deletion helper will not delete items which aren't viewable on the UI -- this
+        // will trick it into thinking there's an UI.
+        settings.mDownloadsPreference = mock(DownloadsDeletionPreferenceGroup.class);
+        DownloadsDeletionType downloadsDeletionType = mock(DownloadsDeletionType.class);
+        settings.setDownloadsDeletionType(downloadsDeletionType);
+        when(downloadsDeletionType.getFreeableBytes(any(Boolean.class))).thenReturn(999L);
+
+        assertThat(settings.getResultCode()).isEqualTo(Activity.RESULT_CANCELED);
+    }
 }
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/DownloadsDeletionPreferenceGroupTest.java b/robotests/src/com/android/storagemanager/deletionhelper/DownloadsDeletionPreferenceGroupTest.java
index c4b5db7..676dee3 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/DownloadsDeletionPreferenceGroupTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/DownloadsDeletionPreferenceGroupTest.java
@@ -22,13 +22,10 @@
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
-import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
-import android.support.v7.preference.PreferenceManager;
+import androidx.preference.PreferenceManager;
 
-import com.android.storagemanager.testing.StorageManagerRobolectricTestRunner;
-import com.android.storagemanager.testing.TestingConstants;
 import com.android.storagemanager.utils.IconProvider;
 
 import org.junit.Before;
@@ -38,19 +35,17 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
 
 import java.io.File;
 
-@RunWith(StorageManagerRobolectricTestRunner.class)
-@Config(manifest = TestingConstants.MANIFEST, sdk = TestingConstants.SDK_VERSION)
+@RunWith(RobolectricTestRunner.class)
 public class DownloadsDeletionPreferenceGroupTest {
     @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
 
     @Mock private IconProvider mIconProvider;
 
-    private Context mContext;
     private DownloadsDeletionPreferenceGroup mGroup;
     private DownloadsDeletionType mType;
     private File mTempDir;
@@ -58,12 +53,11 @@
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
 
-        mGroup = spy(new DownloadsDeletionPreferenceGroup(mContext));
+        mGroup = spy(new DownloadsDeletionPreferenceGroup(RuntimeEnvironment.application));
         final PreferenceManager preferenceManager = mock(PreferenceManager.class);
         when(mGroup.getPreferenceManager()).thenReturn(preferenceManager);
-        mType = new DownloadsDeletionType(mContext, new String[0]);
+        mType = new DownloadsDeletionType(RuntimeEnvironment.application, new String[0]);
 
         mTempDir = temporaryFolder.newFolder();
 
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/DownloadsFilePreferenceTest.java b/robotests/src/com/android/storagemanager/deletionhelper/DownloadsFilePreferenceTest.java
index e62252a..215b189 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/DownloadsFilePreferenceTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/DownloadsFilePreferenceTest.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.text.format.DateUtils;
-import com.android.storagemanager.testing.TestingConstants;
 import com.android.storagemanager.utils.IconProvider;
 import java.io.File;
 import java.io.FileWriter;
@@ -31,15 +30,13 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest = TestingConstants.MANIFEST, sdk = TestingConstants.SDK_VERSION)
 public class DownloadsFilePreferenceTest {
 
     //23-01-2100
@@ -93,7 +90,7 @@
     }
 
     @Test
-    public void compareTo_fallbackToFileName() throws Exception {
+    public void compareTo_fallbackToFileName() {
         File file = new File(mTempDir, "test.bmp");
         DownloadsFilePreference preference =
                 new DownloadsFilePreference(mContext, file, mIconProvider);
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/LoadingSpinnerControllerTest.java b/robotests/src/com/android/storagemanager/deletionhelper/LoadingSpinnerControllerTest.java
index 6c9414d..4876516 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/LoadingSpinnerControllerTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/LoadingSpinnerControllerTest.java
@@ -18,48 +18,37 @@
 
 import android.view.View;
 
-import com.android.storagemanager.testing.StorageManagerRobolectricTestRunner;
-import com.android.storagemanager.testing.TestingConstants;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.robolectric.annotation.Config;
+import org.robolectric.RobolectricTestRunner;
 
-import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-@RunWith(StorageManagerRobolectricTestRunner.class)
-@Config(manifest = TestingConstants.MANIFEST, sdk = TestingConstants.SDK_VERSION)
+@RunWith(RobolectricTestRunner.class)
 public class LoadingSpinnerControllerTest {
-    @Mock DeletionHelperActivity mActivity;
-    @Mock View mListView;
-    LoadingSpinnerController mController;
+    @Mock private DeletionHelperActivity mActivity;
+    @Mock private View mListView;
+    private LoadingSpinnerController mController;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
         mController = new LoadingSpinnerController(mActivity);
         doAnswer(
-                        new Answer() {
-                            @Override
-                            public Object answer(InvocationOnMock invocationOnMock)
-                                    throws Throwable {
-                                final boolean isLoading =
-                                        (boolean) (invocationOnMock.getArguments())[1];
-                                when(mActivity.isLoadingVisible()).thenReturn(isLoading);
-                                return null;
-                            }
+                        invocationOnMock -> {
+                            final boolean isLoading = (boolean) invocationOnMock.getArguments()[1];
+                            when(mActivity.isLoadingVisible()).thenReturn(isLoading);
+                            return null;
                         })
                 .when(mActivity)
                 .setLoading(any(View.class), anyBoolean(), anyBoolean());
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/PhotosDeletionPreferenceTest.java b/robotests/src/com/android/storagemanager/deletionhelper/PhotosDeletionPreferenceTest.java
index f731cea..d3f44ff 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/PhotosDeletionPreferenceTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/PhotosDeletionPreferenceTest.java
@@ -16,13 +16,11 @@
 
 package com.android.storagemanager.deletionhelper;
 
-import android.content.Context;
-import android.support.v7.preference.PreferenceViewHolder;
+import androidx.preference.PreferenceViewHolder;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.LinearLayout;
-import com.android.storagemanager.testing.TestingConstants;
 import com.android.storagemanager.R;
 import org.junit.Before;
 import org.junit.Test;
@@ -32,15 +30,12 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.when;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest=TestingConstants.MANIFEST, sdk=TestingConstants.SDK_VERSION)
 public class PhotosDeletionPreferenceTest {
-    private Context mContext;
     private PreferenceViewHolder mHolder;
     private PhotosDeletionPreference mPreference;
     @Mock private DeletionType mDeletionType;
@@ -48,14 +43,16 @@
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mPreference = new PhotosDeletionPreference(mContext, null);
+        mPreference = new PhotosDeletionPreference(RuntimeEnvironment.application, null);
         mPreference.registerDeletionService(mDeletionType);
 
         // Inflate the preference and the widget.
-        LayoutInflater inflater = LayoutInflater.from(mContext);
-        final View view = inflater.inflate(mPreference.getLayoutResource(),
-                new LinearLayout(mContext), false);
+        LayoutInflater inflater = LayoutInflater.from(RuntimeEnvironment.application);
+        final View view =
+                inflater.inflate(
+                        mPreference.getLayoutResource(),
+                        new LinearLayout(RuntimeEnvironment.application),
+                        false);
         inflater.inflate(mPreference.getWidgetLayoutResource(),
                 (ViewGroup) view.findViewById(android.R.id.widget_frame));
 
@@ -93,13 +90,13 @@
 
     @Test
     public void testTitleAndSummaryAfterLoaded() {
-        mPreference.onFreeableChanged(10, 1024L);
+        mPreference.onFreeableChanged(10, 1000L);
         Robolectric.flushBackgroundThreadScheduler();
         Robolectric.flushForegroundThreadScheduler();
         mPreference.onBindViewHolder(mHolder);
 
         assertThat(mPreference.getTitle()).isEqualTo("Backed up photos & videos");
-        assertThat(mPreference.getSummary().toString()).isEqualTo("1.00 KB");
+        assertThat(mPreference.getSummary().toString()).isEqualTo("1.00 kB");
     }
 
     @Test
diff --git a/robotests/src/com/android/storagemanager/deletionhelper/StorageManagerUpsellDialogTest.java b/robotests/src/com/android/storagemanager/deletionhelper/StorageManagerUpsellDialogTest.java
index 5186a6e..f4d4db2 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/StorageManagerUpsellDialogTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/StorageManagerUpsellDialogTest.java
@@ -17,15 +17,12 @@
 package com.android.storagemanager.deletionhelper;
 
 import android.content.Context;
-import com.android.storagemanager.testing.StorageManagerRobolectricTestRunner;
-import com.android.storagemanager.testing.TestingConstants;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
-
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
 
 import java.util.concurrent.TimeUnit;
 
@@ -34,16 +31,14 @@
 import static org.mockito.Mockito.when;
 import static org.robolectric.util.FragmentTestUtil.startFragment;
 
-@RunWith(StorageManagerRobolectricTestRunner.class)
-@Config(manifest= TestingConstants.MANIFEST, sdk=TestingConstants.SDK_VERSION)
+@RunWith(RobolectricTestRunner.class)
 public class StorageManagerUpsellDialogTest {
-    @Mock
-    StorageManagerUpsellDialog.Clock mClock;
+    @Mock private StorageManagerUpsellDialog.Clock mClock;
 
     @Test
     public void testNoThanksMaximumShownTimes() {
         MockitoAnnotations.initMocks(this);
-        final Context context = ShadowApplication.getInstance().getApplicationContext();
+        final Context context = RuntimeEnvironment.application;
         StorageManagerUpsellDialog fragment = StorageManagerUpsellDialog.newInstance(0);
         fragment.setClock(mClock);
 
diff --git a/robotests/src/com/android/storagemanager/testing/StorageManagerRobolectricTestRunner.java b/robotests/src/com/android/storagemanager/testing/StorageManagerRobolectricTestRunner.java
deleted file mode 100644
index 2127023..0000000
--- a/robotests/src/com/android/storagemanager/testing/StorageManagerRobolectricTestRunner.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- */
-package com.android.storagemanager.testing;
-
-import java.util.List;
-import org.junit.runners.model.InitializationError;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
-import org.robolectric.manifest.AndroidManifest;
-import org.robolectric.res.Fs;
-import org.robolectric.res.ResourcePath;
-
-/**
- * Custom test runner for Robolectric UI testing. This adds additional resources needed to run.
- */
-public class StorageManagerRobolectricTestRunner extends RobolectricTestRunner {
-
-    /**
-     * We don't actually want to change this behavior, so we just call super.
-     */
-    public StorageManagerRobolectricTestRunner(Class<?> testClass) throws InitializationError {
-        super(testClass);
-    }
-
-    /**
-     * We are going to create our own custom manifest so that we can add multiple resource
-     * paths to it. This lets us access resources in both StorageManager and SettingsLib in our
-     * tests.
-     */
-    @Override
-    protected AndroidManifest getAppManifest(Config config) {
-        // Using the manifest file's relative path, we can figure out the application directory.
-        final String appRoot = "packages/apps/StorageManager";
-        final String manifestPath = appRoot + "/AndroidManifest.xml";
-        final String resDir = appRoot + "/res";
-        final String assetsDir = appRoot + "/assets";
-
-        // By adding any resources from libraries we need to the AndroidManifest, we can access
-        // them from within the parallel universe's resource loader.
-        return new AndroidManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resDir),
-            Fs.fileFromPath(assetsDir), "com.android.storagemanager") {
-            @Override
-            public List<ResourcePath> getIncludedResourcePaths() {
-                List<ResourcePath> paths = super.getIncludedResourcePaths();
-                paths.add(new ResourcePath(
-                    null,
-                    Fs.fileFromPath("./packages/apps/StorageManager/res"),
-                    null));
-                paths.add(new ResourcePath(
-                    null,
-                    Fs.fileFromPath("./frameworks/base/packages/SettingsLib/res"),
-                    null));
-                paths.add(new ResourcePath(
-                    null,
-                    Fs.fileFromPath("./frameworks/base/core/res/res"),
-                    null));
-                return paths;
-            }
-        };
-    }
-}
\ No newline at end of file
diff --git a/robotests/src/com/android/storagemanager/testing/StorageManagerShadowSystemProperties.java b/robotests/src/com/android/storagemanager/testing/StorageManagerShadowSystemProperties.java
deleted file mode 100644
index 7981afc..0000000
--- a/robotests/src/com/android/storagemanager/testing/StorageManagerShadowSystemProperties.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-
-package com.android.storagemanager.testing;
-
-import android.os.SystemProperties;
-
-import org.robolectric.annotation.Implementation;
-import org.robolectric.annotation.Implements;
-import org.robolectric.shadows.ShadowSystemProperties;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/** TODO: Don't use this. Use an upstreamed version. */
-@Implements(SystemProperties.class)
-public class StorageManagerShadowSystemProperties extends ShadowSystemProperties {
-    private static final Map<String, String> sValues = new HashMap<>();
-
-    @Implementation
-    public static synchronized boolean getBoolean(String key, boolean def) {
-        if (sValues.containsKey(key)) {
-            String val = sValues.get(key);
-            return "y".equals(val)
-                    || "yes".equals(val)
-                    || "1".equals(val)
-                    || "true".equals(val)
-                    || "on".equals(val);
-        }
-        return ShadowSystemProperties.getBoolean(key, def);
-    }
-
-    @Implementation
-    public static synchronized String get(String key) {
-        if (sValues.containsKey(key)) {
-            return sValues.get(key);
-        }
-        return ShadowSystemProperties.get(key);
-    }
-
-    public static synchronized void put(String key, String value) {
-        sValues.put(key, value);
-    }
-
-    @Implementation
-    public static String get(String key, String defaultValue) {
-        String value = sValues.get(key);
-        return value == null ? defaultValue : value;
-    }
-
-    public static synchronized void clear() {
-        sValues.clear();
-    }
-}
diff --git a/robotests/src/com/android/storagemanager/testing/TestingConstants.java b/robotests/src/com/android/storagemanager/testing/TestingConstants.java
deleted file mode 100644
index 21467d8..0000000
--- a/robotests/src/com/android/storagemanager/testing/TestingConstants.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- */
-
-package com.android.storagemanager.testing;
-
-/**
- * Constants that are used in the tests.
- */
-public class TestingConstants {
-
-    /**
-     * The path to the manifest file for testing purposes.
-     */
-    public static final String MANIFEST = "packages/apps/StorageManager/AndroidManifest.xml";
-
-    public static final int SDK_VERSION = 24;
-
-    // Do not instantiate this test class.
-    private TestingConstants() {}
-
-}
diff --git a/robotests/src/com/android/storagemanager/utils/PreferenceListCacheTest.java b/robotests/src/com/android/storagemanager/utils/PreferenceListCacheTest.java
index 76b4278..f62f72e 100644
--- a/robotests/src/com/android/storagemanager/utils/PreferenceListCacheTest.java
+++ b/robotests/src/com/android/storagemanager/utils/PreferenceListCacheTest.java
@@ -17,32 +17,26 @@
 package com.android.storagemanager.utils;
 
 import android.content.Context;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-import com.android.storagemanager.testing.TestingConstants;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(manifest=TestingConstants.MANIFEST, sdk=TestingConstants.SDK_VERSION)
 public class PreferenceListCacheTest {
     @Mock private PreferenceScreen mGroup;
     private PreferenceListCache mCache;
@@ -147,12 +141,12 @@
 
     private void setupMockPreferenceGroup(Preference[] preferences) {
         when(mGroup.getPreferenceCount()).thenReturn(preferences.length);
-        when(mGroup.getPreference(anyInt())).thenAnswer(new Answer<Preference>() {
-            @Override
-            public Preference answer(InvocationOnMock invocation) throws Throwable {
-                int index = (int) invocation.getArguments()[0];
-                return preferences[index];
-            }
-        });
+        when(mGroup.getPreference(anyInt()))
+                .thenAnswer(
+                        (Answer<Preference>)
+                                invocation -> {
+                                    int index = (int) invocation.getArguments()[0];
+                                    return preferences[index];
+                                });
     }
 }
diff --git a/src/com/android/storagemanager/automatic/NotificationController.java b/src/com/android/storagemanager/automatic/NotificationController.java
index 18e4533..de987c5 100644
--- a/src/com/android/storagemanager/automatic/NotificationController.java
+++ b/src/com/android/storagemanager/automatic/NotificationController.java
@@ -27,8 +27,8 @@
 import android.content.res.Resources;
 import android.os.SystemProperties;
 import android.provider.Settings;
-import android.support.annotation.VisibleForTesting;
-import android.support.v4.os.BuildCompat;
+import androidx.annotation.VisibleForTesting;
+import androidx.core.os.BuildCompat;
 
 import com.android.storagemanager.R;
 
diff --git a/src/com/android/storagemanager/deletionhelper/AppDeletionPreference.java b/src/com/android/storagemanager/deletionhelper/AppDeletionPreference.java
index cd0ce28..dfd0419 100644
--- a/src/com/android/storagemanager/deletionhelper/AppDeletionPreference.java
+++ b/src/com/android/storagemanager/deletionhelper/AppDeletionPreference.java
@@ -15,7 +15,7 @@
 package com.android.storagemanager.deletionhelper;
 
 import android.content.Context;
-import android.support.v7.preference.PreferenceViewHolder;
+import androidx.preference.PreferenceViewHolder;
 import android.text.format.DateUtils;
 import com.android.storagemanager.R;
 import com.android.storagemanager.deletionhelper.AppsAsyncLoader.PackageInfo;
diff --git a/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceGroup.java b/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceGroup.java
index bfca07e..0010b05 100644
--- a/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceGroup.java
+++ b/src/com/android/storagemanager/deletionhelper/AppDeletionPreferenceGroup.java
@@ -17,9 +17,9 @@
 package com.android.storagemanager.deletionhelper;
 
 import android.content.Context;
-import android.support.annotation.VisibleForTesting;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 import android.text.format.Formatter;
 import android.util.AttributeSet;
 import com.android.internal.logging.MetricsLogger;
diff --git a/src/com/android/storagemanager/deletionhelper/AppDeletionType.java b/src/com/android/storagemanager/deletionhelper/AppDeletionType.java
index 6526b62..0c50c35 100644
--- a/src/com/android/storagemanager/deletionhelper/AppDeletionType.java
+++ b/src/com/android/storagemanager/deletionhelper/AppDeletionType.java
@@ -29,7 +29,6 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settingslib.applications.StorageStatsSource;
-import com.android.settingslib.wrapper.PackageManagerWrapper;
 import com.android.storagemanager.deletionhelper.AppsAsyncLoader.AppFilter;
 import com.android.storagemanager.deletionhelper.AppsAsyncLoader.PackageInfo;
 import java.util.HashSet;
@@ -226,7 +225,7 @@
                 .setUid(UserHandle.myUserId())
                 .setUuid(VolumeInfo.ID_PRIVATE_INTERNAL)
                 .setStorageStatsSource(new StorageStatsSource(mContext))
-                .setPackageManager(new PackageManagerWrapper(mContext.getPackageManager()))
+                .setPackageManager(mContext.getPackageManager())
                 .setUsageStatsManager(
                         (UsageStatsManager) mContext.getSystemService(Context.USAGE_STATS_SERVICE))
                 .setFilter(
diff --git a/src/com/android/storagemanager/deletionhelper/AppsAsyncLoader.java b/src/com/android/storagemanager/deletionhelper/AppsAsyncLoader.java
index 1142b69..0b99ff6 100644
--- a/src/com/android/storagemanager/deletionhelper/AppsAsyncLoader.java
+++ b/src/com/android/storagemanager/deletionhelper/AppsAsyncLoader.java
@@ -26,14 +26,13 @@
 import android.graphics.drawable.Drawable;
 import android.os.SystemProperties;
 import android.os.UserHandle;
-import android.support.annotation.VisibleForTesting;
+import androidx.annotation.VisibleForTesting;
 import android.text.format.DateUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Log;
 import com.android.settingslib.applications.StorageStatsSource;
 import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
-import com.android.settingslib.wrapper.PackageManagerWrapper;
 import com.android.storagemanager.deletionhelper.AppsAsyncLoader.PackageInfo;
 import com.android.storagemanager.utils.AsyncLoader;
 
@@ -70,7 +69,7 @@
     private int mUserId;
     private String mUuid;
     private StorageStatsSource mStatsManager;
-    private PackageManagerWrapper mPackageManager;
+    private PackageManager mPackageManager;
 
     private UsageStatsManager mUsageStatsManager;
 
@@ -79,7 +78,7 @@
             int userId,
             String uuid,
             StorageStatsSource source,
-            PackageManagerWrapper pm,
+            PackageManager pm,
             UsageStatsManager um,
             AppsAsyncLoader.AppFilter filter) {
         super(context);
@@ -142,8 +141,11 @@
                             .setPackageName(app.packageName)
                             .setSize(appSpace.getTotalBytes())
                             .setFlags(app.flags)
-                            .setIcon(mPackageManager.getUserBadgedIcon(app))
-                            .setLabel(mPackageManager.loadLabel(app))
+                            .setIcon(
+                                    mPackageManager.getUserBadgedIcon(
+                                            mPackageManager.loadUnbadgedItemIcon(app, app),
+                                            new UserHandle(UserHandle.getUserId(app.uid))))
+                            .setLabel(app.loadLabel(mPackageManager))
                             .build();
             seenUid.add(app.uid);
             if (mFilter.filterApp(extraInfo) && !isDefaultLauncher(mPackageManager, extraInfo)) {
@@ -205,8 +207,7 @@
     @Override
     protected void onDiscardResult(List<PackageInfo> result) {}
 
-    private static boolean isDefaultLauncher(
-            PackageManagerWrapper packageManager, PackageInfo info) {
+    private static boolean isDefaultLauncher(PackageManager packageManager, PackageInfo info) {
         if (packageManager == null) {
             return false;
         }
@@ -228,7 +229,7 @@
         private int mUid;
         private String mUuid;
         private StorageStatsSource mStorageStatsSource;
-        private PackageManagerWrapper mPackageManager;
+        private PackageManager mPackageManager;
         private UsageStatsManager mUsageStatsManager;
         private AppsAsyncLoader.AppFilter mFilter;
 
@@ -251,7 +252,7 @@
             return this;
         }
 
-        public Builder setPackageManager(PackageManagerWrapper packageManager) {
+        public Builder setPackageManager(PackageManager packageManager) {
             this.mPackageManager = packageManager;
             return this;
         }
diff --git a/src/com/android/storagemanager/deletionhelper/CollapsibleCheckboxPreferenceGroup.java b/src/com/android/storagemanager/deletionhelper/CollapsibleCheckboxPreferenceGroup.java
index 51a969d..c5de8c6 100644
--- a/src/com/android/storagemanager/deletionhelper/CollapsibleCheckboxPreferenceGroup.java
+++ b/src/com/android/storagemanager/deletionhelper/CollapsibleCheckboxPreferenceGroup.java
@@ -19,10 +19,10 @@
 import android.content.Context;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceGroup;
-import android.support.v7.preference.PreferenceViewHolder;
+import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceViewHolder;
 import android.util.AttributeSet;
 
 import android.view.View;
diff --git a/src/com/android/storagemanager/deletionhelper/DeletionHelperSettings.java b/src/com/android/storagemanager/deletionhelper/DeletionHelperSettings.java
index 1a63b17..a96413f 100644
--- a/src/com/android/storagemanager/deletionhelper/DeletionHelperSettings.java
+++ b/src/com/android/storagemanager/deletionhelper/DeletionHelperSettings.java
@@ -23,10 +23,10 @@
 import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.os.storage.StorageManager;
-import android.support.annotation.VisibleForTesting;
-import android.support.v14.preference.PreferenceFragment;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.PreferenceFragment;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 import android.text.format.Formatter;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -68,7 +68,7 @@
     private List<DeletionType> mDeletableContentList;
     private AppDeletionPreferenceGroup mApps;
     @VisibleForTesting AppDeletionType mAppBackend;
-    private DownloadsDeletionPreferenceGroup mDownloadsPreference;
+    @VisibleForTesting DownloadsDeletionPreferenceGroup mDownloadsPreference;
     private DownloadsDeletionType mDownloadsDeletion;
     private PhotosDeletionPreference mPhotoPreference;
     private Preference mGaugePreference;
@@ -76,6 +76,8 @@
     private Button mCancel, mFree;
     private DeletionHelperFeatureProvider mProvider;
     private int mThresholdType;
+    @VisibleForTesting long mBytesToFree = UNSET;
+    private int mResult;
     private LoadingSpinnerController mLoadingController;
 
     public static DeletionHelperSettings newInstance(int thresholdType) {
@@ -121,6 +123,10 @@
                         getGaugeString(getContext(), intent, activity.getCallingPackage());
                 if (gaugeTitle != null) {
                     mGaugePreference.setTitle(gaugeTitle);
+
+                    long requestedBytes =
+                            intent.getLongExtra(StorageManager.EXTRA_REQUESTED_BYTES, UNSET);
+                    mBytesToFree = requestedBytes;
                 } else {
                     getPreferenceScreen().removePreference(mGaugePreference);
                 }
@@ -281,17 +287,23 @@
 
     /** Clears out the selected apps and data from the device and closes the fragment. */
     protected void clearData() {
+        long bytesFreed = getTotalFreeableSpace(COUNT_CHECKED_ONLY);
+        if (mBytesToFree != UNSET && bytesFreed >= mBytesToFree) {
+            setResultCode(Activity.RESULT_OK);
+        }
+
         // This should be fine as long as there is only one extra deletion feature.
         // In the future, this should be done in an async queue in order to not
         // interfere with the simultaneous PackageDeletionTask.
+        Activity activity = getActivity();
         if (mPhotoPreference != null && mPhotoPreference.isChecked()) {
-            mPhotoVideoDeletion.clearFreeableData(getActivity());
+            mPhotoVideoDeletion.clearFreeableData(activity);
         }
         if (mDownloadsPreference != null) {
-            mDownloadsDeletion.clearFreeableData(getActivity());
+            mDownloadsDeletion.clearFreeableData(activity);
         }
         if (mAppBackend != null) {
-            mAppBackend.clearFreeableData(getActivity());
+            mAppBackend.clearFreeableData(activity);
         }
     }
 
@@ -372,7 +384,9 @@
 
     private long getTotalFreeableSpace(boolean countUnchecked) {
         long freeableSpace = 0;
-        freeableSpace += mAppBackend.getTotalAppsFreeableSpace(countUnchecked);
+        if (mAppBackend != null) {
+            freeableSpace += mAppBackend.getTotalAppsFreeableSpace(countUnchecked);
+        }
         if (mPhotoPreference != null) {
             freeableSpace += mPhotoPreference.getFreeableBytes(countUnchecked);
         }
@@ -382,4 +396,16 @@
         return freeableSpace;
     }
 
+    private void setResultCode(int result) {
+        mResult = result;
+        Activity activity = getActivity();
+        if (activity != null) {
+            activity.setResult(result);
+        }
+    }
+
+    @VisibleForTesting
+    protected int getResultCode() {
+        return mResult;
+    }
 }
diff --git a/src/com/android/storagemanager/deletionhelper/DeletionPreference.java b/src/com/android/storagemanager/deletionhelper/DeletionPreference.java
index 0dd8fb0..5ae27d4 100644
--- a/src/com/android/storagemanager/deletionhelper/DeletionPreference.java
+++ b/src/com/android/storagemanager/deletionhelper/DeletionPreference.java
@@ -17,10 +17,10 @@
 package com.android.storagemanager.deletionhelper;
 
 import android.content.Context;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceChangeListener;
-import android.support.v7.preference.CheckBoxPreference;
-import android.support.v7.preference.PreferenceViewHolder;
+import androidx.preference.Preference;
+import androidx.preference.Preference.OnPreferenceChangeListener;
+import androidx.preference.CheckBoxPreference;
+import androidx.preference.PreferenceViewHolder;
 import android.util.AttributeSet;
 
 import android.view.View;
diff --git a/src/com/android/storagemanager/deletionhelper/DeletionType.java b/src/com/android/storagemanager/deletionhelper/DeletionType.java
index 47cd479..87cc618 100644
--- a/src/com/android/storagemanager/deletionhelper/DeletionType.java
+++ b/src/com/android/storagemanager/deletionhelper/DeletionType.java
@@ -18,7 +18,7 @@
 
 import android.app.Activity;
 import android.os.Bundle;
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
 
 /**
  * Helper for the Deletion Helper which can query, clear out, and visualize deletable data.
diff --git a/src/com/android/storagemanager/deletionhelper/DownloadsDeletionPreferenceGroup.java b/src/com/android/storagemanager/deletionhelper/DownloadsDeletionPreferenceGroup.java
index 8213170..e595d07 100644
--- a/src/com/android/storagemanager/deletionhelper/DownloadsDeletionPreferenceGroup.java
+++ b/src/com/android/storagemanager/deletionhelper/DownloadsDeletionPreferenceGroup.java
@@ -20,8 +20,8 @@
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
-import android.support.annotation.VisibleForTesting;
-import android.support.v7.preference.Preference;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
 import android.text.format.Formatter;
 import android.util.AttributeSet;
 
diff --git a/src/com/android/storagemanager/deletionhelper/DownloadsDeletionType.java b/src/com/android/storagemanager/deletionhelper/DownloadsDeletionType.java
index e8cf1df..e82d189 100644
--- a/src/com/android/storagemanager/deletionhelper/DownloadsDeletionType.java
+++ b/src/com/android/storagemanager/deletionhelper/DownloadsDeletionType.java
@@ -24,7 +24,7 @@
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Environment;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
 import android.util.ArraySet;
 
 import com.android.internal.logging.MetricsLogger;
diff --git a/src/com/android/storagemanager/deletionhelper/DownloadsFilePreference.java b/src/com/android/storagemanager/deletionhelper/DownloadsFilePreference.java
index c7d2570..9de43fd 100644
--- a/src/com/android/storagemanager/deletionhelper/DownloadsFilePreference.java
+++ b/src/com/android/storagemanager/deletionhelper/DownloadsFilePreference.java
@@ -17,7 +17,7 @@
 package com.android.storagemanager.deletionhelper;
 
 import android.content.Context;
-import android.support.v7.preference.Preference;
+import androidx.preference.Preference;
 import android.text.format.DateUtils;
 
 import com.android.storagemanager.utils.IconProvider;
diff --git a/src/com/android/storagemanager/deletionhelper/FetchDownloadsLoader.java b/src/com/android/storagemanager/deletionhelper/FetchDownloadsLoader.java
index f848ec4..5826baf 100644
--- a/src/com/android/storagemanager/deletionhelper/FetchDownloadsLoader.java
+++ b/src/com/android/storagemanager/deletionhelper/FetchDownloadsLoader.java
@@ -21,7 +21,7 @@
 import android.media.ThumbnailUtils;
 import android.os.SystemProperties;
 import android.provider.MediaStore;
-import android.support.annotation.VisibleForTesting;
+import androidx.annotation.VisibleForTesting;
 import android.text.format.DateUtils;
 
 import com.android.storagemanager.utils.AsyncLoader;
diff --git a/src/com/android/storagemanager/deletionhelper/GaugePreference.java b/src/com/android/storagemanager/deletionhelper/GaugePreference.java
index 3ffdbac..9b71ebf 100644
--- a/src/com/android/storagemanager/deletionhelper/GaugePreference.java
+++ b/src/com/android/storagemanager/deletionhelper/GaugePreference.java
@@ -17,7 +17,7 @@
 package com.android.storagemanager.deletionhelper;
 
 import android.content.Context;
-import android.support.v7.preference.Preference;
+import androidx.preference.Preference;
 import android.util.AttributeSet;
 
 import com.android.storagemanager.R;
diff --git a/src/com/android/storagemanager/deletionhelper/NestedDeletionPreference.java b/src/com/android/storagemanager/deletionhelper/NestedDeletionPreference.java
index 47656d9..6f8fdd0 100644
--- a/src/com/android/storagemanager/deletionhelper/NestedDeletionPreference.java
+++ b/src/com/android/storagemanager/deletionhelper/NestedDeletionPreference.java
@@ -17,8 +17,8 @@
 package com.android.storagemanager.deletionhelper;
 
 import android.content.Context;
-import android.support.v7.preference.CheckBoxPreference;
-import android.support.v7.preference.PreferenceViewHolder;
+import androidx.preference.CheckBoxPreference;
+import androidx.preference.PreferenceViewHolder;
 import android.text.format.Formatter;
 import android.view.View;
 import android.widget.CheckBox;
diff --git a/src/com/android/storagemanager/deletionhelper/PackageDeletionTask.java b/src/com/android/storagemanager/deletionhelper/PackageDeletionTask.java
index 32fc09f..07e73b7 100644
--- a/src/com/android/storagemanager/deletionhelper/PackageDeletionTask.java
+++ b/src/com/android/storagemanager/deletionhelper/PackageDeletionTask.java
@@ -19,6 +19,7 @@
 import android.content.pm.IPackageDeleteObserver;
 import android.content.pm.PackageManager;
 import android.os.UserHandle;
+import android.util.Log;
 
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -27,6 +28,7 @@
  * Deletes a specified set of apps as a specified user and calls back once done.
  */
 public class PackageDeletionTask {
+    private static final String TAG = "PackageDeletionTask";
     private Set<String> mPackages;
     private Callback mCallback;
     private PackageManager mPm;
@@ -46,7 +48,12 @@
     public void run() {
         PackageDeletionObserver observer = new PackageDeletionObserver(mPackages.size());
         for (String packageName : mPackages) {
-            mPm.deletePackageAsUser(packageName, observer, 0, mUser.getIdentifier());
+            try {
+                mPm.deletePackageAsUser(packageName, observer, 0, mUser.getIdentifier());
+            } catch (IllegalArgumentException e) {
+                // Couldn't find the package, no need to delete.
+                Log.w(TAG, "Could not find package, not deleting " + packageName, e);
+            }
         }
     }
 
diff --git a/src/com/android/storagemanager/deletionhelper/PhotosDeletionPreference.java b/src/com/android/storagemanager/deletionhelper/PhotosDeletionPreference.java
index 28139dc..d87a338 100644
--- a/src/com/android/storagemanager/deletionhelper/PhotosDeletionPreference.java
+++ b/src/com/android/storagemanager/deletionhelper/PhotosDeletionPreference.java
@@ -18,8 +18,8 @@
 
 import android.content.Context;
 import android.os.Handler;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceViewHolder;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
 import android.util.AttributeSet;
 import android.text.format.Formatter;
 
diff --git a/src/com/android/storagemanager/deletionhelper/StorageManagerUpsellDialog.java b/src/com/android/storagemanager/deletionhelper/StorageManagerUpsellDialog.java
index af85277..00521a9 100644
--- a/src/com/android/storagemanager/deletionhelper/StorageManagerUpsellDialog.java
+++ b/src/com/android/storagemanager/deletionhelper/StorageManagerUpsellDialog.java
@@ -23,7 +23,7 @@
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.provider.Settings;
-import android.support.annotation.VisibleForTesting;
+import androidx.annotation.VisibleForTesting;
 import android.text.format.Formatter;
 
 import com.android.settingslib.Utils;
diff --git a/src/com/android/storagemanager/utils/IconProvider.java b/src/com/android/storagemanager/utils/IconProvider.java
index 0636d71..2f45e7e 100644
--- a/src/com/android/storagemanager/utils/IconProvider.java
+++ b/src/com/android/storagemanager/utils/IconProvider.java
@@ -40,7 +40,7 @@
      * @return
      */
     public Drawable loadMimeIcon(String mimeType) {
-        return mContext.getContentResolver().getTypeDrawable(mimeType);
+        return mContext.getContentResolver().getTypeInfo(mimeType).getIcon().loadDrawable(mContext);
     }
 
     public static String getMimeType(File file) {
diff --git a/src/com/android/storagemanager/utils/PreferenceListCache.java b/src/com/android/storagemanager/utils/PreferenceListCache.java
index 3d552d5..05cedd5 100644
--- a/src/com/android/storagemanager/utils/PreferenceListCache.java
+++ b/src/com/android/storagemanager/utils/PreferenceListCache.java
@@ -16,8 +16,8 @@
 
 package com.android.storagemanager.utils;
 
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceGroup;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 
diff --git a/tests/app/Android.mk b/tests/app/Android.mk
index a8f18d4..8b0133c 100644
--- a/tests/app/Android.mk
+++ b/tests/app/Android.mk
@@ -4,14 +4,14 @@
 # We only want this apk build for tests.
 LOCAL_MODULE_TAGS := tests
 
-LOCAL_JAVA_LIBRARIES := android.test.runner bouncycastle
+LOCAL_JAVA_LIBRARIES := android.test.runner
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-support-test \
+    androidx.test.rules \
     mockito-target \
-    espresso-core \
-    espresso-contrib-nodep \
-    espresso-intents-nodep \
+    androidx.test.espresso.core \
+   androidx.test.espresso.contrib-nodeps \
+   androidx.test.espresso.intents-nodeps \
     truth-prebuilt
 
 # Include all test java files.
diff --git a/tests/app/AndroidManifest.xml b/tests/app/AndroidManifest.xml
index ac1e895..4a4e57e 100644
--- a/tests/app/AndroidManifest.xml
+++ b/tests/app/AndroidManifest.xml
@@ -17,7 +17,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.storagemanager.apptests">
 
-    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
         android:targetPackage="com.android.storagemanager"
         android:label="StorageManager Test Cases">
     </instrumentation>
diff --git a/tests/app/src/com/android/storagemanager/deletionhelper/DeletionHelperActivityTest.java b/tests/app/src/com/android/storagemanager/deletionhelper/DeletionHelperActivityTest.java
index 77dccdb..74d3e82 100644
--- a/tests/app/src/com/android/storagemanager/deletionhelper/DeletionHelperActivityTest.java
+++ b/tests/app/src/com/android/storagemanager/deletionhelper/DeletionHelperActivityTest.java
@@ -15,16 +15,18 @@
  */
 package com.android.storagemanager.deletionhelper.apptests;
 
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
+import static androidx.test.espresso.assertion.ViewAssertions.matches;
+import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
-import android.support.test.rule.ActivityTestRule;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.rule.ActivityTestRule;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.storagemanager.R;
 import com.android.storagemanager.deletionhelper.DeletionHelperActivity;
+
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/tests/unit/Android.mk b/tests/unit/Android.mk
index 2eb7f0e..45892a4 100644
--- a/tests/unit/Android.mk
+++ b/tests/unit/Android.mk
@@ -7,7 +7,7 @@
 LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base android.test.mock
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-support-test \
+    androidx.test.rules \
     mockito-target
 
 # Include all test java files.
diff --git a/tests/unit/AndroidManifest.xml b/tests/unit/AndroidManifest.xml
index 0a3880f..f40a611 100644
--- a/tests/unit/AndroidManifest.xml
+++ b/tests/unit/AndroidManifest.xml
@@ -21,7 +21,7 @@
         <uses-library android:name="android.test.runner" />
     </application>
 
-    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
         android:targetPackage="com.android.storagemanager"
         android:label="StorageManager Test Cases">
     </instrumentation>
diff --git a/tests/unit/README b/tests/unit/README
index 1f56d05..65bac68 100644
--- a/tests/unit/README
+++ b/tests/unit/README
@@ -5,13 +5,13 @@
 $ adb install -r out/target/product/angler/data/app/StorageManagerUnitTests/StorageManagerUnitTests.apk
 
 To run all tests:
-$ adb shell am instrument -w com.android.storagemanager.tests.unit/android.support.test.runner.AndroidJUnitRunner
+$ adb shell am instrument -w com.android.storagemanager.tests.unit/androidx.test.runner.AndroidJUnitRunner
 
 To run all tests in a specific class:
-$ adb shell am instrument -w -e class com.android.storagemanager.<class> com.android.storagemanager.tests.unit/android.support.test.runner.AndroidJUnitRunner
+$ adb shell am instrument -w -e class com.android.storagemanager.<class> com.android.storagemanager.tests.unit/androidx.test.runner.AndroidJUnitRunner
 
 To run a specific test:
-$ adb shell am instrument -w -e class com.android.storagemanager.<class>#<test> com.android.storagemanager.tests.unit/android.support.test.runner.AndroidJUnitRunner
+$ adb shell am instrument -w -e class com.android.storagemanager.<class>#<test> com.android.storagemanager.tests.unit/androidx.test.runner.AndroidJUnitRunner
 
 More general information can be found at
 http://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html