Use SettingsLib's MainSwitchBar to replace SwitchBar in Settings.

To log Settings metrics, the MainSwitch extends MainSwitchBar and
replace the SwitchBar in SettingsActivity.

Bug: 175181773
Test: Run robotest and apply the widget in Settings and see the ui

Change-Id: I3add3702e9058ad9192b5172c7cf0e2ccfb55a70
diff --git a/src/com/android/settings/AllInOneTetherSettings.java b/src/com/android/settings/AllInOneTetherSettings.java
index 5442ed7..34d723f 100644
--- a/src/com/android/settings/AllInOneTetherSettings.java
+++ b/src/com/android/settings/AllInOneTetherSettings.java
@@ -49,8 +49,8 @@
 import com.android.settings.network.UsbTetherPreferenceController;
 import com.android.settings.network.WifiTetherDisablePreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBar;
-import com.android.settings.widget.SwitchBarController;
+import com.android.settings.widget.MainSwitchBarController;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settings.wifi.tether.WifiTetherApBandPreferenceController;
 import com.android.settings.wifi.tether.WifiTetherAutoOffPreferenceController;
 import com.android.settings.wifi.tether.WifiTetherBasePreferenceController;
@@ -227,15 +227,15 @@
             adapter.getProfileProxy(activity.getApplicationContext(), mProfileServiceListener,
                     BluetoothProfile.PAN);
         }
-        final SwitchBar switchBar = activity.getSwitchBar();
+        final SettingsMainSwitchBar mainSwitch = activity.getSwitchBar();
         mTetherEnabler = new TetherEnabler(activity,
-                new SwitchBarController(switchBar), mBluetoothPan);
+                new MainSwitchBarController(mainSwitch), mBluetoothPan);
         getSettingsLifecycle().addObserver(mTetherEnabler);
         use(UsbTetherPreferenceController.class).setTetherEnabler(mTetherEnabler);
         use(BluetoothTetherPreferenceController.class).setTetherEnabler(mTetherEnabler);
         use(EthernetTetherPreferenceController.class).setTetherEnabler(mTetherEnabler);
         use(WifiTetherDisablePreferenceController.class).setTetherEnabler(mTetherEnabler);
-        switchBar.show();
+        mainSwitch.show();
     }
 
     @Override
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 7f214f6..a574855 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -61,7 +61,7 @@
 import com.android.settings.homepage.TopLevelSettings;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.wfd.WifiDisplaySettings;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.core.instrumentation.Instrumentable;
 import com.android.settingslib.core.instrumentation.SharedPreferencesLogger;
 import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -172,7 +172,7 @@
         }
     };
 
-    private SwitchBar mSwitchBar;
+    private SettingsMainSwitchBar mMainSwitch;
 
     private Button mNextButton;
 
@@ -181,8 +181,8 @@
 
     private DashboardFeatureProvider mDashboardFeatureProvider;
 
-    public SwitchBar getSwitchBar() {
-        return mSwitchBar;
+    public SettingsMainSwitchBar getSwitchBar() {
+        return mMainSwitch;
     }
 
     @Override
@@ -292,9 +292,9 @@
             // If CollapsingToolbarLayout is applied, the old action bar won't show title.
             actionBar.setDisplayShowTitleEnabled(mCollapsingToolbarLayout == null);
         }
-        mSwitchBar = findViewById(R.id.switch_bar);
-        if (mSwitchBar != null) {
-            mSwitchBar.setMetricsTag(getMetricsTag());
+        mMainSwitch = findViewById(R.id.switch_bar);
+        if (mMainSwitch != null) {
+            mMainSwitch.setMetricsTag(getMetricsTag());
         }
 
         // see if we should show Back/Next buttons
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index 0f4b762..87d07a8 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -51,7 +51,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.accessibility.AccessibilityUtils;
 import com.android.settingslib.widget.FooterPreference;
 
@@ -176,7 +176,7 @@
         super.onViewCreated(view, savedInstanceState);
 
         final SettingsActivity activity = (SettingsActivity) getActivity();
-        final SwitchBar switchBar = activity.getSwitchBar();
+        final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
         switchBar.hide();
     }
 
diff --git a/src/com/android/settings/backup/ToggleBackupSettingFragment.java b/src/com/android/settings/backup/ToggleBackupSettingFragment.java
index 8b3a54a..8f60be9 100644
--- a/src/com/android/settings/backup/ToggleBackupSettingFragment.java
+++ b/src/com/android/settings/backup/ToggleBackupSettingFragment.java
@@ -11,6 +11,7 @@
 import android.provider.Settings;
 import android.util.Log;
 import android.view.View;
+import android.widget.Switch;
 import android.widget.TextView;
 
 import androidx.appcompat.app.AlertDialog;
