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;
