Migrate About/Reset/Legal to SettingsFragment/PreferenceController<T>

Also move LanguageSettingsEntryPreferenceController to language package.

Bug: 120942613
Test: Manual, Build, Robolectric
Change-Id: Ic532aa813561f06e97646d48f768b173c6bd98cf
diff --git a/src/com/android/car/settings/system/LanguageSettingsEntryPreferenceController.java b/src/com/android/car/settings/language/LanguageSettingsEntryPreferenceController.java
similarity index 96%
rename from src/com/android/car/settings/system/LanguageSettingsEntryPreferenceController.java
rename to src/com/android/car/settings/language/LanguageSettingsEntryPreferenceController.java
index e161b85..3e31c11 100644
--- a/src/com/android/car/settings/system/LanguageSettingsEntryPreferenceController.java
+++ b/src/com/android/car/settings/language/LanguageSettingsEntryPreferenceController.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.car.settings.system;
+package com.android.car.settings.language;
 
 import android.content.Context;
 
diff --git a/src/com/android/car/settings/system/AboutSettingsFragment.java b/src/com/android/car/settings/system/AboutSettingsFragment.java
index 8969dcd..4171542 100644
--- a/src/com/android/car/settings/system/AboutSettingsFragment.java
+++ b/src/com/android/car/settings/system/AboutSettingsFragment.java
@@ -19,12 +19,12 @@
 import androidx.annotation.XmlRes;
 
 import com.android.car.settings.R;
-import com.android.car.settings.common.BasePreferenceFragment;
+import com.android.car.settings.common.SettingsFragment;
 
 /**
  * Shows basic info about the system and provide some actions like update, reset etc.
  */