@@ -21,8 +22,7 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.widget.SwitchBar;
-import com.android.settings.widget.ToggleSwitch;
+import com.android.settings.widget.SettingsMainSwitchBar;
 
 /**
  * Fragment to display a bunch of text about backup and restore, and allow the user to enable/
@@ -41,8 +41,7 @@
 
     private IBackupManager mBackupManager;
 
-    protected SwitchBar mSwitchBar;
-    protected ToggleSwitch mToggleSwitch;
+    protected SettingsMainSwitchBar mSwitchBar;
 
     private Preference mSummaryPreference;
 
@@ -79,7 +78,6 @@
 
         SettingsActivity activity = (SettingsActivity) getActivity();
         mSwitchBar = activity.getSwitchBar();
-        mToggleSwitch = mSwitchBar.getSwitch();
 
         // Set up UI.
         // If the user has not seen legal text for full data backup (if they OTA from L to M) then
@@ -105,7 +103,7 @@
     public void onDestroyView() {
         super.onDestroyView();
 
-        mToggleSwitch.setOnBeforeCheckedChangeListener(null);
+        mSwitchBar.setOnBeforeCheckedChangeListener(null);
         mSwitchBar.hide();
     }
 
@@ -115,11 +113,11 @@
 
         // Set up toggle listener. We need this b/c we have to intercept the toggle event in order
         // to pop up the dialogue.
-        mToggleSwitch.setOnBeforeCheckedChangeListener(
-                new ToggleSwitch.OnBeforeCheckedChangeListener() {
+        mSwitchBar.setOnBeforeCheckedChangeListener(
+                new SettingsMainSwitchBar.OnBeforeCheckedChangeListener() {
                     @Override
                     public boolean onBeforeCheckedChanged(
-                            ToggleSwitch toggleSwitch, boolean checked) {
+                            Switch toggleSwitch, boolean checked) {
                         if (!checked) {
                             // Don't change Switch status until user makes choice in dialog
                             // so return true here.
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index 2da9eea..d489198 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -75,6 +75,8 @@
         mMetricsFeatureProvider = metricsFeatureProvider;
         mSwitchController = switchController;
         mSwitchController.setListener(this);
+        mSwitchController.setTitle(context.getString(R.string.bluetooth_main_switch_title));
+
         mValidListener = false;
         mMetricsEvent = metricsEvent;
 
@@ -191,7 +193,6 @@
             if (isChecked && !status) {
                 mSwitchController.setChecked(false);
                 mSwitchController.setEnabled(true);
-                mSwitchController.updateTitle(false);
                 triggerParentPreferenceCallback(false);
                 return false;
             }
diff --git a/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java b/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java
index 2f61452..4591b7f 100644
--- a/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java
@@ -25,8 +25,8 @@
 import com.android.settings.bluetooth.BluetoothSwitchPreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBar;
-import com.android.settings.widget.SwitchBarController;
+import com.android.settings.widget.MainSwitchBarController;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.search.SearchIndexable;
 import com.android.settingslib.widget.FooterPreference;
@@ -42,7 +42,7 @@
     private static final String KEY_BLUETOOTH_SCREEN_FOOTER = "bluetooth_screen_footer";
 
     private FooterPreference mFooterPreference;
-    private SwitchBar mSwitchBar;
+    private SettingsMainSwitchBar mSwitchBar;
     private BluetoothSwitchPreferenceController mController;
 
     @Override
@@ -83,9 +83,9 @@
 
         SettingsActivity activity = (SettingsActivity) getActivity();
         mSwitchBar = activity.getSwitchBar();
-        mSwitchBar.setSwitchBarText(R.string.bluetooth_setting_on, R.string.bluetooth_setting_off);
+        mSwitchBar.setTitle(getContext().getString(R.string.bluetooth_main_switch_title));
         mController = new BluetoothSwitchPreferenceController(activity,
-                new SwitchBarController(mSwitchBar), mFooterPreference);
+                new MainSwitchBarController(mSwitchBar), mFooterPreference);
         Lifecycle lifecycle = getSettingsLifecycle();
         if (lifecycle != null) {
             lifecycle.addObserver(mController);
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java
index a3f73fb..e4cde8e 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java
@@ -25,7 +25,7 @@
 import com.android.settings.location.LocationPersonalSettings;
 import com.android.settings.location.LocationSwitchBarController;
 import com.android.settings.location.LocationWorkProfileSettings;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 
 /**
  * Location Setting page for personal/managed profile.
@@ -36,9 +36,8 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         final SettingsActivity activity = (SettingsActivity) getActivity();
-        final SwitchBar switchBar = activity.getSwitchBar();
-        switchBar.setSwitchBarText(R.string.location_settings_primary_switch_title,
-                R.string.location_settings_primary_switch_title);
+        final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
+        switchBar.setTitle(getContext().getString(R.string.location_settings_primary_switch_title));
         final LocationSwitchBarController switchBarController = new LocationSwitchBarController(
                 activity, switchBar, getSettingsLifecycle());
         switchBar.show();
diff --git a/src/com/android/settings/datausage/DataSaverSummary.java b/src/com/android/settings/datausage/DataSaverSummary.java
index 7017fe1..2e52e38 100644
--- a/src/com/android/settings/datausage/DataSaverSummary.java
+++ b/src/com/android/settings/datausage/DataSaverSummary.java
@@ -29,23 +29,23 @@
 import com.android.settings.applications.AppStateBaseBridge.Callback;
 import com.android.settings.datausage.DataSaverBackend.Listener;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBar;
-import com.android.settings.widget.SwitchBar.OnSwitchChangeListener;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 import com.android.settingslib.applications.ApplicationsState.Callbacks;
 import com.android.settingslib.applications.ApplicationsState.Session;
 import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
 import java.util.ArrayList;
 
 @SearchIndexable
 public class DataSaverSummary extends SettingsPreferenceFragment
-        implements OnSwitchChangeListener, Listener, Callback, Callbacks {
+        implements OnMainSwitchChangeListener, Listener, Callback, Callbacks {
 
     private static final String KEY_UNRESTRICTED_ACCESS = "unrestricted_access";
 
-    private SwitchBar mSwitchBar;
+    private SettingsMainSwitchBar mSwitchBar;
     private DataSaverBackend mDataSaverBackend;
     private Preference mUnrestrictedAccess;
     private ApplicationsState mApplicationsState;
@@ -72,9 +72,7 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
-        mSwitchBar.setSwitchBarText(
-                R.string.data_saver_switch_title,
-                R.string.data_saver_switch_title);
+        mSwitchBar.setTitle(getContext().getString(R.string.data_saver_switch_title));
         mSwitchBar.show();
         mSwitchBar.addOnSwitchChangeListener(this);
     }
diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
index 495764b..a36d9ed 100644
--- a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
+++ b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
@@ -34,7 +34,7 @@
 import com.android.settings.Utils;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.search.SearchIndexable;
 
@@ -52,7 +52,7 @@
 
     private AutomaticStorageManagerSwitchBarController mSwitchController;
     private DropDownPreference mDaysToRetain;
-    private SwitchBar mSwitchBar;
+    private SettingsMainSwitchBar mSwitchBar;
 
     @Override
     public View onCreateView(
@@ -83,8 +83,8 @@
     private void initializeSwitchBar() {
         final SettingsActivity activity = (SettingsActivity) getActivity();
         mSwitchBar = activity.getSwitchBar();
-        mSwitchBar.setSwitchBarText(R.string.automatic_storage_manager_primary_switch_title,
-                R.string.automatic_storage_manager_primary_switch_title);
+        mSwitchBar.setTitle(
+                getContext().getString(R.string.automatic_storage_manager_primary_switch_title));
         mSwitchBar.show();
         mSwitchController =
                 new AutomaticStorageManagerSwitchBarController(
diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarController.java b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarController.java
index c54d789..f46bb0d 100644
--- a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarController.java
+++ b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarController.java
@@ -26,25 +26,26 @@
 import androidx.preference.Preference;
 
 import com.android.internal.util.Preconditions;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.Utils;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
 /** Handles the logic for flipping the storage management toggle on a {@link SwitchBar}. */
 public class AutomaticStorageManagerSwitchBarController
