Migrate system settings page to PreferenceController and SettingsFragment.

Because ExtraSettingsLoader was migrated but this fragment was not, loading extra settings was no longer working on this page and blocking other development.

Bug: 112931076

Test: build and deploy, RunCarSettingsRoboTests
Change-Id: Ida9824cf189a3ecb25e2669401b0ad853fb9df28
diff --git a/src/com/android/car/settings/system/AboutSettingsEntryPreferenceController.java b/src/com/android/car/settings/system/AboutSettingsEntryPreferenceController.java
index 42f59c6..8f13d9f 100644
--- a/src/com/android/car/settings/system/AboutSettingsEntryPreferenceController.java
+++ b/src/com/android/car/settings/system/AboutSettingsEntryPreferenceController.java
@@ -16,23 +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 about settings entry summary with the build version. */
-public class AboutSettingsEntryPreferenceController extends NoSetupPreferenceController {
+public class AboutSettingsEntryPreferenceController extends PreferenceController<Preference> {
 
     public AboutSettingsEntryPreferenceController(Context context, String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+            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/DeveloperOptionsEntryPreferenceController.java b/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceController.java
index 7cf27f8..9b2b22b 100644
--- a/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceController.java
+++ b/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceController.java
@@ -16,28 +16,35 @@
 
 package com.android.car.settings.system;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.car.userlib.CarUserManagerHelper;
 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.car.settings.development.DevelopmentSettingsUtil;
 
 /** Controls the visibility of the developer options setting. */
-public class DeveloperOptionsEntryPreferenceController extends NoSetupPreferenceController {
+public class DeveloperOptionsEntryPreferenceController extends PreferenceController<Preference> {
 
     private CarUserManagerHelper mCarUserManagerHelper;
 
-    public DeveloperOptionsEntryPreferenceController(Context context,
-            String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
-        mCarUserManagerHelper = new CarUserManagerHelper(mContext);
+    public DeveloperOptionsEntryPreferenceController(Context context, String preferenceKey,
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
+        mCarUserManagerHelper = new CarUserManagerHelper(context);
     }
 
     @Override
-    public int getAvailabilityStatus() {
-        return DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext, mCarUserManagerHelper)
-                ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+    protected Class<Preference> getPreferenceType() {
+        return Preference.class;
+    }
+
+    @Override
+    protected int getAvailabilityStatus() {
+        return DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(getContext(),
+                mCarUserManagerHelper) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 }
diff --git a/src/com/android/car/settings/system/SystemSettingsFragment.java b/src/com/android/car/settings/system/SystemSettingsFragment.java
index 85c1d1c..5b5efc2 100644
--- a/src/com/android/car/settings/system/SystemSettingsFragment.java
+++ b/src/com/android/car/settings/system/SystemSettingsFragment.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 basic info about the system and provide some actions like update, reset etc.
  */
-public class SystemSettingsFragment extends BasePreferenceFragment {
+public class SystemSettingsFragment extends SettingsFragment {
 
     @Override
     protected int getPreferenceScreenResId() {
diff --git a/src/com/android/car/settings/system/SystemUpdatePreferenceController.java b/src/com/android/car/settings/system/SystemUpdatePreferenceController.java
index 7f28af1..9a29e47 100644
--- a/src/com/android/car/settings/system/SystemUpdatePreferenceController.java
+++ b/src/com/android/car/settings/system/SystemUpdatePreferenceController.java
@@ -18,6 +18,7 @@
 
 import static android.content.Context.CARRIER_CONFIG_SERVICE;
 
+import android.car.drivingstate.CarUxRestrictions;
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.content.Intent;
@@ -26,13 +27,12 @@
 import android.text.TextUtils;
 
 import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
 
 import com.android.car.settings.R;
 import com.android.car.settings.Utils;
 import com.android.car.settings.common.FragmentController;
 import com.android.car.settings.common.Logger;
-import com.android.car.settings.common.NoSetupPreferenceController;
+import com.android.car.settings.common.PreferenceController;
 
 /**
  * Controller which determines if the system update preference should be displayed based on
@@ -41,46 +41,52 @@
  *
  * @see CarrierConfigManager#KEY_CI_ACTION_ON_SYS_UPDATE_BOOL
  */
-public class SystemUpdatePreferenceController extends NoSetupPreferenceController {
+public class SystemUpdatePreferenceController extends PreferenceController<Preference> {
 
     private static final Logger LOG = new Logger(SystemUpdatePreferenceController.class);
 
     private final CarUserManagerHelper mCarUserManagerHelper;
+    private boolean mActivityFound;
 
     public SystemUpdatePreferenceController(Context context, String preferenceKey,
-            FragmentController fragmentController) {
-        super(context, preferenceKey, fragmentController);
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
         mCarUserManagerHelper = new CarUserManagerHelper(context);
     }
 
     @Override
-    public int getAvailabilityStatus() {
-        if (!mContext.getResources().getBoolean(R.bool.config_show_system_update_settings)) {
+    protected Class<Preference> getPreferenceType() {
+        return Preference.class;
+    }
+
+    @Override
+    protected int getAvailabilityStatus() {
+        if (!getContext().getResources().getBoolean(R.bool.config_show_system_update_settings)) {
             return UNSUPPORTED_ON_DEVICE;
         }
         return mCarUserManagerHelper.isCurrentProcessAdminUser() ? AVAILABLE : DISABLED_FOR_USER;
     }
 
     @Override
-    public void displayPreference(PreferenceScreen screen) {
-        super.displayPreference(screen);
-        if (isAvailable()) {
-            Utils.updatePreferenceToSpecificActivityOrRemove(mContext, screen, getPreferenceKey(),
-                    Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
-        }
+    protected void onCreateInternal() {
+        mActivityFound = Utils.updatePreferenceToSpecificActivity(getContext(), getPreference(),
+                Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
     }
 
     @Override
-    public boolean handlePreferenceTreeClick(Preference preference) {
-        if (TextUtils.equals(getPreferenceKey(), preference.getKey())) {
-            CarrierConfigManager configManager = (CarrierConfigManager) mContext.getSystemService(
-                    CARRIER_CONFIG_SERVICE);
-            PersistableBundle b = configManager.getConfig();
-            if (b != null && b.getBoolean(CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL)) {
-                ciActionOnSysUpdate(b);
-            }
+    protected void updateState(Preference preference) {
+        preference.setVisible(mActivityFound);
+    }
+
+    @Override
+    protected boolean handlePreferenceClicked(Preference preference) {
+        CarrierConfigManager configManager = (CarrierConfigManager) getContext().getSystemService(
+                CARRIER_CONFIG_SERVICE);
+        PersistableBundle b = configManager.getConfig();
+        if (b != null && b.getBoolean(CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL)) {
+            ciActionOnSysUpdate(b);
         }
-        // Return false as to not block other handlers.
+        // Don't handle so that preference framework will launch the preference intent.
         return false;
     }
 
@@ -100,7 +106,7 @@
             }
             LOG.d("ciActionOnSysUpdate: broadcasting intent " + intentStr + " with extra " + extra
                     + ", " + extraVal);
-            mContext.getApplicationContext().sendBroadcast(intent);
+            getContext().getApplicationContext().sendBroadcast(intent);
         }
     }
 }