-public class AboutSettingsFragment extends BasePreferenceFragment {
+public class AboutSettingsFragment extends SettingsFragment {
 
     @Override
     @XmlRes
diff --git a/src/com/android/car/settings/system/BuildNumberPreferenceController.java b/src/com/android/car/settings/system/BuildNumberPreferenceController.java
index 47c70eb..c9187e4 100644
--- a/src/com/android/car/settings/system/BuildNumberPreferenceController.java
+++ b/src/com/android/car/settings/system/BuildNumberPreferenceController.java
@@ -16,10 +16,10 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.os.Build;
-import android.text.TextUtils;
 import android.widget.Toast;
 
 import androidx.lifecycle.Lifecycle;
@@ -29,22 +29,26 @@
 
 import com.android.car.settings.R;
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
 import com.android.car.settings.development.DevelopmentSettingsUtil;
 
 /** Updates the build number entry summary with the build number. */
-public class BuildNumberPreferenceController extends NoSetupPreferenceController implements
+public class BuildNumberPreferenceController extends PreferenceController<Preference> implements
         LifecycleObserver {
 
     private final CarUserManagerHelper mCarUserManagerHelper;
     private Toast mDevHitToast;
     private int mDevHitCountdown;
 
-    public BuildNumberPreferenceController(Context context,
-            String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
-        mCarUserManagerHelper = new CarUserManagerHelper(mContext);
+    public BuildNumberPreferenceController(Context context, String preferenceKey,
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
+        mCarUserManagerHelper = new CarUserManagerHelper(context);
+    }
+
+    @Override
+    protected Class<Preference> getPreferenceType() {
+        return Preference.class;
     }
 
     /**
@@ -54,41 +58,38 @@
     @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
     public void onResume() {
         mDevHitToast = null;
-        mDevHitCountdown = DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext,
+        mDevHitCountdown = DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(getContext(),
                 mCarUserManagerHelper) ? -1 : getTapsToBecomeDeveloper();
     }
 
     @Override
-    public CharSequence getSummary() {
-        return Build.DISPLAY;
+    protected void updateState(Preference preference) {
+        preference.setSummary(Build.DISPLAY);
     }
 
     @Override
-    public boolean handlePreferenceTreeClick(Preference preference) {
-        if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
-            return false;
-        }
-
+    protected boolean handlePreferenceClicked(Preference preference) {
         if (!mCarUserManagerHelper.isCurrentProcessAdminUser()
                 && !mCarUserManagerHelper.isCurrentProcessDemoUser()) {
             return false;
         }
 
-        if (!DevelopmentSettingsUtil.isDeviceProvisioned(mContext)) {
+        if (!DevelopmentSettingsUtil.isDeviceProvisioned(getContext())) {
             return false;
         }
 
         if (mDevHitCountdown > 0) {
             mDevHitCountdown--;
             if (mDevHitCountdown == 0) {
-                DevelopmentSettingsUtil.setDevelopmentSettingsEnabled(mContext, true);
-                showToast(mContext.getString(R.string.show_dev_on), Toast.LENGTH_LONG);
+                DevelopmentSettingsUtil.setDevelopmentSettingsEnabled(getContext(), true);
+                showToast(getContext().getString(R.string.show_dev_on), Toast.LENGTH_LONG);
             } else if (mDevHitCountdown <= getTapsToBecomeDeveloper() - getTapsToShowToast()) {
-                showToast(mContext.getResources().getQuantityString(R.plurals.show_dev_countdown,
-                        mDevHitCountdown, mDevHitCountdown), Toast.LENGTH_SHORT);
+                showToast(getContext().getResources().getQuantityString(
+                        R.plurals.show_dev_countdown, mDevHitCountdown, mDevHitCountdown),
+                        Toast.LENGTH_SHORT);
             }
         } else if (mDevHitCountdown < 0) {
-            showToast(mContext.getString(R.string.show_dev_already), Toast.LENGTH_LONG);
+            showToast(getContext().getString(R.string.show_dev_already), Toast.LENGTH_LONG);
         }
         return true;
     }
@@ -97,16 +98,17 @@
         if (mDevHitToast != null) {
             mDevHitToast.cancel();
         }
-        mDevHitToast = Toast.makeText(mContext, text, duration);
+        mDevHitToast = Toast.makeText(getContext(), text, duration);
         mDevHitToast.show();
     }
 
     private int getTapsToBecomeDeveloper() {
-        return mContext.getResources().getInteger(R.integer.enable_developer_settings_click_count);
+        return getContext().getResources().getInteger(
+                R.integer.enable_developer_settings_click_count);
     }
 
     private int getTapsToShowToast() {
-        return mContext.getResources().getInteger(
+        return getContext().getResources().getInteger(
                 R.integer.enable_developer_settings_clicks_to_show_toast_count);
     }
 }
diff --git a/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java b/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java
index 090fa94..0d24dec 100644
--- a/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java
+++ b/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java
@@ -16,24 +16,32 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
 import android.os.Build;
 
+import androidx.preference.Preference;
+
 import com.android.car.settings.R;
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
 
 /** Updates the firmware version entry summary with the firmware version. */
-public class FirmwareVersionPreferenceController extends NoSetupPreferenceController {
+public class FirmwareVersionPreferenceController extends PreferenceController<Preference> {
 
-    public FirmwareVersionPreferenceController(Context context,
-            String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+    public FirmwareVersionPreferenceController(Context context, String preferenceKey,
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
     }
 
     @Override
-    public CharSequence getSummary() {
-        return mContext.getString(R.string.about_summary, Build.VERSION.RELEASE);
+    protected Class<Preference> getPreferenceType() {
+        return Preference.class;
+    }
+
+    @Override
+    protected void updateState(Preference preference) {
+        preference.setSummary(
+                getContext().getString(R.string.about_summary, Build.VERSION.RELEASE));
     }
 }
diff --git a/src/com/android/car/settings/system/KernelVersionPreferenceController.java b/src/com/android/car/settings/system/KernelVersionPreferenceController.java
index d6a1bfc..1d18523 100644
--- a/src/com/android/car/settings/system/KernelVersionPreferenceController.java
+++ b/src/com/android/car/settings/system/KernelVersionPreferenceController.java
@@ -16,23 +16,30 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
 
+import androidx.preference.Preference;
+
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
 import com.android.settingslib.DeviceInfoUtils;
 
 /** Updates the kernel version entry summary with the kernel version. */
-public class KernelVersionPreferenceController extends NoSetupPreferenceController {
+public class KernelVersionPreferenceController extends PreferenceController<Preference> {
 
-    public KernelVersionPreferenceController(Context context,
-            String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+    public KernelVersionPreferenceController(Context context, String preferenceKey,
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
     }
 
     @Override
-    public CharSequence getSummary() {
-        return DeviceInfoUtils.getFormattedKernelVersion(mContext);
+    protected Class<Preference> getPreferenceType() {
+        return Preference.class;
+    }
+
+    @Override
+    protected void updateState(Preference preference) {
+        preference.setSummary(DeviceInfoUtils.getFormattedKernelVersion(getContext()));
     }
 }
diff --git a/src/com/android/car/settings/system/LegalInformationFragment.java b/src/com/android/car/settings/system/LegalInformationFragment.java
index 21c07f0..69b9bc6 100644
--- a/src/com/android/car/settings/system/LegalInformationFragment.java
+++ b/src/com/android/car/settings/system/LegalInformationFragment.java
@@ -19,12 +19,12 @@
 import androidx.annotation.XmlRes;
 
 import com.android.car.settings.R;
-import com.android.car.settings.common.BasePreferenceFragment;
+import com.android.car.settings.common.SettingsFragment;
 
 /**
  * Fragment showing legal information.
  */
-public class LegalInformationFragment extends BasePreferenceFragment {
+public class LegalInformationFragment extends SettingsFragment {
 
     @Override
     @XmlRes
diff --git a/src/com/android/car/settings/system/MasterClearEntryPreferenceController.java b/src/com/android/car/settings/system/MasterClearEntryPreferenceController.java
index ea2c1b9..b48920f 100644
--- a/src/com/android/car/settings/system/MasterClearEntryPreferenceController.java
+++ b/src/com/android/car/settings/system/MasterClearEntryPreferenceController.java
@@ -16,35 +16,43 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.os.UserManager;
 
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
+import com.android.car.settings.common.RestrictedPreference;
 
 /**
  * Controller which determines if master clear (aka "factory reset") should be displayed based on
  * user status.
  */
-public class MasterClearEntryPreferenceController extends NoSetupPreferenceController {
+public class MasterClearEntryPreferenceController extends
+        PreferenceController<RestrictedPreference> {
 
     private final CarUserManagerHelper mCarUserManagerHelper;
 
     public MasterClearEntryPreferenceController(Context context, String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
         mCarUserManagerHelper = new CarUserManagerHelper(context);
     }
 
     @Override
+    protected Class<RestrictedPreference> getPreferenceType() {
+        return RestrictedPreference.class;
+    }
+
+    @Override
     public int getAvailabilityStatus() {
         return (mCarUserManagerHelper.isCurrentProcessAdminUser() || isDemoUser()) ? AVAILABLE
                 : DISABLED_FOR_USER;
     }
 
     private boolean isDemoUser() {
-        return UserManager.isDeviceInDemoMode(mContext)
+        return UserManager.isDeviceInDemoMode(getContext())
                 && mCarUserManagerHelper.isCurrentProcessDemoUser();
     }
 }
diff --git a/src/com/android/car/settings/system/ModelInfoPreferenceController.java b/src/com/android/car/settings/system/ModelInfoPreferenceController.java
index f23ec65..4fd8b53 100644
--- a/src/com/android/car/settings/system/ModelInfoPreferenceController.java
+++ b/src/com/android/car/settings/system/ModelInfoPreferenceController.java
@@ -16,24 +16,31 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
 import android.os.Build;
 
+import androidx.preference.Preference;
+
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
 import com.android.settingslib.DeviceInfoUtils;
 
 /** Updates the model info entry summary with the model info. */
-public class ModelInfoPreferenceController extends NoSetupPreferenceController {
+public class ModelInfoPreferenceController extends PreferenceController<Preference> {
 
-    public ModelInfoPreferenceController(Context context,
-            String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+    public ModelInfoPreferenceController(Context context, String preferenceKey,
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
     }
 
     @Override
-    public CharSequence getSummary() {
-        return Build.MODEL + DeviceInfoUtils.getMsvSuffix();
+    protected Class<Preference> getPreferenceType() {
+        return Preference.class;
+    }
+
+    @Override
+    protected void updateState(Preference preference) {
+        preference.setSummary(Build.MODEL + DeviceInfoUtils.getMsvSuffix());
     }
 }
diff --git a/src/com/android/car/settings/system/ResetAppPrefFragment.java b/src/com/android/car/settings/system/ResetAppPrefFragment.java
index 2f50e05..70725e9 100644
--- a/src/com/android/car/settings/system/ResetAppPrefFragment.java
+++ b/src/com/android/car/settings/system/ResetAppPrefFragment.java
@@ -38,8 +38,8 @@
 import androidx.annotation.XmlRes;
 
 import com.android.car.settings.R;
-import com.android.car.settings.common.BasePreferenceFragment;
 import com.android.car.settings.common.Logger;
+import com.android.car.settings.common.SettingsFragment;
 
 import java.lang.ref.WeakReference;
 import java.util.List;
@@ -47,7 +47,7 @@
 /**
  * Presents the user with information about resetting app preferences.
  */
-public class ResetAppPrefFragment extends BasePreferenceFragment {
+public class ResetAppPrefFragment extends SettingsFragment {
 
     private static final Logger LOG = new Logger(ResetAppPrefFragment.class);
 
diff --git a/src/com/android/car/settings/system/ResetEsimPreferenceController.java b/src/com/android/car/settings/system/ResetEsimPreferenceController.java
index 6b11408..863d819 100644
--- a/src/com/android/car/settings/system/ResetEsimPreferenceController.java
+++ b/src/com/android/car/settings/system/ResetEsimPreferenceController.java
@@ -16,23 +16,31 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.provider.Settings;
 import android.telephony.euicc.EuiccManager;
 
+import androidx.preference.TwoStatePreference;
+
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
 
 /**
  * Controller which determines if a checkbox to reset the device's eSIMs is shown. Not all
  * devices support eSIMs.
  */
-public class ResetEsimPreferenceController extends NoSetupPreferenceController {
+public class ResetEsimPreferenceController extends PreferenceController<TwoStatePreference> {
 
     public ResetEsimPreferenceController(Context context, String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
+    }
+
+    @Override
+    protected Class<TwoStatePreference> getPreferenceType() {
+        return TwoStatePreference.class;
     }
 
     @Override
@@ -41,11 +49,12 @@
     }
 
     private boolean showEuiccSettings() {
-        EuiccManager euiccManager = (EuiccManager) mContext.getSystemService(Context.EUICC_SERVICE);
+        EuiccManager euiccManager = (EuiccManager) getContext().getSystemService(
+                Context.EUICC_SERVICE);
         if (!euiccManager.isEnabled()) {
             return false;
         }
-        ContentResolver resolver = mContext.getContentResolver();
+        ContentResolver resolver = getContext().getContentResolver();
         return Settings.Global.getInt(resolver, Settings.Global.EUICC_PROVISIONED, 0) != 0
                 || Settings.Global.getInt(resolver, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0)
                 != 0;
diff --git a/src/com/android/car/settings/system/ResetNetworkConfirmFragment.java b/src/com/android/car/settings/system/ResetNetworkConfirmFragment.java
index 9759498..29c2453 100644
--- a/src/com/android/car/settings/system/ResetNetworkConfirmFragment.java
+++ b/src/com/android/car/settings/system/ResetNetworkConfirmFragment.java
@@ -45,14 +45,14 @@
 import androidx.preference.PreferenceManager;
 
 import com.android.car.settings.R;
-import com.android.car.settings.common.BasePreferenceFragment;
 import com.android.car.settings.common.ErrorDialog;
+import com.android.car.settings.common.SettingsFragment;
 
 /**
  * Final warning presented to user to confirm restoring network settings to the factory default.
  * If a user confirms, all settings are reset for connectivity, Wi-Fi, and Bluetooth.
  */
-public class ResetNetworkConfirmFragment extends BasePreferenceFragment {
+public class ResetNetworkConfirmFragment extends SettingsFragment {
 
     // Copied from com.android.settings.network.ApnSettings.
     @VisibleForTesting
diff --git a/src/com/android/car/settings/system/ResetNetworkEntryPreferenceController.java b/src/com/android/car/settings/system/ResetNetworkEntryPreferenceController.java
index d2e3e27..10632d7 100644
--- a/src/com/android/car/settings/system/ResetNetworkEntryPreferenceController.java
+++ b/src/com/android/car/settings/system/ResetNetworkEntryPreferenceController.java
@@ -16,24 +16,32 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
+import com.android.car.settings.common.RestrictedPreference;
 
 /** Controller which determines if network reset should be displayed based on user status. */
-public class ResetNetworkEntryPreferenceController extends NoSetupPreferenceController {
+public class ResetNetworkEntryPreferenceController extends
+        PreferenceController<RestrictedPreference> {
 
     private final CarUserManagerHelper mCarUserManagerHelper;
 
     public ResetNetworkEntryPreferenceController(Context context, String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
         mCarUserManagerHelper = new CarUserManagerHelper(context);
     }
 
     @Override
+    protected Class<RestrictedPreference> getPreferenceType() {
+        return RestrictedPreference.class;
+    }
+
+    @Override
     public int getAvailabilityStatus() {
         return mCarUserManagerHelper.isCurrentProcessAdminUser() ? AVAILABLE : DISABLED_FOR_USER;
     }
diff --git a/src/com/android/car/settings/system/ResetNetworkFragment.java b/src/com/android/car/settings/system/ResetNetworkFragment.java
index 956a8d6..ef81b8b 100644
--- a/src/com/android/car/settings/system/ResetNetworkFragment.java
+++ b/src/com/android/car/settings/system/ResetNetworkFragment.java
@@ -28,8 +28,8 @@
 import androidx.annotation.XmlRes;
 
 import com.android.car.settings.R;
-import com.android.car.settings.common.BasePreferenceFragment;
 import com.android.car.settings.common.FragmentController;
+import com.android.car.settings.common.SettingsFragment;
 import com.android.car.settings.security.CheckLockActivity;
 
 /**
@@ -37,7 +37,7 @@
  * values. If a user confirms, they will first be required to authenticate then presented with a
  * secondary confirmation: {@link ResetNetworkConfirmFragment}.
  */
-public class ResetNetworkFragment extends BasePreferenceFragment {
+public class ResetNetworkFragment extends SettingsFragment {
 
     // Arbitrary request code for starting CheckLockActivity when the reset button is clicked.
     private static final int REQUEST_CODE = 123;
diff --git a/src/com/android/car/settings/system/ResetNetworkItemsPreferenceController.java b/src/com/android/car/settings/system/ResetNetworkItemsPreferenceController.java
index 4375e2d..d018c3c 100644
--- a/src/com/android/car/settings/system/ResetNetworkItemsPreferenceController.java
+++ b/src/com/android/car/settings/system/ResetNetworkItemsPreferenceController.java
@@ -16,39 +16,51 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
 import android.content.pm.PackageManager;
 
+import androidx.preference.Preference;
+
 import com.android.car.settings.R;
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
 
 import java.util.StringJoiner;
 
 /** Controller to determine which items appear as resetable within the reset network description. */
-public class ResetNetworkItemsPreferenceController extends NoSetupPreferenceController {
+public class ResetNetworkItemsPreferenceController extends PreferenceController<Preference> {
 
     public ResetNetworkItemsPreferenceController(Context context, String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
     }
 
     @Override
-    public CharSequence getSummary() {
+    protected Class<Preference> getPreferenceType() {
+        return Preference.class;
+    }
+
+    @Override
+    protected void updateState(Preference preference) {
+        preference.setSummary(getSummary());
+    }
+
+    private CharSequence getSummary() {
         StringJoiner joiner = new StringJoiner(System.lineSeparator());
         if (hasFeature(PackageManager.FEATURE_WIFI)) {
-            joiner.add(mContext.getString(R.string.reset_network_item_wifi));
+            joiner.add(getContext().getString(R.string.reset_network_item_wifi));
         }
         if (hasFeature(PackageManager.FEATURE_TELEPHONY)) {
-            joiner.add(mContext.getString(R.string.reset_network_item_mobile));
+            joiner.add(getContext().getString(R.string.reset_network_item_mobile));
         }
         if (hasFeature(PackageManager.FEATURE_BLUETOOTH)) {
-            joiner.add(mContext.getString(R.string.reset_network_item_bluetooth));
+            joiner.add(getContext().getString(R.string.reset_network_item_bluetooth));
         }
         return joiner.toString();
     }
 
     private boolean hasFeature(String feature) {
-        return mContext.getPackageManager().hasSystemFeature(feature);
+        return getContext().getPackageManager().hasSystemFeature(feature);
     }
 }
diff --git a/src/com/android/car/settings/system/ResetNetworkSubscriptionPreferenceController.java b/src/com/android/car/settings/system/ResetNetworkSubscriptionPreferenceController.java
index 9ebd355..fab9b03 100644
--- a/src/com/android/car/settings/system/ResetNetworkSubscriptionPreferenceController.java
+++ b/src/com/android/car/settings/system/ResetNetworkSubscriptionPreferenceController.java
@@ -16,6 +16,7 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.telephony.SubscriptionInfo;
@@ -23,12 +24,10 @@
 import android.text.TextUtils;
 
 import androidx.preference.ListPreference;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
 
 import com.android.car.settings.R;
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -38,40 +37,41 @@
  * network subscriptions, a user may select the network to reset.
  */
 public class ResetNetworkSubscriptionPreferenceController extends
-        NoSetupPreferenceController implements Preference.OnPreferenceChangeListener {
+        PreferenceController<ListPreference> {
 
     private final SubscriptionManager mSubscriptionManager;
-    private ListPreference mListPreference;
 
     public ResetNetworkSubscriptionPreferenceController(Context context, String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
         mSubscriptionManager = (SubscriptionManager) context.getSystemService(
                 Context.TELEPHONY_SUBSCRIPTION_SERVICE);
     }
 
     @Override
+    protected Class<ListPreference> getPreferenceType() {
+        return ListPreference.class;
+    }
+
+    @Override
     public int getAvailabilityStatus() {
-        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
+        return getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
                 ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
 
     @Override
-    public void displayPreference(PreferenceScreen screen) {
-        super.displayPreference(screen);
-        mListPreference = (ListPreference) screen.findPreference(getPreferenceKey());
-
+    protected void updateState(ListPreference preference) {
         List<SubscriptionInfo> subscriptions = mSubscriptionManager.getActiveSubscriptionInfoList();
         if (subscriptions == null || subscriptions.isEmpty()) {
             // No subscriptions to reset.
-            mListPreference.setValue(String.valueOf(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
-            mListPreference.setVisible(false);
+            preference.setValue(String.valueOf(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
+            preference.setVisible(false);
             return;
         }
         if (subscriptions.size() == 1) {
             // Only one subscription, so nothing else to select. Use it and hide the preference.
-            mListPreference.setValue(String.valueOf(subscriptions.get(0).getSubscriptionId()));
-            mListPreference.setVisible(false);
+            preference.setValue(String.valueOf(subscriptions.get(0).getSubscriptionId()));
+            preference.setVisible(false);
             return;
         }
 
@@ -91,10 +91,19 @@
             subscriptionIds.add(String.valueOf(subscriptionId));
         }
 
-        mListPreference.setEntries(toCharSequenceArray(subscriptionNames));
-        mListPreference.setEntryValues(toCharSequenceArray(subscriptionIds));
-        mListPreference.setTitle(subscriptionNames.get(selectedIndex));
-        mListPreference.setValueIndex(selectedIndex);
+        preference.setEntries(toCharSequenceArray(subscriptionNames));
+        preference.setEntryValues(toCharSequenceArray(subscriptionIds));
+        preference.setTitle(subscriptionNames.get(selectedIndex));
+        preference.setValueIndex(selectedIndex);
+    }
+
+    @Override
+    protected boolean handlePreferenceChanged(ListPreference preference, Object newValue) {
+        String subscriptionIdStr = (String) newValue;
+        int index = preference.findIndexOfValue(subscriptionIdStr);
+        CharSequence subscriptionName = preference.getEntries()[index];
+        preference.setTitle(subscriptionName);
+        return true;
     }
 
     /**
@@ -127,7 +136,7 @@
             name = subscription.getCarrierName().toString();
         }
         if (TextUtils.isEmpty(name)) {
-            name = mContext.getString(R.string.reset_network_fallback_subscription_name,
+            name = getContext().getString(R.string.reset_network_fallback_subscription_name,
                     subscription.getMcc(), subscription.getMnc(), subscription.getSimSlotIndex(),
                     subscription.getSubscriptionId());
         }
@@ -139,13 +148,4 @@
         list.toArray(array);
         return array;
     }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        String subscriptionIdStr = (String) newValue;
-        int index = mListPreference.findIndexOfValue(subscriptionIdStr);
-        CharSequence subscriptionName = mListPreference.getEntries()[index];
-        mListPreference.setTitle(subscriptionName);
-        return true;
-    }
 }
diff --git a/src/com/android/car/settings/system/ResetOptionsFragment.java b/src/com/android/car/settings/system/ResetOptionsFragment.java
index 8af0e38..a0643cf 100644
--- a/src/com/android/car/settings/system/ResetOptionsFragment.java
+++ b/src/com/android/car/settings/system/ResetOptionsFragment.java
@@ -17,12 +17,12 @@
 package com.android.car.settings.system;
 
 import com.android.car.settings.R;
-import com.android.car.settings.common.BasePreferenceFragment;
+import com.android.car.settings.common.SettingsFragment;
 
 /**
  * Shows options to reset network settings, reset app preferences, and factory reset the device.
  */
-public class ResetOptionsFragment extends BasePreferenceFragment {
+public class ResetOptionsFragment extends SettingsFragment {
 
     @Override
     protected int getPreferenceScreenResId() {
diff --git a/src/com/android/car/settings/system/SecurityPatchPreferenceController.java b/src/com/android/car/settings/system/SecurityPatchPreferenceController.java
index 54e68cc..f48357c 100644
--- a/src/com/android/car/settings/system/SecurityPatchPreferenceController.java
+++ b/src/com/android/car/settings/system/SecurityPatchPreferenceController.java
@@ -16,23 +16,30 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
 
+import androidx.preference.Preference;
+
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
 import com.android.settingslib.DeviceInfoUtils;
 
 /** Updates the security patch entry summary with the security patch. */
-public class SecurityPatchPreferenceController extends NoSetupPreferenceController {
+public class SecurityPatchPreferenceController extends PreferenceController<Preference> {
 
-    public SecurityPatchPreferenceController(Context context,
-            String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+    public SecurityPatchPreferenceController(Context context, String preferenceKey,
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
     }
 
     @Override
-    public CharSequence getSummary() {
-        return DeviceInfoUtils.getSecurityPatch();
+    protected Class<Preference> getPreferenceType() {
+        return Preference.class;
+    }
+
+    @Override
+    protected void updateState(Preference preference) {
+        preference.setSummary(DeviceInfoUtils.getSecurityPatch());
     }
 }