-        implements SwitchBar.OnSwitchChangeListener {
+        implements OnMainSwitchChangeListener {
     private static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY =
             "ro.storage_manager.enabled";
 
     private Context mContext;
-    private SwitchBar mSwitchBar;
+    private SettingsMainSwitchBar mSwitchBar;
     private MetricsFeatureProvider mMetrics;
     private Preference mDaysToRetainPreference;
     private FragmentManager mFragmentManager;
 
     public AutomaticStorageManagerSwitchBarController(
             Context context,
-            SwitchBar switchBar,
+            SettingsMainSwitchBar switchBar,
             MetricsFeatureProvider metrics,
             Preference daysToRetainPreference,
             FragmentManager fragmentManager) {
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index acd6bab..7b4926a 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -60,13 +60,14 @@
 import com.android.settings.development.qstile.DevelopmentTiles;
 import com.android.settings.development.storage.SharedDataPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.development.DeveloperOptionsPreferenceController;
 import com.android.settingslib.development.DevelopmentSettingsEnabler;
 import com.android.settingslib.development.SystemPropPoker;
 import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
 import com.google.android.setupcompat.util.WizardManagerHelper;
 
@@ -75,7 +76,7 @@
 
 @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
 public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFragment
-        implements SwitchBar.OnSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
+        implements OnMainSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
         AdbClearKeysDialogHost, LogPersistDialogHost,
         BluetoothA2dpHwOffloadRebootDialog.OnA2dpHwDialogConfirmedListener,
         AbstractBluetoothPreferenceController.Callback {
@@ -86,7 +87,7 @@
             new BluetoothA2dpConfigStore();
 
     private boolean mIsAvailable = true;
-    private SwitchBar mSwitchBar;
+    private SettingsMainSwitchBar mSwitchBar;
     private DevelopmentSwitchBarController mSwitchBarController;
     private List<AbstractPreferenceController> mPreferenceControllers = new ArrayList<>();
     private BluetoothA2dp mBluetoothA2dp;
@@ -197,10 +198,13 @@
         }
         // Set up primary switch
         mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
+        mSwitchBar.setTitle(getContext().getString(R.string.developer_options_main_switch_title));
+        mSwitchBar.show();
+        mSwitchBar.setTranslationZ(
+                getActivity().findViewById(R.id.main_content).getTranslationZ() + 1);
         mSwitchBarController = new DevelopmentSwitchBarController(
                 this /* DevelopmentSettings */, mSwitchBar, mIsAvailable,
                 getSettingsLifecycle());
-        mSwitchBar.show();
 
         // Restore UI state based on whether developer options is enabled
         if (DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(getContext())) {
@@ -231,7 +235,7 @@
 
         if (DevelopmentTiles.WirelessDebugging.class.getName().equals(
                 componentName.getClassName()) && getDevelopmentOptionsController(
-                    WirelessDebuggingPreferenceController.class).isAvailable()) {
+                WirelessDebuggingPreferenceController.class).isAvailable()) {
             Log.d(TAG, "Long press from wireless debugging qstile");
             new SubSettingLauncher(getContext())
                     .setDestination(WirelessDebuggingFragment.class.getName())
@@ -383,7 +387,7 @@
 
     @Override
     protected int getPreferenceScreenResId() {
-        return Utils.isMonkeyRunning()? R.xml.placeholder_prefs : R.xml.development_settings;
+        return Utils.isMonkeyRunning() ? R.xml.placeholder_prefs : R.xml.development_settings;
     }
 
     @Override
@@ -557,7 +561,7 @@
         controllers.add(new DefaultLaunchPreferenceController(context, "quick_settings_tiles"));
         controllers.add(new DefaultLaunchPreferenceController(context, "feature_flags_dashboard"));
         controllers.add(
-            new DefaultLaunchPreferenceController(context, "default_usb_configuration"));
+                new DefaultLaunchPreferenceController(context, "default_usb_configuration"));
         controllers.add(new DefaultLaunchPreferenceController(context, "density"));
         controllers.add(new DefaultLaunchPreferenceController(context, "background_check"));
         controllers.add(new DefaultLaunchPreferenceController(context, "inactive_apps"));
diff --git a/src/com/android/settings/development/DevelopmentSwitchBarController.java b/src/com/android/settings/development/DevelopmentSwitchBarController.java
index 84b7f9f..ac691ca 100644
--- a/src/com/android/settings/development/DevelopmentSwitchBarController.java
+++ b/src/com/android/settings/development/DevelopmentSwitchBarController.java
@@ -19,7 +19,7 @@
 import androidx.annotation.NonNull;
 
 import com.android.settings.Utils;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
@@ -28,12 +28,12 @@
 
 public class DevelopmentSwitchBarController implements LifecycleObserver, OnStart, OnStop {
 
-    private final SwitchBar mSwitchBar;
+    private final SettingsMainSwitchBar mSwitchBar;
     private final boolean mIsAvailable;
     private final DevelopmentSettingsDashboardFragment mSettings;
 
     public DevelopmentSwitchBarController(@NonNull DevelopmentSettingsDashboardFragment settings,
-            SwitchBar switchBar, boolean isAvailable, Lifecycle lifecycle) {
+            SettingsMainSwitchBar switchBar, boolean isAvailable, Lifecycle lifecycle) {
         mSwitchBar = switchBar;
         mIsAvailable = isAvailable && !Utils.isMonkeyRunning();
         mSettings = settings;
diff --git a/src/com/android/settings/development/WirelessDebuggingFragment.java b/src/com/android/settings/development/WirelessDebuggingFragment.java
index 68d25e1..47d4e52 100644
--- a/src/com/android/settings/development/WirelessDebuggingFragment.java
+++ b/src/com/android/settings/development/WirelessDebuggingFragment.java
@@ -15,6 +15,7 @@
  */
 
 package com.android.settings.development;
+
 import android.app.Activity;
 import android.app.Dialog;
 import android.app.settings.SettingsEnums;
@@ -40,7 +41,8 @@
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBarController;
+import com.android.settings.widget.MainSwitchBarController;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -170,9 +172,11 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         final SettingsActivity activity = (SettingsActivity) getActivity();
+        final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
+        switchBar.setTitle(getContext().getString(R.string.wireless_debugging_main_switch_title));
+
         mWifiDebuggingEnabler =  new WirelessDebuggingEnabler(activity,
-                new SwitchBarController(activity.getSwitchBar()), this,
-                getSettingsLifecycle());
+                new MainSwitchBarController(switchBar), this, getSettingsLifecycle());
     }
 
     @Override
diff --git a/src/com/android/settings/development/graphicsdriver/GraphicsDriverDashboard.java b/src/com/android/settings/development/graphicsdriver/GraphicsDriverDashboard.java
index 9275a31..87678f9 100644
--- a/src/com/android/settings/development/graphicsdriver/GraphicsDriverDashboard.java
+++ b/src/com/android/settings/development/graphicsdriver/GraphicsDriverDashboard.java
@@ -24,8 +24,8 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBar;
-import com.android.settings.widget.SwitchBarController;
+import com.android.settings.widget.MainSwitchBarController;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.development.DevelopmentSettingsEnabler;
 import com.android.settingslib.search.SearchIndexable;
 
@@ -62,11 +62,13 @@
         super.onActivityCreated(savedInstanceState);
 
         final SettingsActivity activity = (SettingsActivity) getActivity();
-        final SwitchBar switchBar = activity.getSwitchBar();
+        final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
         final GraphicsDriverGlobalSwitchBarController switchBarController =
                 new GraphicsDriverGlobalSwitchBarController(
-                        activity, new SwitchBarController(switchBar));
+                        activity, new MainSwitchBarController(switchBar));
         getSettingsLifecycle().addObserver(switchBarController);
+        switchBar.setTitle(
+                getContext().getString(R.string.graphics_driver_main_switch_title));
         switchBar.show();
     }
 
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
index a089abc..257810c 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
@@ -21,28 +21,32 @@
 import android.net.Uri;
 import android.os.PowerManager;
 import android.provider.SettingsSlicesContract;
+import android.widget.Switch;
 
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.fuelgauge.BatterySaverReceiver;
-import com.android.settings.widget.TwoStateButtonPreference;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
 import com.android.settingslib.fuelgauge.BatterySaverUtils;
+import com.android.settingslib.widget.MainSwitchPreference;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
+
 
 /**
  * Controller to update the battery saver button
  */
 public class BatterySaverButtonPreferenceController extends
-        TogglePreferenceController implements
-        LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
+        TogglePreferenceController implements OnMainSwitchChangeListener, LifecycleObserver,
+        OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
 
     private final BatterySaverReceiver mBatterySaverReceiver;
     private final PowerManager mPowerManager;
 
-    private TwoStateButtonPreference mPreference;
+    private MainSwitchPreference mPreference;
 
     public BatterySaverButtonPreferenceController(Context context, String key) {
         super(context, key);
@@ -84,7 +88,15 @@
     @Override
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
-        mPreference = screen.findPreference(getPreferenceKey());
+        mPreference = (MainSwitchPreference) screen.findPreference(getPreferenceKey());
+        mPreference.setTitle(mContext.getString(R.string.battery_saver_main_switch_title));
+        mPreference.addOnSwitchChangeListener(this);
+        mPreference.updateStatus(isChecked());
+    }
+
+    @Override
+    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+        setChecked(isChecked);
     }
 
     @Override
