Make PreferenceController a mixin

Bug: 62912136
Test: Existing tests in BaseSearchIndexProviderTest
Change-Id: Ieda359806c09a019840b2005446c7ec8b61fdb00
diff --git a/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java b/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java
index 8d35eca..06bdb3f 100644
--- a/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceController.java
@@ -16,11 +16,12 @@
 package com.android.settings.deviceinfo;
 
 import android.content.Context;
-import android.support.v7.preference.Preference;
 
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class AdditionalSystemUpdatePreferenceController extends PreferenceController {
+public class AdditionalSystemUpdatePreferenceController extends
+        AbstractPreferenceController implements PreferenceControllerMixin {
 
     private static final String KEY_UPDATE_SETTING = "additional_system_update_settings";
 
diff --git a/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java b/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java
index 1153d12..018a068 100644
--- a/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java
@@ -21,9 +21,11 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class BasebandVersionPreferenceController extends PreferenceController {
+public class BasebandVersionPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final String BASEBAND_PROPERTY = "gsm.version.baseband";
     private static final String KEY_BASEBAND_VERSION = "baseband_version";
diff --git a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
index 9232838..3c44223 100644
--- a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
@@ -32,19 +32,20 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.Utils;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.development.DevelopmentSettings;
 import com.android.settings.development.DevelopmentSettingsEnabler;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.password.ChooseLockSettingsHelper;
 import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnResume;
 
-public class BuildNumberPreferenceController extends PreferenceController
-        implements LifecycleObserver, OnResume {
+public class BuildNumberPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin, LifecycleObserver, OnResume {
 
     static final int TAPS_TO_BE_A_DEVELOPER = 7;
     static final int REQUEST_CONFIRM_PASSWORD_FOR_DEV_PREF = 100;
diff --git a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
index ac3870a..f1dc415 100644
--- a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
@@ -22,10 +22,12 @@
 import android.support.v7.preference.PreferenceScreen;
 import android.text.TextUtils;
 
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.DeviceInfoUtils;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class DeviceModelPreferenceController extends PreferenceController {
+public class DeviceModelPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final String KEY_DEVICE_MODEL = "device_model";
 
diff --git a/src/com/android/settings/deviceinfo/FccEquipmentIdPreferenceController.java b/src/com/android/settings/deviceinfo/FccEquipmentIdPreferenceController.java
index 4f8de71..f3d7380 100644
--- a/src/com/android/settings/deviceinfo/FccEquipmentIdPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/FccEquipmentIdPreferenceController.java
@@ -22,9 +22,11 @@
 import android.text.TextUtils;
 
 import com.android.settings.R;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class FccEquipmentIdPreferenceController extends PreferenceController {
+public class FccEquipmentIdPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
 
     private static final String PROPERTY_EQUIPMENT_ID = "ro.ril.fccid";
diff --git a/src/com/android/settings/deviceinfo/FeedbackPreferenceController.java b/src/com/android/settings/deviceinfo/FeedbackPreferenceController.java
index ed61a92..2d8941d 100644
--- a/src/com/android/settings/deviceinfo/FeedbackPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/FeedbackPreferenceController.java
@@ -21,10 +21,12 @@
 import android.support.v7.preference.Preference;
 import android.text.TextUtils;
 
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.DeviceInfoUtils;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class FeedbackPreferenceController extends PreferenceController {
+public class FeedbackPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
     private static final String KEY_DEVICE_FEEDBACK = "device_feedback";
 
     private final Fragment mHost;
diff --git a/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceController.java b/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceController.java
index 1b56301..fd73ed5 100644
--- a/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceController.java
@@ -26,15 +26,16 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnResume;
 
 
-public class FirmwareVersionPreferenceController extends PreferenceController
-        implements LifecycleObserver, OnResume {
+public class FirmwareVersionPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin, LifecycleObserver, OnResume {
 
     private static final String TAG = "FirmwareVersionPref";
     private static final String KEY_FIRMWARE_VERSION = "firmware_version";
diff --git a/src/com/android/settings/deviceinfo/KernelVersionPreferenceController.java b/src/com/android/settings/deviceinfo/KernelVersionPreferenceController.java
index 3a84c1e..5afed9c 100644
--- a/src/com/android/settings/deviceinfo/KernelVersionPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/KernelVersionPreferenceController.java
@@ -18,10 +18,12 @@
 import android.content.Context;
 import android.support.v7.preference.Preference;
 
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.DeviceInfoUtils;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class KernelVersionPreferenceController extends PreferenceController {
+public class KernelVersionPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final String KEY_KERNEL_VERSION = "kernel_version";
 
diff --git a/src/com/android/settings/deviceinfo/ManualPreferenceController.java b/src/com/android/settings/deviceinfo/ManualPreferenceController.java
index dbaa00f..20464a5 100644
--- a/src/com/android/settings/deviceinfo/ManualPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/ManualPreferenceController.java
@@ -19,9 +19,11 @@
 import android.content.Context;
 
 import com.android.settings.R;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class ManualPreferenceController extends PreferenceController {
+public class ManualPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final String KEY_MANUAL = "manual";
 
diff --git a/src/com/android/settings/deviceinfo/RegulatoryInfoPreferenceController.java b/src/com/android/settings/deviceinfo/RegulatoryInfoPreferenceController.java
index f82fd0b..c925c27 100644
--- a/src/com/android/settings/deviceinfo/RegulatoryInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/RegulatoryInfoPreferenceController.java
@@ -19,9 +19,11 @@
 import android.content.Intent;
 import android.provider.Settings;
 
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class RegulatoryInfoPreferenceController extends PreferenceController {
+public class RegulatoryInfoPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final String KEY_REGULATORY_INFO = "regulatory_info";
     private static final Intent INTENT_PROBE = new Intent(Settings.ACTION_SHOW_REGULATORY_INFO);
diff --git a/src/com/android/settings/deviceinfo/SELinuxStatusPreferenceController.java b/src/com/android/settings/deviceinfo/SELinuxStatusPreferenceController.java
index b8529d2..058992f 100644
--- a/src/com/android/settings/deviceinfo/SELinuxStatusPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SELinuxStatusPreferenceController.java
@@ -23,9 +23,11 @@
 import android.text.TextUtils;
 
 import com.android.settings.R;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class SELinuxStatusPreferenceController extends PreferenceController {
+public class SELinuxStatusPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final String PROPERTY_SELINUX_STATUS = "ro.build.selinux";
     private static final String KEY_SELINUX_STATUS = "selinux_status";
diff --git a/src/com/android/settings/deviceinfo/SafetyInfoPreferenceController.java b/src/com/android/settings/deviceinfo/SafetyInfoPreferenceController.java
index bde4dd0..10dbd19 100644
--- a/src/com/android/settings/deviceinfo/SafetyInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SafetyInfoPreferenceController.java
@@ -19,9 +19,11 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class SafetyInfoPreferenceController extends PreferenceController {
+public class SafetyInfoPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final Intent INTENT_PROBE =
             new Intent("android.settings.SHOW_SAFETY_AND_REGULATORY_INFO");
diff --git a/src/com/android/settings/deviceinfo/SafetyLegalPreferenceController.java b/src/com/android/settings/deviceinfo/SafetyLegalPreferenceController.java
index c158d64..c402046 100644
--- a/src/com/android/settings/deviceinfo/SafetyLegalPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SafetyLegalPreferenceController.java
@@ -19,9 +19,11 @@
 import android.os.SystemProperties;
 import android.text.TextUtils;
 
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class SafetyLegalPreferenceController extends PreferenceController {
+public class SafetyLegalPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final String KEY_SAFETY_LEGAL = "safetylegal";
     private static final String PROPERTY_URL_SAFETYLEGAL = "ro.url.safetylegal";
diff --git a/src/com/android/settings/deviceinfo/SecurityPatchPreferenceController.java b/src/com/android/settings/deviceinfo/SecurityPatchPreferenceController.java
index 64a1159..f38602a 100644
--- a/src/com/android/settings/deviceinfo/SecurityPatchPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SecurityPatchPreferenceController.java
@@ -22,10 +22,12 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.DeviceInfoUtils;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class SecurityPatchPreferenceController extends PreferenceController {
+public class SecurityPatchPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final String KEY_SECURITY_PATCH = "security_patch";
     private static final String TAG = "SecurityPatchPref";
diff --git a/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java b/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java
index 0362bbc..b69844d 100644
--- a/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java
@@ -23,9 +23,11 @@
 import android.text.TextUtils;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 
-public class SerialNumberPreferenceController extends PreferenceController {
+public class SerialNumberPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final String KEY_SERIAL_NUMBER = "serial_number";
 
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index b5a7b3b..be72539 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -38,7 +38,6 @@
 import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.applications.UserManagerWrapper;
 import com.android.settings.applications.UserManagerWrapperImpl;
-import com.android.settings.core.PreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController;
 import com.android.settings.deviceinfo.storage.SecondaryUserController;
@@ -50,6 +49,7 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.deviceinfo.PrivateStorageInfo;
 import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
 
@@ -72,7 +72,7 @@
     private StorageSummaryDonutPreferenceController mSummaryController;
     private StorageItemPreferenceController mPreferenceController;
     private PrivateVolumeOptionMenuController mOptionMenuController;
-    private List<PreferenceController> mSecondaryUsers;
+    private List<AbstractPreferenceController> mSecondaryUsers;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -129,7 +129,7 @@
         mPreferenceController.setUsedSize(privateUsedBytes);
         mPreferenceController.setTotalSize(mStorageInfo.totalBytes);
         for (int i = 0, size = mSecondaryUsers.size(); i < size; i++) {
-            PreferenceController controller = mSecondaryUsers.get(i);
+            AbstractPreferenceController controller = mSecondaryUsers.get(i);
             if (controller instanceof SecondaryUserController) {
                 SecondaryUserController userController = (SecondaryUserController) controller;
                 userController.setTotalSize(mStorageInfo.totalBytes);
@@ -161,8 +161,8 @@
     }
 
     @Override
-    protected List<PreferenceController> getPreferenceControllers(Context context) {
-        final List<PreferenceController> controllers = new ArrayList<>();
+    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+        final List<AbstractPreferenceController> controllers = new ArrayList<>();
         mSummaryController = new StorageSummaryDonutPreferenceController(context);
         controllers.add(mSummaryController);
 
@@ -192,10 +192,10 @@
     /**
      * Updates the secondary user controller sizes.
      */
-    private void updateSecondaryUserControllers(List<PreferenceController> controllers,
+    private void updateSecondaryUserControllers(List<AbstractPreferenceController> controllers,
             SparseArray<StorageAsyncLoader.AppsStorageResult> stats) {
         for (int i = 0, size = controllers.size(); i < size; i++) {
-            PreferenceController controller = controllers.get(i);
+            AbstractPreferenceController controller = controllers.get(i);
             if (controller instanceof StorageAsyncLoader.ResultHandler) {
                 StorageAsyncLoader.ResultHandler userController =
                         (StorageAsyncLoader.ResultHandler) controller;
@@ -218,11 +218,11 @@
                 }
 
                 @Override
-                public List<PreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
                     final StorageManager sm = context.getSystemService(StorageManager.class);
                     final UserManagerWrapper userManager =
                             new UserManagerWrapperImpl(context.getSystemService(UserManager.class));
-                    final List<PreferenceController> controllers = new ArrayList<>();
+                    final List<AbstractPreferenceController> controllers = new ArrayList<>();
                     controllers.add(new StorageSummaryDonutPreferenceController(context));
                     controllers.add(new StorageItemPreferenceController(context, null /* host */,
                             null /* volume */, new StorageManagerVolumeProvider(sm)));
diff --git a/src/com/android/settings/deviceinfo/StorageProfileFragment.java b/src/com/android/settings/deviceinfo/StorageProfileFragment.java
index f5129ed..7a0a59e 100644
--- a/src/com/android/settings/deviceinfo/StorageProfileFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageProfileFragment.java
@@ -32,12 +32,12 @@
 import com.android.settings.Utils;
 import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.applications.UserManagerWrapperImpl;
-import com.android.settings.core.PreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.deviceinfo.storage.StorageAsyncLoader;
 import com.android.settings.deviceinfo.storage.StorageAsyncLoader.AppsStorageResult;
 import com.android.settings.deviceinfo.storage.StorageItemPreferenceController;
 import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
 
 import java.util.ArrayList;
@@ -98,8 +98,8 @@
     }
 
     @Override
-    protected List<PreferenceController> getPreferenceControllers(Context context) {
-        final List<PreferenceController> controllers = new ArrayList<>();
+    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+        final List<AbstractPreferenceController> controllers = new ArrayList<>();
         final StorageManager sm = context.getSystemService(StorageManager.class);
         mPreferenceController = new StorageItemPreferenceController(context, this,
                 mVolume, new StorageManagerVolumeProvider(sm));
diff --git a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
index c2e2ad8..d2ad6d8 100644
--- a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
@@ -28,11 +28,13 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 
 import static android.content.Context.CARRIER_CONFIG_SERVICE;
 
-public class SystemUpdatePreferenceController extends PreferenceController {
+public class SystemUpdatePreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
 
     private static final String TAG = "SysUpdatePrefContr";
 
diff --git a/src/com/android/settings/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceController.java b/src/com/android/settings/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceController.java
index acd34f0..4635d82 100644
--- a/src/com/android/settings/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceController.java
@@ -24,17 +24,19 @@
 import android.support.v7.preference.PreferenceScreen;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.deletionhelper.ActivationWarningFragment;
 import com.android.settings.widget.MasterSwitchController;
 import com.android.settings.widget.MasterSwitchPreference;
 import com.android.settings.widget.SwitchWidgetController;
+import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnResume;
 
-public class AutomaticStorageManagementSwitchPreferenceController extends PreferenceController
-        implements LifecycleObserver, OnResume, SwitchWidgetController.OnSwitchChangeListener {
+public class AutomaticStorageManagementSwitchPreferenceController extends
+        AbstractPreferenceController implements PreferenceControllerMixin, LifecycleObserver,
+        OnResume, SwitchWidgetController.OnSwitchChangeListener {
     private static final String KEY_TOGGLE_ASM = "toggle_asm";
     @VisibleForTesting
     static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY = "ro.storage_manager.enabled";
diff --git a/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java b/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
index dec0964..3c69ab1 100644
--- a/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
+++ b/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
@@ -28,8 +28,9 @@
 
 import com.android.settings.Utils;
 import com.android.settings.applications.UserManagerWrapper;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.deviceinfo.StorageItemPreference;
+import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -38,8 +39,9 @@
  * SecondaryUserController controls the preferences on the Storage screen which had to do with
  * secondary users.
  */
-public class SecondaryUserController extends PreferenceController
-        implements StorageAsyncLoader.ResultHandler, UserIconLoader.UserIconHandler {
+public class SecondaryUserController extends AbstractPreferenceController implements
+        PreferenceControllerMixin, StorageAsyncLoader.ResultHandler,
+        UserIconLoader.UserIconHandler {
     // PreferenceGroupKey to try to add our preference onto.
     private static final String TARGET_PREFERENCE_GROUP_KEY = "pref_secondary_users";
     private static final String PREFERENCE_KEY_BASE = "pref_user_";
@@ -58,9 +60,9 @@
      * @param context Context for initializing the preference controllers.
      * @param userManager UserManagerWrapper for figuring out which controllers to add.
      */
-    public static List<PreferenceController> getSecondaryUserControllers(
+    public static List<AbstractPreferenceController> getSecondaryUserControllers(
             Context context, UserManagerWrapper userManager) {
-        List<PreferenceController> controllers = new ArrayList<>();
+        List<AbstractPreferenceController> controllers = new ArrayList<>();
         UserInfo primaryUser = userManager.getPrimaryUser();
         boolean addedUser = false;
         List<UserInfo> infos = userManager.getUsers();
@@ -89,7 +91,7 @@
 
     /**
      * Constructor for a given secondary user.
-     * @param context Context to initialize the underlying {@link PreferenceController}.
+     * @param context Context to initialize the underlying {@link AbstractPreferenceController}.
      * @param info {@link UserInfo} for the secondary user which this controllers covers.
      */
     @VisibleForTesting
@@ -175,7 +177,8 @@
         }
     }
 
-    private static class NoSecondaryUserController extends PreferenceController {
+    private static class NoSecondaryUserController extends AbstractPreferenceController implements
+            PreferenceControllerMixin {
         public NoSecondaryUserController(Context context) {
             super(context);
         }
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index cebd114..7060779 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -38,11 +38,12 @@
 import com.android.settings.Settings;
 import com.android.settings.Utils;
 import com.android.settings.applications.ManageApplications;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.deviceinfo.PrivateVolumeSettings.SystemInfoFragment;
 import com.android.settings.deviceinfo.StorageItemPreference;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.deviceinfo.StorageMeasurement;
 import com.android.settingslib.deviceinfo.StorageVolumeProvider;
 
@@ -54,7 +55,8 @@
  * StorageItemPreferenceController handles the storage line items which summarize the storage
  * categorization breakdown.
  */
-public class StorageItemPreferenceController extends PreferenceController {
+public class StorageItemPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
     private static final String TAG = "StorageItemPreference";
 
     private static final String IMAGE_MIME_TYPE = "image/*";
diff --git a/src/com/android/settings/deviceinfo/storage/StorageSummaryDonutPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageSummaryDonutPreferenceController.java
index 91c4a6b..24fd2ee 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageSummaryDonutPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageSummaryDonutPreferenceController.java
@@ -24,14 +24,16 @@
 import android.text.format.Formatter;
 
 import com.android.settings.R;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.deviceinfo.StorageVolumeProvider;
 
 /**
  * StorgaeSummaryPreferenceController updates the donut storage summary preference to have the
  * correct sizes showing.
  */
-public class StorageSummaryDonutPreferenceController extends PreferenceController {
+public class StorageSummaryDonutPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin {
     private long mUsedBytes;
     private long mTotalBytes;
     private StorageSummaryDonutPreference mSummary;
diff --git a/src/com/android/settings/deviceinfo/storage/UserProfileController.java b/src/com/android/settings/deviceinfo/storage/UserProfileController.java
index fc297ca..684ac52 100644
--- a/src/com/android/settings/deviceinfo/storage/UserProfileController.java
+++ b/src/com/android/settings/deviceinfo/storage/UserProfileController.java
@@ -30,14 +30,17 @@
 import com.android.internal.util.Preconditions;
 import com.android.settings.Utils;
 import com.android.settings.applications.UserManagerWrapper;
-import com.android.settings.core.PreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.deviceinfo.StorageItemPreference;
 import com.android.settings.deviceinfo.StorageProfileFragment;
+import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.drawer.SettingsDrawerActivity;
 
-/** Defines a {@link PreferenceController} which handles a single profile of the primary user. */
-public class UserProfileController extends PreferenceController
-        implements StorageAsyncLoader.ResultHandler, UserIconLoader.UserIconHandler {
+/** Defines a {@link AbstractPreferenceController} which handles a single profile of the primary
+ *  user. */
+public class UserProfileController extends AbstractPreferenceController implements
+        PreferenceControllerMixin, StorageAsyncLoader.ResultHandler,
+        UserIconLoader.UserIconHandler {
     private static final String PREFERENCE_KEY_BASE = "pref_profile_";
     private StorageItemPreference mStoragePreference;
     private UserManagerWrapper mUserManager;