Migrate more settings to SubSettingLauncher

Bug: 73250851
Test: robotest
Change-Id: Ifc27b90d68bf4a907f169e19338e9b52ea5f9922
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 2fceb63..0374d0b 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -683,22 +683,4 @@
         }
         getActivity().setResult(result);
     }
-
-    public boolean startFragment(Fragment caller, String fragmentClass, int titleRes,
-            int requestCode, Bundle extras) {
-        final Activity activity = getActivity();
-        if (activity instanceof SettingsActivity) {
-            SettingsActivity sa = (SettingsActivity) activity;
-            sa.startPreferencePanel(
-                    caller, fragmentClass, extras, titleRes, null, caller, requestCode);
-            return true;
-        } else {
-            Log.w(TAG,
-                    "Parent isn't SettingsActivity nor PreferenceActivity, thus there's no way to "
-                            + "launch the given Fragment (name: " + fragmentClass
-                            + ", requestCode: " + requestCode + ")");
-            return false;
-        }
-    }
-
 }
diff --git a/src/com/android/settings/applications/ProcessStatsSummary.java b/src/com/android/settings/applications/ProcessStatsSummary.java
index 75f8ba6..53da04c 100644
--- a/src/com/android/settings/applications/ProcessStatsSummary.java
+++ b/src/com/android/settings/applications/ProcessStatsSummary.java
@@ -22,11 +22,13 @@
 import android.support.v7.preference.Preference.OnPreferenceClickListener;
 import android.text.format.Formatter;
 import android.text.format.Formatter.BytesResult;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SummaryPreference;
 import com.android.settings.Utils;
 import com.android.settings.applications.ProcStatsData.MemInfo;