@@ -95,6 +107,7 @@
     @Override
     public boolean setChecked(boolean stateOn) {
         // This screen already shows a warning, so we don't need another warning.
+        mPreference.updateStatus(isChecked());
         return BatterySaverUtils.setPowerSaveMode(mContext, stateOn,
                 false /* needFirstTimeWarning */);
     }
@@ -109,8 +122,5 @@
 
     @Override
     public void onBatteryChanged(boolean pluggedIn) {
-        if (mPreference != null) {
-            mPreference.setButtonEnabled(!pluggedIn);
-        }
     }
 }
diff --git a/src/com/android/settings/inputmethod/SpellCheckersSettings.java b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
index dcd3703..99f7a4e 100644
--- a/src/com/android/settings/inputmethod/SpellCheckersSettings.java
+++ b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
@@ -36,11 +36,11 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.widget.SwitchBar;
-import com.android.settings.widget.SwitchBar.OnSwitchChangeListener;
+import com.android.settings.widget.SettingsMainSwitchBar;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
 public class SpellCheckersSettings extends SettingsPreferenceFragment
-        implements OnSwitchChangeListener, OnPreferenceChangeListener {
+        implements OnMainSwitchChangeListener, OnPreferenceChangeListener {
     private static final String TAG = SpellCheckersSettings.class.getSimpleName();
     private static final boolean DBG = false;
 
@@ -48,7 +48,7 @@
     private static final String KEY_DEFAULT_SPELL_CHECKER = "default_spellchecker";
     private static final int ITEM_ID_USE_SYSTEM_LANGUAGE = 0;
 
-    private SwitchBar mSwitchBar;
+    private SettingsMainSwitchBar mSwitchBar;
     private Preference mSpellCheckerLanaguagePref;
     private AlertDialog mDialog = null;
     private SpellCheckerInfo mCurrentSci;
@@ -92,9 +92,7 @@
     public void onResume() {
         super.onResume();
         mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
-        mSwitchBar.setSwitchBarText(
-                R.string.spell_checker_primary_switch_title,
-                R.string.spell_checker_primary_switch_title);
+        mSwitchBar.setTitle(getContext().getString(R.string.spell_checker_primary_switch_title));
         mSwitchBar.show();
         mSwitchBar.addOnSwitchChangeListener(this);
         updatePreferenceScreen();
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 4391811..b4f0f1f 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -28,7 +28,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.location.RecentLocationApps;
 import com.android.settingslib.search.SearchIndexable;
 
@@ -70,12 +70,11 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         final SettingsActivity activity = (SettingsActivity) getActivity();
-        final SwitchBar switchBar = activity.getSwitchBar();
-        switchBar.setSwitchBarText(R.string.location_settings_primary_switch_title,
-                R.string.location_settings_primary_switch_title);
+        final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
+        switchBar.setTitle(getContext().getString(R.string.location_settings_primary_switch_title));
+        switchBar.show();
         mSwitchBarController = new LocationSwitchBarController(activity, switchBar,
                 getSettingsLifecycle());
-        switchBar.show();
     }
 
     @Override
diff --git a/src/com/android/settings/location/LocationSwitchBarController.java b/src/com/android/settings/location/LocationSwitchBarController.java
index e8458d1..c84014f 100644
--- a/src/com/android/settings/location/LocationSwitchBarController.java
+++ b/src/com/android/settings/location/LocationSwitchBarController.java
@@ -17,25 +17,27 @@
 import android.os.UserHandle;
 import android.widget.Switch;
 
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
-public class LocationSwitchBarController implements SwitchBar.OnSwitchChangeListener,
+/**
+ * The switch controller for the location.
+ */
+public class LocationSwitchBarController implements OnMainSwitchChangeListener,
         LocationEnabler.LocationModeChangeListener, LifecycleObserver, OnStart, OnStop {
 
-    private final SwitchBar mSwitchBar;
-    private final Switch mSwitch;
+    private final SettingsMainSwitchBar mSwitchBar;
     private final LocationEnabler mLocationEnabler;
     private boolean mValidListener;
 
-    public LocationSwitchBarController(Context context, SwitchBar switchBar,
+    public LocationSwitchBarController(Context context, SettingsMainSwitchBar switchBar,
             Lifecycle lifecycle) {
         mSwitchBar = switchBar;
-        mSwitch = mSwitchBar.getSwitch();
         mLocationEnabler = new LocationEnabler(context, this /* listener */, lifecycle);
         if (lifecycle != null) {
             lifecycle.addObserver(this);
@@ -77,12 +79,12 @@
             mSwitchBar.setEnabled(!restricted);
         }
 
-        if (enabled != mSwitch.isChecked()) {
+        if (enabled != mSwitchBar.isChecked()) {
             // set listener to null so that that code below doesn't trigger onCheckedChanged()
             if (mValidListener) {
                 mSwitchBar.removeOnSwitchChangeListener(this);
             }
-            mSwitch.setChecked(enabled);
+            mSwitchBar.setChecked(enabled);
             if (mValidListener) {
                 mSwitchBar.addOnSwitchChangeListener(this);
             }
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
index 1fdc191..0be61e5 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
@@ -32,14 +32,13 @@
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.network.SubscriptionUtil;
 import com.android.settings.network.SubscriptionsChangeListener;
-import com.android.settings.widget.SwitchBar;
-import com.android.settingslib.widget.LayoutPreference;
+import com.android.settings.widget.SettingsMainSwitchPreference;
 
 /** This controls a switch to allow enabling/disabling a mobile network */
 public class MobileNetworkSwitchController extends BasePreferenceController implements
         SubscriptionsChangeListener.SubscriptionsChangeListenerClient, LifecycleObserver {
     private static final String TAG = "MobileNetworkSwitchCtrl";
-    private SwitchBar mSwitchBar;
+    private SettingsMainSwitchPreference mSwitchBar;
     private int mSubId;
     private SubscriptionsChangeListener mChangeListener;
     private SubscriptionManager mSubscriptionManager;
@@ -70,12 +69,10 @@
     @Override
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
-        final LayoutPreference pref = screen.findPreference(mPreferenceKey);
-        mSwitchBar = pref.findViewById(R.id.switch_bar);
-        mSwitchBar.setSwitchBarText(R.string.mobile_network_use_sim_on,
-                R.string.mobile_network_use_sim_off);
+        mSwitchBar = (SettingsMainSwitchPreference) screen.findPreference(mPreferenceKey);
+        mSwitchBar.setTitle(mContext.getString(R.string.mobile_network_use_sim_on));
 
-        mSwitchBar.getSwitch().setOnBeforeCheckedChangeListener((toggleSwitch, isChecked) -> {
+        mSwitchBar.setOnBeforeCheckedChangeListener((toggleSwitch, isChecked) -> {
             // TODO b/135222940: re-evaluate whether to use
             // mSubscriptionManager#isSubscriptionEnabled
             if (mSubscriptionManager.isActiveSubscriptionId(mSubId) != isChecked) {
@@ -118,7 +115,8 @@
     }
 
     @Override
-    public void onAirplaneModeChanged(boolean airplaneModeEnabled) {}
+    public void onAirplaneModeChanged(boolean airplaneModeEnabled) {
+    }
 
     @Override
     public void onSubscriptionsChanged() {
diff --git a/src/com/android/settings/nfc/AndroidBeam.java b/src/com/android/settings/nfc/AndroidBeam.java
index 1f75a25..b1fcd57 100644
--- a/src/com/android/settings/nfc/AndroidBeam.java
+++ b/src/com/android/settings/nfc/AndroidBeam.java
@@ -38,15 +38,16 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.HelpUtils;
 import com.android.settingslib.RestrictedLockUtilsInternal;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
 public class AndroidBeam extends InstrumentedFragment
-        implements SwitchBar.OnSwitchChangeListener {
+        implements OnMainSwitchChangeListener {
     private View mView;
     private NfcAdapter mNfcAdapter;
-    private SwitchBar mSwitchBar;
+    private SettingsMainSwitchBar mSwitchBar;
     private CharSequence mOldActivityTitle;
     private boolean mBeamDisallowedByBase;
     private boolean mBeamDisallowedByOnlyAdmin;
diff --git a/src/com/android/settings/notification/app/BlockPreferenceController.java b/src/com/android/settings/notification/app/BlockPreferenceController.java
index 2738962..589a03d 100644
--- a/src/com/android/settings/notification/app/BlockPreferenceController.java
+++ b/src/com/android/settings/notification/app/BlockPreferenceController.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.notification.app;
 
-import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
 import static android.app.NotificationManager.IMPORTANCE_NONE;
 import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
 
@@ -29,11 +28,11 @@
 import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.notification.NotificationBackend;
-import com.android.settings.widget.SwitchBar;
-import com.android.settingslib.widget.LayoutPreference;
+import com.android.settings.widget.SettingsMainSwitchPreference;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
 public class BlockPreferenceController extends NotificationPreferenceController
-        implements PreferenceControllerMixin, SwitchBar.OnSwitchChangeListener {
+        implements PreferenceControllerMixin, OnMainSwitchChangeListener {
 
     private static final String KEY_BLOCK = "block";
     private NotificationSettings.DependentFieldListener mDependentFieldListener;
@@ -59,12 +58,10 @@
     }
 
     public void updateState(Preference preference) {
-        LayoutPreference pref = (LayoutPreference) preference;
-        pref.setSelectable(false);
-        SwitchBar bar = pref.findViewById(R.id.switch_bar);
+        SettingsMainSwitchPreference bar = (SettingsMainSwitchPreference) preference;
         if (bar != null) {
             String switchBarText = getSwitchBarText();
-            bar.setSwitchBarText(switchBarText, switchBarText);
+            bar.setTitle(switchBarText);
             bar.show();
             try {
                 bar.addOnSwitchChangeListener(this);
@@ -133,7 +130,7 @@
     String getSwitchBarText() {
         if (mChannel != null) {
             return mContext.getString(R.string.notification_content_block_title);
-        } else  {
+        } else {
             CharSequence fieldContextName;
             if (mChannelGroup != null) {
                 fieldContextName = mChannelGroup.getName();
diff --git a/src/com/android/settings/notification/history/NotificationHistoryActivity.java b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
index b184740..d5745ac 100644
--- a/src/com/android/settings/notification/history/NotificationHistoryActivity.java
+++ b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
@@ -44,7 +44,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewOutlineProvider;
-import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.TextView;
 
@@ -56,8 +55,9 @@
 import com.android.internal.logging.UiEventLoggerImpl;
 import com.android.settings.R;
 import com.android.settings.notification.NotificationBackend;
-import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.utils.ThreadUtils;
+import com.android.settingslib.widget.MainSwitchBar;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -75,7 +75,7 @@
     private ViewGroup mTodayView;
     private ViewGroup mSnoozeView;
     private ViewGroup mDismissView;
-    private SwitchBar mSwitchBar;
+    private MainSwitchBar mSwitchBar;
 
     private HistoryLoader mHistoryLoader;
     private INotificationManager mNm;
@@ -117,9 +117,11 @@
         NOTIFICATION_HISTORY_OLDER_ITEM_DELETE(513);
 
         private int mId;
+
         NotificationHistoryEvent(int id) {
             mId = id;
         }
+
         @Override
         public int getId() {
             return mId;
@@ -171,10 +173,9 @@
                         ? getString(R.string.condition_expand_hide)
                         : getString(R.string.condition_expand_show));
                 header.sendAccessibilityEvent(TYPE_VIEW_ACCESSIBILITY_FOCUSED);
-                mUiEventLogger.logWithPosition(
-                        (container.getVisibility() == View.VISIBLE)
-                            ? NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_OPEN
-                            : NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_CLOSE,
+                mUiEventLogger.logWithPosition((container.getVisibility() == View.VISIBLE)
+                                ? NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_OPEN
+                              : NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_CLOSE,
                         nhp.uid, nhp.pkgName, finalI);
             });
 
@@ -218,7 +219,7 @@
         mHistoryOff = findViewById(R.id.history_off);
         mHistoryOn = findViewById(R.id.history_on);
         mHistoryEmpty = findViewById(R.id.history_on_empty);
-        mSwitchBar = findViewById(R.id.switch_bar);
+        mSwitchBar = findViewById(R.id.main_switch_bar);
 
         ActionBar actionBar = getActionBar();
         if (actionBar != null) {
@@ -299,9 +300,8 @@
 
     private void bindSwitch() {
         if (mSwitchBar != null) {
-            mSwitchBar.setSwitchBarText(R.string.notification_history_toggle,
-                    R.string.notification_history_toggle);
             mSwitchBar.show();
+            mSwitchBar.setTitle(getString(R.string.notification_history_toggle));
             try {
                 mSwitchBar.addOnSwitchChangeListener(mOnSwitchClickListener);
             } catch (IllegalStateException e) {
@@ -325,7 +325,7 @@
         mHistoryEmpty.setVisibility(View.GONE);
     }
 
-    private final SwitchBar.OnSwitchChangeListener mOnSwitchClickListener =
+    private final OnMainSwitchChangeListener mOnSwitchClickListener =
             (switchView, isChecked) -> {
                 int oldState = 0;
                 try {
@@ -387,11 +387,11 @@
 
             mDismissedRv = mDismissView.findViewById(R.id.notification_list);
             LinearLayoutManager dismissLm =
-                new LinearLayoutManager(NotificationHistoryActivity.this);
+                    new LinearLayoutManager(NotificationHistoryActivity.this);
             mDismissedRv.setLayoutManager(dismissLm);
             mDismissedRv.setAdapter(
                     new NotificationSbnAdapter(NotificationHistoryActivity.this, mPm, mUm,
-                            false , mUiEventLogger));
+                            false, mUiEventLogger));
             mDismissedRv.setNestedScrollingEnabled(false);
 
             if (dismissed == null || dismissed.length == 0) {
@@ -399,7 +399,7 @@
             } else {
                 mDismissView.setVisibility(View.VISIBLE);
                 ((NotificationSbnAdapter) mDismissedRv.getAdapter()).onRebuildComplete(
-                    new ArrayList<>(Arrays.asList(dismissed)));
+                        new ArrayList<>(Arrays.asList(dismissed)));
             }
 
             mCountdownLatch.countDown();
diff --git a/src/com/android/settings/print/PrintServiceSettingsFragment.java b/src/com/android/settings/print/PrintServiceSettingsFragment.java
index 8d40175..eb7ab80 100644
--- a/src/com/android/settings/print/PrintServiceSettingsFragment.java
+++ b/src/com/android/settings/print/PrintServiceSettingsFragment.java
@@ -59,8 +59,8 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.widget.SwitchBar;
-import com.android.settings.widget.ToggleSwitch;
+import com.android.settings.widget.SettingsMainSwitchBar;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
@@ -71,7 +71,7 @@
  * Fragment with print service settings.
  */
 public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
-        implements SwitchBar.OnSwitchChangeListener,
+        implements OnMainSwitchChangeListener,
         LoaderManager.LoaderCallbacks<List<PrintServiceInfo>> {
 
     private static final String LOG_TAG = "PrintServiceSettings";
@@ -96,8 +96,7 @@
         }
     };
 
-    private SwitchBar mSwitchBar;
-    private ToggleSwitch mToggleSwitch;
+    private SettingsMainSwitchBar mSwitchBar;
 
     private String mPreferenceKey;
 
@@ -166,14 +165,14 @@
     }
 
     private void onPreferenceToggled(String preferenceKey, boolean enabled) {
-        ((PrintManager)getContext().getSystemService(Context.PRINT_SERVICE))
+        ((PrintManager) getContext().getSystemService(Context.PRINT_SERVICE))
                 .setPrintServiceEnabled(mComponentName, enabled);
     }
 
     private void updateEmptyView() {
         ViewGroup contentRoot = (ViewGroup) getListView().getParent();
         View emptyView = getEmptyView();
-        if (!mToggleSwitch.isChecked()) {
+        if (!mSwitchBar.isChecked()) {
             if (emptyView != null) {
                 contentRoot.removeView(emptyView);
                 emptyView = null;
@@ -235,11 +234,12 @@
         final SettingsActivity activity = (SettingsActivity) getActivity();
 
         mSwitchBar = activity.getSwitchBar();
+        mSwitchBar.setTitle(
+                getContext().getString(R.string.default_print_service_main_switch_title));
         mSwitchBar.addOnSwitchChangeListener(this);
         mSwitchBar.show();
 
-        mToggleSwitch = mSwitchBar.getSwitch();
-        mToggleSwitch.setOnBeforeCheckedChangeListener((toggleSwitch, checked) -> {
+        mSwitchBar.setOnBeforeCheckedChangeListener((toggleSwitch, checked) -> {
             onPreferenceToggled(mPreferenceKey, checked);
             return false;
         });
@@ -388,6 +388,7 @@
                                 R.string.print_search_box_shown_utterance));
                     }
                 }
+
                 @Override
                 public void onViewDetachedFromWindow(View view) {
                     Activity activity = getActivity();
@@ -565,7 +566,7 @@
                     TypedValue value = new TypedValue();
                     getActivity().getTheme().resolveAttribute(android.R.attr.disabledAlpha, value,
                             true);
-                    icon.setAlpha((int)(value.getFloat() * 255));
+                    icon.setAlpha((int) (value.getFloat() * 255));
                 }
                 iconView.setImageDrawable(icon);
             } else {
diff --git a/src/com/android/settings/security/ScreenPinningSettings.java b/src/com/android/settings/security/ScreenPinningSettings.java
index 1e620cf..a8cb1c9 100644
--- a/src/com/android/settings/security/ScreenPinningSettings.java
+++ b/src/com/android/settings/security/ScreenPinningSettings.java
@@ -39,26 +39,25 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.password.ChooseLockGeneric;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.search.SearchIndexable;
 import com.android.settingslib.widget.FooterPreference;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
 import java.util.Arrays;
 import java.util.List;
-
-
 /**
  * Screen pinning settings.
  */
 @SearchIndexable
 public class ScreenPinningSettings extends SettingsPreferenceFragment
-        implements SwitchBar.OnSwitchChangeListener, DialogInterface.OnClickListener {
+        implements OnMainSwitchChangeListener, DialogInterface.OnClickListener {
 
     private static final String KEY_USE_SCREEN_LOCK = "use_screen_lock";
     private static final String KEY_FOOTER = "screen_pinning_settings_screen_footer";
     private static final int CHANGE_LOCK_METHOD_REQUEST = 43;
 
-    private SwitchBar mSwitchBar;
+    private SettingsMainSwitchBar mSwitchBar;
     private SwitchPreference mUseScreenLock;
     private FooterPreference mFooterPreference;
     private LockPatternUtils mLockPatternUtils;
@@ -84,6 +83,7 @@
         mFooterPreference = root.findPreference(KEY_FOOTER);
 
         mSwitchBar = activity.getSwitchBar();
+        mSwitchBar.setTitle(getContext().getString(R.string.app_pinning_main_switch_title));
         mSwitchBar.show();
         mSwitchBar.setChecked(isLockToAppEnabled(getActivity()));
         mSwitchBar.addOnSwitchChangeListener(this);
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 8ba5432..461fd87 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -67,8 +67,8 @@
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.password.ChooseLockGeneric;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBar;
-import com.android.settings.widget.SwitchBarController;
+import com.android.settings.widget.MainSwitchBarController;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.RestrictedPreference;
@@ -223,11 +223,12 @@
         // Assume we are in a SettingsActivity. This is only safe because we currently use
         // SettingsActivity as base for all preference fragments.
         final SettingsActivity activity = (SettingsActivity) getActivity();
-        final SwitchBar switchBar = activity.getSwitchBar();
-        mSwitchBarController = new MultiUserSwitchBarController(activity,
-                new SwitchBarController(switchBar), this /* listener */);
-        getSettingsLifecycle().addObserver(mSwitchBarController);
+        final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
+        switchBar.setTitle(getContext().getString(R.string.multiple_users_main_switch_title));
         switchBar.show();
+        mSwitchBarController = new MultiUserSwitchBarController(activity,
+                new MainSwitchBarController(switchBar), this /* listener */);
+        getSettingsLifecycle().addObserver(mSwitchBarController);
     }
 
     @Override
diff --git a/src/com/android/settings/widget/GenericSwitchController.java b/src/com/android/settings/widget/GenericSwitchController.java
index b1b4342..eceabc4 100644
--- a/src/com/android/settings/widget/GenericSwitchController.java
+++ b/src/com/android/settings/widget/GenericSwitchController.java
@@ -49,7 +49,7 @@
     }
 
     @Override
-    public void updateTitle(boolean isChecked) {
+    public void setTitle(String title) {
     }
 
     @Override
diff --git a/src/com/android/settings/widget/MainSwitchBarController.java b/src/com/android/settings/widget/MainSwitchBarController.java
new file mode 100644
index 0000000..8aa5c9b
--- /dev/null
+++ b/src/com/android/settings/widget/MainSwitchBarController.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.widget;
+
+import android.widget.Switch;
+
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
+
+/**
+ * The switch controller that is used to update the switch widget in the SettingsMainSwitchBar.
+ */
+public class MainSwitchBarController extends SwitchWidgetController implements
+        OnMainSwitchChangeListener {
+
+    private final SettingsMainSwitchBar mMainSwitch;
+
+    public MainSwitchBarController(SettingsMainSwitchBar mainSwitch) {
+        mMainSwitch = mainSwitch;
+    }
+
+    @Override
+    public void setupView() {
+        mMainSwitch.show();
+    }
+
+    @Override
+    public void teardownView() {
+        mMainSwitch.hide();
+    }
+
+    @Override
+    public void setTitle(String title) {
+        mMainSwitch.setTitle(title);
+    }
+
+    @Override
+    public void startListening() {
+        mMainSwitch.addOnSwitchChangeListener(this);
+    }
+
+    @Override
+    public void stopListening() {
+        mMainSwitch.removeOnSwitchChangeListener(this);
+    }
+
+    @Override
+    public void setChecked(boolean checked) {
+        mMainSwitch.setChecked(checked);
+    }
+
+    @Override
+    public boolean isChecked() {
+        return mMainSwitch.isChecked();
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        mMainSwitch.setEnabled(enabled);
+    }
+
+    @Override
+    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+        if (mListener != null) {
+            mListener.onSwitchToggled(isChecked);
+        }
+    }
+
+    @Override
+    public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) {
+        mMainSwitch.setDisabledByAdmin(admin);
+    }
+}
diff --git a/src/com/android/settings/widget/SettingsMainSwitchBar.java b/src/com/android/settings/widget/SettingsMainSwitchBar.java
new file mode 100644
index 0000000..d7fbd6a
--- /dev/null
+++ b/src/com/android/settings/widget/SettingsMainSwitchBar.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.widget;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Switch;
+
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.android.settingslib.widget.MainSwitchBar;
+
+/**
+ * A {@link MainSwitchBar} with a customized Switch and provides the metrics feature.
+ */
+public class SettingsMainSwitchBar extends MainSwitchBar {
+
+    /**
+     * Called before the checked state of the Switch has changed.
+     */
+    public interface OnBeforeCheckedChangeListener {
+
+        /**
+         * @param switchView The Switch view whose state has changed.
+         * @param isChecked  The new checked state of switchView.
+         */
+        boolean onBeforeCheckedChanged(Switch switchView, boolean isChecked);
+    }
+
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
+    private OnBeforeCheckedChangeListener mOnBeforeListener;
+
+    private Switch mSwitch;
+    private String mMetricsTag;
+
+    public SettingsMainSwitchBar(Context context) {
+        this(context, null);
+    }
+
+    public SettingsMainSwitchBar(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public SettingsMainSwitchBar(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public SettingsMainSwitchBar(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
+
+        mSwitch = (Switch) findViewById(android.R.id.switch_widget);
+
+        addOnSwitchChangeListener((switchView, isChecked) -> logMetrics(isChecked));
+    }
+
+    @Override
+    protected void onRestrictedIconClick() {
+        mMetricsFeatureProvider.action(
+                SettingsEnums.PAGE_UNKNOWN,
+                SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE,
+                SettingsEnums.PAGE_UNKNOWN,
+                mMetricsTag + "/switch_bar|restricted",
+                1);
+    }
+
+    @Override
+    public void setChecked(boolean checked) {
+        if (mOnBeforeListener != null
+                && mOnBeforeListener.onBeforeCheckedChanged(mSwitch, checked)) {
+            return;
+        }
+        super.setChecked(checked);
+    }
+
+    /**
+     * Update the status of switch but doesn't notify the mOnBeforeListener.
+     */
+    public void setCheckedInternal(boolean checked) {
+        super.setChecked(checked);
+    }
+
+    /**
+     * Set the OnBeforeCheckedChangeListener.
+     */
+    public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) {
+        mOnBeforeListener = listener;
+    }
+
+    /**
+     * Returns if this view is visible.
+     */
+    public boolean isShowing() {
+        return (getVisibility() == View.VISIBLE);
+    }
+
+    /**
+     * Set the metrics tag.
+     */
+    public void setMetricsTag(String tag) {
+        mMetricsTag = tag;
+    }
+
+    private void logMetrics(boolean isChecked) {
+        mMetricsFeatureProvider.action(
+                SettingsEnums.PAGE_UNKNOWN,
+                SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE,
+                SettingsEnums.PAGE_UNKNOWN,
+                mMetricsTag + "/switch_bar",
+                isChecked ? 1 : 0);
+    }
+}
diff --git a/src/com/android/settings/widget/SettingsMainSwitchPreference.java b/src/com/android/settings/widget/SettingsMainSwitchPreference.java
new file mode 100644
index 0000000..4597842
--- /dev/null
+++ b/src/com/android/settings/widget/SettingsMainSwitchPreference.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import androidx.preference.PreferenceViewHolder;
+import androidx.preference.TwoStatePreference;
+
+import com.android.settings.R;
+import com.android.settings.widget.SettingsMainSwitchBar.OnBeforeCheckedChangeListener;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * SettingsMainSwitchPreference is a Preference with a customized Switch.
+ * This component is used as the main switch of the page
+ * to enable or disable the prefereces on the page.
+ */
+public class SettingsMainSwitchPreference extends TwoStatePreference {
+    private final List<OnBeforeCheckedChangeListener> mBeforeCheckedChangeListeners =
+            new ArrayList<>();
+    private final List<OnMainSwitchChangeListener> mSwitchChangeListeners = new ArrayList<>();
+
+    private SettingsMainSwitchBar mMainSwitchBar;
+    private String mTitle;
+
+    private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin;
+
+    public SettingsMainSwitchPreference(Context context) {
+        super(context);
+        init();
+    }
+
+    public SettingsMainSwitchPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init();
+    }
+
+    public SettingsMainSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    public SettingsMainSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        init();
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+
+        holder.setDividerAllowedAbove(true);
+        holder.setDividerAllowedBelow(false);
+
+        mMainSwitchBar = (SettingsMainSwitchBar) holder.findViewById(R.id.main_switch_bar);
+        mMainSwitchBar.show();
+        updateStatus(isChecked());
+        registerListenerToSwitchBar();
+    }
+
+    private void init() {
+        setLayoutResource(R.layout.preference_widget_main_switch);
+    }
+
+    /**
+     * Return the SettingsMainSwitchBar
+     */
+    public final SettingsMainSwitchBar getSwitchBar() {
+        return mMainSwitchBar;
+    }
+
+    /**
+     * Set the preference title text
+     */
+    public void setTitle(String text) {
+        mTitle = text;
+        if (mMainSwitchBar != null) {
+            mMainSwitchBar.setTitle(mTitle);
+        }
+    }
+
+    /**
+     * Update the switch status of preference
+     */
+    public void updateStatus(boolean checked) {
+        setChecked(checked);
+        if (mMainSwitchBar != null) {
+            mMainSwitchBar.setChecked(checked);
+            mMainSwitchBar.setTitle(mTitle);
+            mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin);
+            mMainSwitchBar.show();
+        }
+    }
+
+    /**
+     * Show the MainSwitchBar
+     */
+    public void show() {
+        if (mMainSwitchBar != null) {
+            mMainSwitchBar.show();
+        }
+    }
+
+    /**
+     * Hide the MainSwitchBar
+     */
+    public void hide() {
+        if (mMainSwitchBar != null) {
+            mMainSwitchBar.hide();
+        }
+    }
+
+    /**
+     * Returns if the MainSwitchBar is visible.
+     */
+    public boolean isShowing() {
+        if (mMainSwitchBar != null) {
+            return mMainSwitchBar.isShowing();
+        }
+        return false;
+    }
+
+    /**
+     * Update the status of switch but doesn't notify the mOnBeforeListener.
+     */
+    public void setCheckedInternal(boolean checked) {
+        if (mMainSwitchBar != null) {
+            mMainSwitchBar.setCheckedInternal(checked);
+        }
+    }
+
+    /**
+     * Enable or disable the text and switch.
+     */
+    public void setEnabled(boolean enabled) {
+        if (mMainSwitchBar != null) {
+            mMainSwitchBar.setEnabled(enabled);
+        }
+    }
+
+    /**
+     * Set the OnBeforeCheckedChangeListener.
+     */
+    public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) {
+        if (mMainSwitchBar == null) {
+            mBeforeCheckedChangeListeners.add(listener);
+        } else {
+            mMainSwitchBar.setOnBeforeCheckedChangeListener(listener);
+        }
+    }
+
+    /**
+     * Adds a listener for switch changes
+     */
+    public void addOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
+        if (mMainSwitchBar == null) {
+            mSwitchChangeListeners.add(listener);
+        } else {
+            mMainSwitchBar.addOnSwitchChangeListener(listener);
+        }
+    }
+
+    /**
+     * Remove a listener for switch changes
+     */
+    public void removeOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
+        if (mMainSwitchBar == null) {
+            mSwitchChangeListeners.remove(listener);
+        } else {
+            mMainSwitchBar.removeOnSwitchChangeListener(listener);
+        }
+    }
+
+    /**
+     * If admin is not null, disables the text and switch but keeps the view clickable.
+     * Otherwise, calls setEnabled which will enables the entire view including
+     * the text and switch.
+     */
+    public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) {
+        mEnforcedAdmin = admin;
+        if (mMainSwitchBar != null) {
+            mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin);
+        }
+    }
+
+    private void registerListenerToSwitchBar() {
+        for (OnBeforeCheckedChangeListener listener : mBeforeCheckedChangeListeners) {
+            mMainSwitchBar.setOnBeforeCheckedChangeListener(listener);
+        }
+        for (OnMainSwitchChangeListener listener : mSwitchChangeListeners) {
+            mMainSwitchBar.addOnSwitchChangeListener(listener);
+        }
+        mBeforeCheckedChangeListeners.clear();
+        mSwitchChangeListeners.clear();
+    }
+}
diff --git a/src/com/android/settings/widget/SwitchBarController.java b/src/com/android/settings/widget/SwitchBarController.java
index e471c7a..3a086b6 100644
--- a/src/com/android/settings/widget/SwitchBarController.java
+++ b/src/com/android/settings/widget/SwitchBarController.java
@@ -43,8 +43,7 @@
     }
 
     @Override
-    public void updateTitle(boolean isChecked) {
-        mSwitchBar.setTextViewLabelAndBackground(isChecked);
+    public void setTitle(String title) {
     }
 
     @Override
diff --git a/src/com/android/settings/widget/SwitchWidgetController.java b/src/com/android/settings/widget/SwitchWidgetController.java
index 6c4f40a..75bef05 100644
--- a/src/com/android/settings/widget/SwitchWidgetController.java
+++ b/src/com/android/settings/widget/SwitchWidgetController.java
@@ -65,9 +65,9 @@
     /**
      * Update the preference title associated with the switch.
      *
-     * @param isChecked whether the switch is currently checked
+     * @param title the preference title
      */
-    public abstract void updateTitle(boolean isChecked);
+    public abstract void setTitle(String title);
 
     /**
      * Start listening to switch toggling.
@@ -107,4 +107,4 @@
      * is {@code null}, then this preference will be enabled. Otherwise, it will be disabled.
      */
     public abstract void setDisabledByAdmin(EnforcedAdmin admin);
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index cf8242b..34067e9 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -66,7 +66,7 @@
 import com.android.settings.location.ScanningSettings;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBarController;
+import com.android.settings.widget.MainSwitchBarController;
 import com.android.settings.wifi.details2.WifiNetworkDetailsFragment2;
 import com.android.settings.wifi.dpp.WifiDppUtils;
 import com.android.settingslib.HelpUtils;
@@ -222,9 +222,8 @@
                     .findViewById(R.id.progress_bar_animation);
             setProgressBarVisible(false);
         }
-        ((SettingsActivity) activity).getSwitchBar().setSwitchBarText(
-                R.string.wifi_settings_primary_switch_title,
-                R.string.wifi_settings_primary_switch_title);
+        ((SettingsActivity) activity).getSwitchBar().setTitle(
+                getContext().getString(R.string.wifi_settings_primary_switch_title));
     }
 
     @Override
@@ -382,7 +381,7 @@
      */
     private WifiEnabler createWifiEnabler() {
         final SettingsActivity activity = (SettingsActivity) getActivity();
-        return new WifiEnabler(activity, new SwitchBarController(activity.getSwitchBar()),
+        return new WifiEnabler(activity, new MainSwitchBarController(activity.getSwitchBar()),
                 mMetricsFeatureProvider);
     }
 
@@ -1050,7 +1049,7 @@
             Toast.makeText(getContext(), R.string.wifi_failed_connect_message, Toast.LENGTH_SHORT)
                     .show();
         }
-    };
+    }
 
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.wifi_settings) {
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index f260298..0529b7a 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -39,7 +39,7 @@
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.dashboard.RestrictedDashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.TetherUtil;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.search.SearchIndexable;
@@ -128,10 +128,8 @@
         // Assume we are in a SettingsActivity. This is only safe because we currently use
         // SettingsActivity as base for all preference fragments.
         final SettingsActivity activity = (SettingsActivity) getActivity();
-        final SwitchBar switchBar = activity.getSwitchBar();
-        switchBar.setSwitchBarText(
-                com.android.settingslib.R.string.wifi_hotspot_switch_on_text,
-                com.android.settingslib.R.string.wifi_hotspot_switch_off_text);
+        final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
+        switchBar.setTitle(getContext().getString(R.string.use_wifi_hotsopt_main_switch_title));
         mSwitchBarController = new WifiTetherSwitchBarController(activity, switchBar);
         getSettingsLifecycle().addObserver(mSwitchBarController);
         switchBar.show();
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
index e83eb1c..3d8cd3e 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
@@ -32,7 +32,7 @@
 import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.datausage.DataSaverBackend;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -45,7 +45,7 @@
     private static final IntentFilter WIFI_INTENT_FILTER;
 
     private final Context mContext;
-    private final SwitchBar mSwitchBar;
+    private final SettingsMainSwitchBar mSwitchBar;
     private final Switch mSwitch;
     private final ConnectivityManager mConnectivityManager;
     private final WifiManager mWifiManager;
@@ -67,7 +67,7 @@
         WIFI_INTENT_FILTER = new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
     }
 
-    WifiTetherSwitchBarController(Context context, SwitchBar switchBar) {
+    WifiTetherSwitchBarController(Context context, SettingsMainSwitchBar switchBar) {
         mContext = context;
         mSwitchBar = switchBar;
         mSwitch = mSwitchBar.getSwitch();