+import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.dashboard.SummaryLoader;
 
 public class ProcessStatsSummary extends ProcessStatsBase implements OnPreferenceClickListener {
@@ -110,12 +112,16 @@
     @Override
     public boolean onPreferenceClick(Preference preference) {
         if (preference == mAppListPreference) {
-            Bundle args = new Bundle();
+            final Bundle args = new Bundle();
             args.putBoolean(ARG_TRANSFER_STATS, true);
             args.putInt(ARG_DURATION_INDEX, mDurationIndex);
             mStatsManager.xferStats();
-            startFragment(this, ProcessStatsUi.class.getName(), R.string.memory_usage_apps, 0,
-                    args);
+            new SubSettingLauncher(getContext())
+                    .setDestination(ProcessStatsUi.class.getName())
+                    .setTitle(R.string.memory_usage_apps)
+                    .setArguments(args)
+                    .setSourceMetricsCategory(getMetricsCategory())
+                    .launch();
             return true;
         }
         return false;
diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index e724d48..587e325 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -52,8 +52,10 @@
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.Spinner;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.datausage.CycleAdapter.SpinnerInterface;
 import com.android.settings.widget.LoadingViewController;
 import com.android.settingslib.AppItem;
@@ -61,6 +63,7 @@
 import com.android.settingslib.net.ChartDataLoader;
 import com.android.settingslib.net.SummaryForAllUidLoader;
 import com.android.settingslib.net.UidDetailProvider;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -149,8 +152,12 @@
         mHeader.findViewById(R.id.filter_settings).setOnClickListener(btn -> {
             final Bundle args = new Bundle();
             args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
-            startFragment(DataUsageList.this, BillingCycleSettings.class.getName(),
-                    R.string.billing_cycle, 0, args);
+            new SubSettingLauncher(getContext())
+                    .setDestination(BillingCycleSettings.class.getName())
+                    .setTitle(R.string.billing_cycle)
+                    .setSourceMetricsCategory(getMetricsCategory())
+                    .setArguments(args)
+                    .launch();
         });
         mCycleSpinner = mHeader.findViewById(R.id.filter_spinner);
         mCycleAdapter = new CycleAdapter(mCycleSpinner.getContext(), new SpinnerInterface() {
@@ -404,10 +411,16 @@
     }
 
     private void startAppDataUsage(AppItem item) {
-        Bundle args = new Bundle();
+        final Bundle args = new Bundle();
         args.putParcelable(AppDataUsage.ARG_APP_ITEM, item);
         args.putParcelable(AppDataUsage.ARG_NETWORK_TEMPLATE, mTemplate);
-        startFragment(this, AppDataUsage.class.getName(), R.string.app_data_usage, 0, args);
+
+        new SubSettingLauncher(getContext())
+                .setDestination(AppDataUsage.class.getName())
+                .setTitle(R.string.app_data_usage)
+                .setArguments(args)
+                .setSourceMetricsCategory(getMetricsCategory())
+                .launch();
     }
 
     /**
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index f3ef4c7..c2a72e6 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -57,6 +57,7 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
 import com.android.settings.applications.manageapplications.ManageApplications;
+import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.deviceinfo.StorageSettings.MountTask;
 import com.android.settingslib.deviceinfo.StorageMeasurement;
@@ -430,13 +431,21 @@
                 return true;
             case R.id.storage_unmount:
                 args.putString(VolumeInfo.EXTRA_VOLUME_ID, mVolume.getId());
-                startFragment(this, PrivateVolumeUnmount.class.getCanonicalName(),
-                        R.string.storage_menu_unmount, 0, args);
+                new SubSettingLauncher(context)
+                        .setDestination(PrivateVolumeUnmount.class.getCanonicalName())
+                        .setTitle(R.string.storage_menu_unmount)
+                        .setSourceMetricsCategory(getMetricsCategory())
+                        .setArguments(args)
+                        .launch();
                 return true;
             case R.id.storage_format:
                 args.putString(VolumeInfo.EXTRA_VOLUME_ID, mVolume.getId());
-                startFragment(this, PrivateVolumeFormat.class.getCanonicalName(),
-                        R.string.storage_menu_format, 0, args);
+                new SubSettingLauncher(context)
+                        .setDestination(PrivateVolumeFormat.class.getCanonicalName())
+                        .setTitle(R.string.storage_menu_format)
+                        .setSourceMetricsCategory(getMetricsCategory())
+                        .setArguments(args)
+                        .launch();
                 return true;
             case R.id.storage_migrate:
                 final Intent intent = new Intent(context, StorageWizardMigrateConfirm.class);
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index 2093469..17a06df 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -48,6 +48,7 @@
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.search.BaseSearchIndexProvider;
@@ -56,9 +57,7 @@
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.deviceinfo.PrivateStorageInfo;
 import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
-import com.android.settingslib.drawer.SettingsDrawerActivity;
 
-import java.io.File;
 import java.text.NumberFormat;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -279,15 +278,23 @@
                 args.putString(VolumeInfo.EXTRA_VOLUME_ID, vol.getId());
 
                 if (VolumeInfo.ID_PRIVATE_INTERNAL.equals(vol.getId())) {
-                    startFragment(this, StorageDashboardFragment.class.getCanonicalName(),
-                            R.string.storage_settings, 0, args);
+                    new SubSettingLauncher(getContext())
+                            .setDestination(StorageDashboardFragment.class.getCanonicalName())
+                            .setTitle(R.string.storage_settings)
+                            .setSourceMetricsCategory(getMetricsCategory())
+                            .setArguments(args)
+                            .launch();
                 } else {
                     // TODO: Go to the StorageDashboardFragment once it fully handles all of the
                     //       SD card cases and other private internal storage cases.
                     PrivateVolumeSettings.setVolumeSize(args, PrivateStorageInfo.getTotalSize(vol,
                             sTotalInternalStorage));
-                    startFragment(this, PrivateVolumeSettings.class.getCanonicalName(),
-                            -1, 0, args);
+                    new SubSettingLauncher(getContext())
+                            .setDestination(PrivateVolumeSettings.class.getCanonicalName())
+                            .setTitle(-1)
+                            .setSourceMetricsCategory(getMetricsCategory())
+                            .setArguments(args)
+                            .launch();
                 }
 
                 return true;
@@ -299,8 +306,12 @@
                 } else {
                     final Bundle args = new Bundle();
                     args.putString(VolumeInfo.EXTRA_VOLUME_ID, vol.getId());
-                    startFragment(this, PublicVolumeSettings.class.getCanonicalName(),
-                            -1, 0, args);
+                    new SubSettingLauncher(getContext())
+                            .setDestination(PublicVolumeSettings.class.getCanonicalName())
+                            .setTitle(-1)
+                            .setSourceMetricsCategory(getMetricsCategory())
+                            .setArguments(args)
+                            .launch();
                     return true;
                 }
             }
@@ -314,8 +325,12 @@
             // Picked a missing private volume
             final Bundle args = new Bundle();
             args.putString(VolumeRecord.EXTRA_FS_UUID, key);
-            startFragment(this, PrivateVolumeForget.class.getCanonicalName(),
-                    R.string.storage_menu_forget, 0, args);
+            new SubSettingLauncher(getContext())
+                    .setDestination(PrivateVolumeForget.class.getCanonicalName())
+                            .setTitle(R.string.storage_menu_forget)
+                    .setSourceMetricsCategory(getMetricsCategory())
+                    .setArguments(args)
+                    .launch();
             return true;
         }
 
diff --git a/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java
index 91c4410..ec41a54 100644
--- a/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java
+++ b/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.security;
 
-import static com.android.settings.security.SecuritySettings.SET_OR_CHANGE_LOCK_METHOD_REQUEST_PROFILE;
-
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.Intent;
@@ -28,6 +26,7 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.password.ChooseLockGeneric;
 
 public class ChangeProfileScreenLockPreferenceController extends
@@ -76,9 +75,13 @@
         }
         final Bundle extras = new Bundle();
         extras.putInt(Intent.EXTRA_USER_ID, mProfileChallengeUserId);
-        mHost.startFragment(mHost, ChooseLockGeneric.ChooseLockGenericFragment.class.getName(),
-                R.string.lock_settings_picker_title_profile,
-                SET_OR_CHANGE_LOCK_METHOD_REQUEST_PROFILE, extras);
+        new SubSettingLauncher(mContext)
+                .setDestination(ChooseLockGeneric.ChooseLockGenericFragment.class.getName())
+                .setTitle(R.string.lock_settings_picker_title_profile)
+                .setSourceMetricsCategory(mHost.getMetricsCategory())
+                .setArguments(extras)
+                .launch();
+
         return true;
     }
 
diff --git a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
index 10143d2..d9e339b 100644
--- a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
+++ b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.security;
 
-import static com.android.settings.security.SecuritySettings.SET_OR_CHANGE_LOCK_METHOD_REQUEST;
-
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.os.UserHandle;
@@ -31,6 +29,7 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.password.ChooseLockGeneric;
 import com.android.settings.security.screenlock.ScreenLockSettings;
@@ -104,7 +103,10 @@
     @Override
     public void onGearClick(GearPreference p) {
         if (TextUtils.equals(p.getKey(), getPreferenceKey())) {
-            mHost.startFragment(mHost, ScreenLockSettings.class.getName(), 0, 0, null);
+            new SubSettingLauncher(mContext)
+                    .setDestination(ScreenLockSettings.class.getName())
+                    .setSourceMetricsCategory(mHost.getMetricsCategory())
+                    .launch();
         }
     }
 
@@ -124,8 +126,12 @@
                 return false;
             }
         }
-        mHost.startFragment(mHost, ChooseLockGeneric.ChooseLockGenericFragment.class.getName(),
-                R.string.lock_settings_picker_title, SET_OR_CHANGE_LOCK_METHOD_REQUEST, null);
+
+        new SubSettingLauncher(mContext)
+                .setDestination(ChooseLockGeneric.ChooseLockGenericFragment.class.getName())
+                .setTitle(R.string.lock_settings_picker_title)
+                .setSourceMetricsCategory(mHost.getMetricsCategory())
+                .launch();
         return true;
     }
 
diff --git a/src/com/android/settings/security/LockUnificationPreferenceController.java b/src/com/android/settings/security/LockUnificationPreferenceController.java
index abbf2f4..d6c6681 100644
--- a/src/com/android/settings/security/LockUnificationPreferenceController.java
+++ b/src/com/android/settings/security/LockUnificationPreferenceController.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.security;
 
-import static com.android.settings.security.SecuritySettings.SET_OR_CHANGE_LOCK_METHOD_REQUEST_PROFILE;
 import static com.android.settings.security.SecuritySettings.UNIFY_LOCK_CONFIRM_DEVICE_REQUEST;
 import static com.android.settings.security.SecuritySettings.UNIFY_LOCK_CONFIRM_PROFILE_REQUEST;
 import static com.android.settings.security.SecuritySettings.UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST;
@@ -35,6 +34,7 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.password.ChooseLockGeneric;
 import com.android.settings.password.ChooseLockSettingsHelper;
@@ -153,12 +153,14 @@
     }
 
     private void ununifyLocks() {
-        Bundle extras = new Bundle();
+        final Bundle extras = new Bundle();
         extras.putInt(Intent.EXTRA_USER_ID, mProfileChallengeUserId);
-        mHost.startFragment(mHost,
-                ChooseLockGeneric.ChooseLockGenericFragment.class.getName(),
-                R.string.lock_settings_picker_title_profile,
-                SET_OR_CHANGE_LOCK_METHOD_REQUEST_PROFILE, extras);
+        new SubSettingLauncher(mContext)
+                .setDestination(ChooseLockGeneric.ChooseLockGenericFragment.class.getName())
+                    .setTitle(R.string.lock_settings_picker_title_profile)
+                .setSourceMetricsCategory(mHost.getMetricsCategory())
+                .setArguments(extras)
+                .launch();
     }
 
     void launchConfirmDeviceLockForUnification() {
@@ -209,9 +211,11 @@
     void unifyUncompliantLocks() {
         mLockPatternUtils.setSeparateProfileChallengeEnabled(mProfileChallengeUserId, false,
                 mCurrentProfilePassword);
-        mHost.startFragment(mHost, ChooseLockGeneric.ChooseLockGenericFragment.class.getName(),
-                R.string.lock_settings_picker_title,
-                SecuritySettings.SET_OR_CHANGE_LOCK_METHOD_REQUEST, null);
+        new SubSettingLauncher(mContext)
+                .setDestination(ChooseLockGeneric.ChooseLockGenericFragment.class.getName())
+                .setTitle(R.string.lock_settings_picker_title)
+                .setSourceMetricsCategory(mHost.getMetricsCategory())
+                .launch();
     }
 
 }
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index df3b455..7298cd6 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -49,9 +49,7 @@
 
     private static final String TAG = "SecuritySettings";
 
-    public static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123;
     public static final int CHANGE_TRUST_AGENT_SETTINGS = 126;
-    public static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST_PROFILE = 127;
     public static final int UNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 128;
     public static final int UNIFY_LOCK_CONFIRM_PROFILE_REQUEST = 129;
     public static final int UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 130;