diff --git a/res/layout/icon_discrete_slider.xml b/res/layout/icon_discrete_slider.xml
index 47be5ef..1319987 100644
--- a/res/layout/icon_discrete_slider.xml
+++ b/res/layout/icon_discrete_slider.xml
@@ -20,14 +20,13 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:clipChildren="false"
-    android:background="?android:colorBackground"
     android:gravity="center_vertical">
 
     <FrameLayout
         android:id="@+id/icon_start_frame"
         android:layout_width="48dp"
         android:layout_height="48dp"
-        android:background="?android:attr/selectableItemBackgroundBorderless"
+        android:clipChildren="false"
         android:focusable="true"
         android:visibility="gone">
 
@@ -36,6 +35,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="start|center_vertical"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
             android:adjustViewBounds="true"
             android:focusable="false"
             android:tint="?android:attr/textColorPrimary"
@@ -56,7 +56,7 @@
         android:id="@+id/icon_end_frame"
         android:layout_width="48dp"
         android:layout_height="48dp"
-        android:background="?android:attr/selectableItemBackgroundBorderless"
+        android:clipChildren="false"
         android:focusable="true"
         android:visibility="gone">
 
@@ -65,6 +65,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="end|center_vertical"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
             android:adjustViewBounds="true"
             android:focusable="false"
             android:tint="?android:attr/textColorPrimary"
diff --git a/res/layout/le_audio_bt_entity_header.xml b/res/layout/le_audio_bt_entity_header.xml
index 6e2a1e8..a05d707 100644
--- a/res/layout/le_audio_bt_entity_header.xml
+++ b/res/layout/le_audio_bt_entity_header.xml
@@ -61,75 +61,91 @@
         android:layout_height="wrap_content"
         android:layout_gravity="center_horizontal"
         android:gravity="center_vertical"
-        android:orientation="horizontal">
+        android:orientation="vertical">
         <LinearLayout
-            android:layout_width="wrap_content"
+            android:id="@+id/bt_battery_case"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginStart="@dimen/le_bluetooth_battery_start_margin"
-            android:orientation="vertical">
+            android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+            android:orientation="horizontal"
+            android:visibility="gone"
+            android:focusable="true">
             <TextView
-                android:id="@+id/bt_battery_case_title"
                 style="@style/TextAppearance.EntityHeaderTitle"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+                android:layout_weight="1"
                 android:gravity="start|center_vertical"
                 android:ellipsize="end"
                 android:textDirection="locale"
                 android:text="@string/bluetooth_middle_name"
-                android:textSize="@dimen/advanced_bluetooth_header_title_text_size"
-                android:visibility="gone"/>
+                android:textSize="@dimen/advanced_bluetooth_header_title_text_size"/>
             <TextView
-                android:id="@+id/bt_battery_left_title"
+                android:id="@+id/bt_battery_case_summary"
+                style="@style/TextAppearance.EntityHeaderSummary"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/le_bluetooth_summary_start_margin"
+                android:minWidth="@dimen/le_bluetooth_summary_min_width"
+                android:padding="@dimen/le_bluetooth_summary_padding"
+                android:drawablePadding="@dimen/le_bluetooth_summary_drawable_padding"/>
+        </LinearLayout>
+        <LinearLayout
+            android:id="@+id/bt_battery_left"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/le_bluetooth_battery_start_margin"
+            android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+            android:orientation="horizontal"
+            android:visibility="gone"
+            android:focusable="true">
+            <TextView
                 style="@style/TextAppearance.EntityHeaderTitle"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+                android:layout_weight="1"
                 android:gravity="start|center_vertical"
                 android:ellipsize="end"
                 android:textDirection="locale"
                 android:text="@string/bluetooth_left_name"
                 android:textSize="@dimen/advanced_bluetooth_header_title_text_size"/>
             <TextView
-                android:id="@+id/bt_battery_right_title"
+                android:id="@+id/bt_battery_left_summary"
+                style="@style/TextAppearance.EntityHeaderSummary"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/le_bluetooth_summary_start_margin"
+                android:minWidth="@dimen/le_bluetooth_summary_min_width"
+                android:padding="@dimen/le_bluetooth_summary_padding"
+                android:drawablePadding="@dimen/le_bluetooth_summary_drawable_padding"/>
+        </LinearLayout>
+        <LinearLayout
+            android:id="@+id/bt_battery_right"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/le_bluetooth_battery_start_margin"
+            android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+            android:orientation="horizontal"
+            android:visibility="gone"
+            android:focusable="true">
+            <TextView
                 style="@style/TextAppearance.EntityHeaderTitle"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+                android:layout_weight="1"
                 android:gravity="start|center_vertical"
                 android:ellipsize="end"
                 android:textDirection="locale"
                 android:text="@string/bluetooth_right_name"
                 android:textSize="@dimen/advanced_bluetooth_header_title_text_size"/>
-        </LinearLayout>
-        <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/le_bluetooth_summary_start_margin"
-            android:orientation="vertical">
-            <TextView
-                android:id="@+id/bt_battery_case_summary"
-                style="@style/TextAppearance.EntityHeaderSummary"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
-                android:padding="@dimen/le_bluetooth_summary_padding"
-                android:drawablePadding="@dimen/le_bluetooth_summary_drawable_padding"
-                android:visibility="gone"/>
-            <TextView
-                android:id="@+id/bt_battery_left_summary"
-                style="@style/TextAppearance.EntityHeaderSummary"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
-                android:padding="@dimen/le_bluetooth_summary_padding"
-                android:drawablePadding="@dimen/le_bluetooth_summary_drawable_padding"/>
             <TextView
                 android:id="@+id/bt_battery_right_summary"
                 style="@style/TextAppearance.EntityHeaderSummary"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+                android:layout_marginStart="@dimen/le_bluetooth_summary_start_margin"
+                android:minWidth="@dimen/le_bluetooth_summary_min_width"
                 android:padding="@dimen/le_bluetooth_summary_padding"
                 android:drawablePadding="@dimen/le_bluetooth_summary_drawable_padding"/>
         </LinearLayout>
diff --git a/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml b/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml
index 081efb3..74c8226 100644
--- a/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml
+++ b/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml
@@ -38,6 +38,8 @@
             android:background="@drawable/sim_confirm_dialog_rounded_bg"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/sims_select_margin_top"
+            android:layout_marginBottom="@dimen/sims_select_margin_bottom"
             android:visibility="gone"/>
 
         <LinearLayout
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 867fecb..0632f72 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1646,4 +1646,8 @@
         <item>1875000</item> <!-- 15Mbps == 1875000/s -->
     </string-array>
 
+    <!-- An allowlist which packages won't show summary in battery usage screen.
+         [CHAR LIMIT=NONE] -->
+    <string-array name="allowlist_hide_summary_in_battery_usage" translatable="false">
+    </string-array>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index f11cee5..1582d21 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -415,6 +415,7 @@
     <dimen name="le_bluetooth_summary_drawable_padding">6dp</dimen>
     <dimen name="le_bluetooth_summary_start_margin">20dp</dimen>
     <dimen name="le_bluetooth_summary_padding">1.5dp</dimen>
+    <dimen name="le_bluetooth_summary_min_width">64dp</dimen>
 
     <!-- Header layout of bluetooth find broadcast page -->
     <dimen name="bluetooth_find_broadcast_button_one_size">220dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2d4a544..63db309 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3347,8 +3347,6 @@
     <string name="security_patch">Android security update</string>
     <!-- About phone screen, status item label  [CHAR LIMIT=40] -->
     <string name="model_info">Model</string>
-    <!-- About phone screen, dialog title for showing hardware information such as model, serial number, etc.[CHAR LIMIT=60] -->
-    <string name="hardware_info">Model &amp; hardware</string>
     <!-- Label for device's hardware revision value [CHAR LIMIT=40] -->
     <string name="hardware_revision">Hardware version</string>
     <!-- About phone screen, fcc equipment id label  [CHAR LIMIT=40] -->
diff --git a/res/xml/hardware_info.xml b/res/xml/hardware_info.xml
index 10de299..641f707 100644
--- a/res/xml/hardware_info.xml
+++ b/res/xml/hardware_info.xml
@@ -18,7 +18,7 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:title="@string/hardware_info"
+    android:title="@string/model_info"
     settings:keywords="@string/keywords_model_and_hardware">
 
     <!-- Model -->
diff --git a/src/com/android/settings/MainClear.java b/src/com/android/settings/MainClear.java
index 62462b3..2b0f010 100644
--- a/src/com/android/settings/MainClear.java
+++ b/src/com/android/settings/MainClear.java
@@ -494,6 +494,8 @@
 
             if (profilesSize > 1) {
                 View titleView = Utils.inflateCategoryHeader(inflater, contents);
+                titleView.setPadding(0 /* left */, titleView.getPaddingTop(),
+                        0 /* right */, titleView.getPaddingBottom());
                 final TextView titleText = (TextView) titleView.findViewById(android.R.id.title);
 
                 DevicePolicyManager devicePolicyManager =
diff --git a/src/com/android/settings/PointerSpeedPreference.java b/src/com/android/settings/PointerSpeedPreference.java
index 6a93477..fa56635 100644
--- a/src/com/android/settings/PointerSpeedPreference.java
+++ b/src/com/android/settings/PointerSpeedPreference.java
@@ -18,6 +18,8 @@
 
 import static android.view.HapticFeedbackConstants.CLOCK_TICK;
 
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_SLIDER;
+
 import android.content.ContentResolver;
 import android.content.Context;
 import android.database.ContentObserver;
@@ -30,9 +32,12 @@
 import android.view.View;
 import android.widget.SeekBar;
 
+import com.android.internal.jank.InteractionJankMonitor;
+
 public class PointerSpeedPreference extends SeekBarDialogPreference implements
         SeekBar.OnSeekBarChangeListener {
     private final InputManager mIm;
+    private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance();
     private SeekBar mSeekBar;
 
     private int mOldSpeed;
@@ -88,11 +93,15 @@
 
     public void onStartTrackingTouch(SeekBar seekBar) {
         mTouchInProgress = true;
+        mJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
+                .withView(CUJ_SETTINGS_SLIDER, seekBar)
+                .setTag(getKey()));
     }
 
     public void onStopTrackingTouch(SeekBar seekBar) {
         mTouchInProgress = false;
         mIm.tryPointerSpeed(seekBar.getProgress() + InputManager.MIN_POINTER_SPEED);
+        mJankMonitor.end(CUJ_SETTINGS_SLIDER);
     }
 
     private void onSpeedChanged() {
diff --git a/src/com/android/settings/accessibility/MagnificationModePreferenceController.java b/src/com/android/settings/accessibility/MagnificationModePreferenceController.java
index 91eb2e9..df49a22 100644
--- a/src/com/android/settings/accessibility/MagnificationModePreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationModePreferenceController.java
@@ -268,6 +268,7 @@
         final TextView messageView = contentView.findViewById(R.id.message);
         // TODO(b/225682559): Need to remove performClick() after refactoring accessibility dialog.
         final View.OnClickListener linkListener = view -> {
+            updateCapabilitiesAndSummary(mModeCache);
             mLinkPreference.performClick();
             dialog.dismiss();
         };
diff --git a/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java b/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java
index 7b74f77..188770b 100644
--- a/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java
+++ b/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java
@@ -198,38 +198,25 @@
         return drawable;
     }
 
-    private int getBatteryTitleResource(int deviceId) {
-        if (deviceId == LEFT_DEVICE_ID) {
-            return R.id.bt_battery_left_title;
-        }
-        if (deviceId == RIGHT_DEVICE_ID) {
-            return R.id.bt_battery_right_title;
-        }
-        Log.d(TAG, "No resource id. The deviceId is " + deviceId);
-        return INVALID_RESOURCE_ID;
-    }
-
-    private int getBatterySummaryResource(int deviceId) {
-        if (deviceId == LEFT_DEVICE_ID) {
+    private int getBatterySummaryResource(int containerId) {
+        if (containerId == R.id.bt_battery_case) {
+            return R.id.bt_battery_case_summary;
+        } else if (containerId == R.id.bt_battery_left) {
             return R.id.bt_battery_left_summary;
-        }
-        if (deviceId == RIGHT_DEVICE_ID) {
+        } else if (containerId == R.id.bt_battery_right) {
             return R.id.bt_battery_right_summary;
         }
-        Log.d(TAG, "No resource id. The deviceId is " + deviceId);
+        Log.d(TAG, "No summary resource id. The containerId is " + containerId);
         return INVALID_RESOURCE_ID;
     }
 
     private void hideAllOfBatteryLayouts() {
         // hide the case
-        updateBatteryLayout(R.id.bt_battery_case_title, R.id.bt_battery_case_summary,
-                BluetoothUtils.META_INT_ERROR);
+        updateBatteryLayout(R.id.bt_battery_case, BluetoothUtils.META_INT_ERROR);
         // hide the left
-        updateBatteryLayout(R.id.bt_battery_left_title, R.id.bt_battery_left_summary,
-                BluetoothUtils.META_INT_ERROR);
+        updateBatteryLayout(R.id.bt_battery_left, BluetoothUtils.META_INT_ERROR);
         // hide the right
-        updateBatteryLayout(R.id.bt_battery_right_title, R.id.bt_battery_right_summary,
-                BluetoothUtils.META_INT_ERROR);
+        updateBatteryLayout(R.id.bt_battery_right, BluetoothUtils.META_INT_ERROR);
     }
 
     private List<CachedBluetoothDevice> getAllOfLeAudioDevices() {
@@ -285,36 +272,36 @@
                     summary.setText(mCachedDevice.getConnectionSummary());
                 }
             } else if (isLeft) {
-                updateBatteryLayout(getBatteryTitleResource(LEFT_DEVICE_ID),
-                        getBatterySummaryResource(LEFT_DEVICE_ID), cachedDevice.getBatteryLevel());
+                updateBatteryLayout(R.id.bt_battery_left, cachedDevice.getBatteryLevel());
             } else if (isRight) {
-                updateBatteryLayout(getBatteryTitleResource(RIGHT_DEVICE_ID),
-                        getBatterySummaryResource(RIGHT_DEVICE_ID), cachedDevice.getBatteryLevel());
+                updateBatteryLayout(R.id.bt_battery_right, cachedDevice.getBatteryLevel());
             } else {
                 Log.d(TAG, "The device id is other Audio Location. Do nothing.");
             }
         }
     }
 
-    private void updateBatteryLayout(int titleResId, int summaryResId, int batteryLevel) {
-        final TextView batteryTitleView = mLayoutPreference.findViewById(titleResId);
-        final TextView batterySummaryView = mLayoutPreference.findViewById(summaryResId);
-        if (batteryTitleView == null || batterySummaryView == null) {
-            Log.e(TAG, "updateBatteryLayout: No TextView");
+    private void updateBatteryLayout(int resId, int batteryLevel) {
+        final View batteryView = mLayoutPreference.findViewById(resId);
+        if (batteryView == null) {
+            Log.e(TAG, "updateBatteryLayout: No View");
             return;
         }
         if (batteryLevel != BluetoothUtils.META_INT_ERROR) {
-            batteryTitleView.setVisibility(View.VISIBLE);
-            batterySummaryView.setVisibility(View.VISIBLE);
-            batterySummaryView.setText(
-                    com.android.settings.Utils.formatPercentage(batteryLevel));
+            batteryView.setVisibility(View.VISIBLE);
+            final TextView batterySummaryView =
+                    batteryView.requireViewById(getBatterySummaryResource(resId));
+            final String batteryLevelPercentageString =
+                    com.android.settings.Utils.formatPercentage(batteryLevel);
+            batterySummaryView.setText(batteryLevelPercentageString);
+            batterySummaryView.setContentDescription(mContext.getString(
+                    R.string.bluetooth_battery_level, batteryLevelPercentageString));
             batterySummaryView.setCompoundDrawablesRelativeWithIntrinsicBounds(
                     createBtBatteryIcon(mContext, batteryLevel), /* top */ null,
                     /* end */ null, /* bottom */ null);
         } else {
             Log.d(TAG, "updateBatteryLayout: Hide it if it doesn't have battery information.");
-            batteryTitleView.setVisibility(View.GONE);
-            batterySummaryView.setVisibility(View.GONE);
+            batteryView.setVisibility(View.GONE);
         }
     }
 
diff --git a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
index dc73ee0..54d0392 100644
--- a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
+++ b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
@@ -55,7 +55,7 @@
 
     @VisibleForTesting
     UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener =
-            (connected, functions, powerRole, dataRole) -> {
+            (connected, functions, powerRole, dataRole, isUsbConfigured) -> {
                 if (connected) {
                     mUsbPreference.setSummary(getSummary(dataRole == DATA_ROLE_DEVICE
                                     ? functions : UsbManager.FUNCTION_NONE, powerRole));
diff --git a/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiver.java b/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiver.java
index c73c957..1a1f8ba 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiver.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiver.java
@@ -61,6 +61,8 @@
         if (DEBUG) {
             Log.d(TAG, "onReceive() action : " + intent.getAction());
         }
+        boolean isUsbConfigured = intent.getExtras() != null
+                ? intent.getExtras().getBoolean(UsbManager.USB_CONFIGURED) : false;
         if (UsbManager.ACTION_USB_STATE.equals(intent.getAction())) {
             mConnected = intent.getExtras().getBoolean(UsbManager.USB_CONNECTED)
                     || intent.getExtras().getBoolean(UsbManager.USB_HOST_CONNECTED);
@@ -98,7 +100,7 @@
         }
         if (mUsbConnectionListener != null) {
             mUsbConnectionListener.onUsbConnectionChanged(mConnected, mFunctions, mPowerRole,
-                    mDataRole);
+                    mDataRole, isUsbConfigured);
         }
     }
 
@@ -142,6 +144,7 @@
      * Interface definition for a callback to be invoked when usb connection is changed.
      */
     interface UsbConnectionListener {
-        void onUsbConnectionChanged(boolean connected, long functions, int powerRole, int dataRole);
+        void onUsbConnectionChanged(boolean connected, long functions, int powerRole, int dataRole,
+                boolean isUsbConfigured);
     }
 }
diff --git a/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
index d58e97b..b5a9e5a 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
@@ -69,22 +69,23 @@
 
     @VisibleForTesting
     UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener =
-            (connected, functions, powerRole, dataRole) -> {
+            (connected, functions, powerRole, dataRole, isUsbConfigured) -> {
                 final long defaultFunctions = mUsbBackend.getDefaultUsbFunctions();
                 Log.d(TAG, "UsbConnectionListener() connected : " + connected + ", functions : "
                         + functions + ", defaultFunctions : " + defaultFunctions
-                        + ", mIsStartTethering : " + mIsStartTethering);
-                if (connected && !mIsConnected && (defaultFunctions == UsbManager.FUNCTION_RNDIS
+                        + ", mIsStartTethering : " + mIsStartTethering
+                        + ", isUsbConfigured : " + isUsbConfigured);
+                if (connected && !mIsConnected && ((defaultFunctions == UsbManager.FUNCTION_RNDIS
                         || defaultFunctions == UsbManager.FUNCTION_NCM)
+                        && defaultFunctions == functions)
                         && !mIsStartTethering) {
                     mCurrentFunctions = defaultFunctions;
                     startTethering();
                 }
 
-                if (mIsStartTethering && connected) {
+                if ((mIsStartTethering || isUsbConfigured) && connected) {
                     mCurrentFunctions = functions;
                     refresh(functions);
-                    mUsbBackend.setDefaultUsbFunctions(functions);
                     mIsStartTethering = false;
                 }
                 mIsConnected = connected;
diff --git a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
index 8850acd..0c94d19 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
@@ -50,7 +50,7 @@
     UsbConnectionBroadcastReceiver mUsbReceiver;
 
     private UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener =
-            (connected, functions, powerRole, dataRole) -> {
+            (connected, functions, powerRole, dataRole, isUsbFigured) -> {
                 for (UsbDetailsController controller : mControllers) {
                     controller.refresh(connected, functions, powerRole, dataRole);
                 }
diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
index db4cc53..1ecde44 100644
--- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
@@ -59,6 +59,7 @@
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Controller that update the battery header view
@@ -72,7 +73,6 @@
     private static final int MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP = 10;
     private static final String MEDIASERVER_PACKAGE_NAME = "mediaserver";
 
-    private final String mPreferenceKey;
     @VisibleForTesting
     PreferenceGroup mAppListGroup;
     private BatteryUsageStats mBatteryUsageStats;
@@ -83,6 +83,9 @@
     private final PackageManager mPackageManager;
     private final SettingsActivity mActivity;
     private final InstrumentedPreferenceFragment mFragment;
+    private final Set<CharSequence> mNotAllowShowSummaryPackages;
+    private final String mPreferenceKey;
+
     private Context mPrefContext;
 
     /**
@@ -159,6 +162,10 @@
         mPackageManager = context.getPackageManager();
         mActivity = activity;
         mFragment = fragment;
+        mNotAllowShowSummaryPackages = Set.of(
+                FeatureFactory.getFactory(context)
+                        .getPowerUsageFeatureProvider(context)
+                        .getHideApplicationSummary(context));
     }
 
     @Override
@@ -425,7 +432,13 @@
     @VisibleForTesting
     void setUsageSummary(Preference preference, BatteryEntry entry) {
         if (entry.getUid() == Process.SYSTEM_UID) {
-          return;
+            return;
+        }
+        String packageName = entry.getDefaultPackageName();
+        if (packageName != null
+                && mNotAllowShowSummaryPackages != null
+                && mNotAllowShowSummaryPackages.contains(packageName)) {
+            return;
         }
         // Only show summary when usage time is longer than one minute
         final long usageTimeMs = entry.getTimeInForegroundMs();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index 45b4886..bc25381 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -25,6 +25,7 @@
 import android.util.SparseIntArray;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.settings.R;
 import com.android.settingslib.fuelgauge.Estimate;
 
 import java.util.Map;
@@ -179,6 +180,7 @@
 
     @Override
     public CharSequence[] getHideApplicationSummary(Context context) {
-        return new CharSequence[0];
+        return context.getResources().getTextArray(
+                R.array.allowlist_hide_summary_in_battery_usage);
     }
 }
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index ae030f4..de4d127 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -49,6 +49,7 @@
 import android.view.View;
 import android.widget.Toast;
 
+import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.Fragment;
@@ -87,6 +88,7 @@
 import com.android.settingslib.utils.ThreadUtils;
 import com.android.settingslib.widget.FooterPreference;
 import com.android.settingslib.widget.LayoutPreference;
+import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils;
 import com.android.settingslib.wifi.WifiSavedConfigUtils;
 import com.android.wifitrackerlib.WifiEntry;
 import com.android.wifitrackerlib.WifiEntry.ConnectCallback;
@@ -127,6 +129,8 @@
 
     private static final String PREF_KEY_AIRPLANE_MODE_MSG = "airplane_mode_message";
     private static final String PREF_KEY_EMPTY_WIFI_LIST = "wifi_empty_list";
+    @VisibleForTesting
+    static final String PREF_KEY_WIFI_TOGGLE = "main_toggle_wifi";
     // TODO(b/70983952): Rename these to use WifiEntry instead of AccessPoint.
     @VisibleForTesting
     static final String PREF_KEY_CONNECTED_ACCESS_POINTS = "connected_access_point";
@@ -1236,26 +1240,54 @@
         }
     };
 
-    public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider(R.xml.network_provider_settings) {
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new SearchIndexProvider(R.xml.network_provider_settings);
 
-                @Override
-                public List<String> getNonIndexableKeys(Context context) {
-                    final List<String> keys = super.getNonIndexableKeys(context);
+    @VisibleForTesting
+    static class SearchIndexProvider extends BaseSearchIndexProvider {
 
-                    final WifiManager wifiManager = context.getSystemService(WifiManager.class);
-                    if (wifiManager == null) return keys;
+        private final WifiRestriction mWifiRestriction;
 
-                    if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) {
-                        keys.add(PREF_KEY_SAVED_NETWORKS);
-                    }
+        SearchIndexProvider(int xmlRes) {
+            super(xmlRes);
+            mWifiRestriction = new WifiRestriction();
+        }
 
-                    if (!DataUsageUtils.hasWifiRadio(context)) {
-                        keys.add(PREF_KEY_DATA_USAGE);
-                    }
-                    return keys;
-                }
-            };
+        @VisibleForTesting
+        SearchIndexProvider(int xmlRes, WifiRestriction wifiRestriction) {
+            super(xmlRes);
+            mWifiRestriction = wifiRestriction;
+        }
+
+        @Override
+        public List<String> getNonIndexableKeys(Context context) {
+            final List<String> keys = super.getNonIndexableKeys(context);
+
+            if (!mWifiRestriction.isChangeWifiStateAllowed(context)) {
+                keys.add(PREF_KEY_WIFI_TOGGLE);
+            }
+
+            final WifiManager wifiManager = context.getSystemService(WifiManager.class);
+            if (wifiManager == null) return keys;
+
+            if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) {
+                keys.add(PREF_KEY_SAVED_NETWORKS);
+            }
+
+            if (!DataUsageUtils.hasWifiRadio(context)) {
+                keys.add(PREF_KEY_DATA_USAGE);
+            }
+            return keys;
+        }
+    }
+
+    @VisibleForTesting
+    static class WifiRestriction {
+        public boolean isChangeWifiStateAllowed(@Nullable Context context) {
+            if (context == null) return true;
+            return WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context);
+        }
+    }
 
     private class WifiEntryConnectCallback implements ConnectCallback {
         final WifiEntry mConnectWifiEntry;
diff --git a/src/com/android/settings/notification/VolumeSeekBarPreference.java b/src/com/android/settings/notification/VolumeSeekBarPreference.java
index 36a4d8a..14955c4 100644
--- a/src/com/android/settings/notification/VolumeSeekBarPreference.java
+++ b/src/com/android/settings/notification/VolumeSeekBarPreference.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.notification;
 
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_SLIDER;
+
 import android.content.ContentResolver;
 import android.content.Context;
 import android.media.AudioManager;
@@ -31,6 +33,7 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.PreferenceViewHolder;
 
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.settings.R;
 import com.android.settings.widget.SeekBarPreference;
 
@@ -40,6 +43,8 @@
 public class VolumeSeekBarPreference extends SeekBarPreference {
     private static final String TAG = "VolumeSeekBarPreference";
 
+    private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance();
+
     protected SeekBar mSeekBar;
     private int mStream;
     private SeekBarVolumizer mVolumizer;
@@ -143,6 +148,13 @@
                 if (mCallback != null) {
                     mCallback.onStartTrackingTouch(sbv);
                 }
+                mJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
+                        .withView(CUJ_SETTINGS_SLIDER, mSeekBar)
+                        .setTag(getKey()));
+            }
+            @Override
+            public void onStopTrackingTouch(SeekBarVolumizer sbv) {
+                mJankMonitor.end(CUJ_SETTINGS_SLIDER);
             }
         };
         final Uri sampleUri = mStream == AudioManager.STREAM_MUSIC ? getMediaVolumeUri() : null;
diff --git a/src/com/android/settings/sim/SimListDialogFragment.java b/src/com/android/settings/sim/SimListDialogFragment.java
index 166d00a..06b116c 100644
--- a/src/com/android/settings/sim/SimListDialogFragment.java
+++ b/src/com/android/settings/sim/SimListDialogFragment.java
@@ -216,16 +216,6 @@
             final TextView title = convertView.findViewById(R.id.title);
             final TextView summary = convertView.findViewById(R.id.summary);
 
-            ViewGroup.MarginLayoutParams lp =
-                    (ViewGroup.MarginLayoutParams) parent.getLayoutParams();
-            if (lp != null) {
-                lp.setMargins(0, mContext.getResources().getDimensionPixelSize(
-                        R.dimen.sims_select_margin_top), 0,
-                        mContext.getResources().getDimensionPixelSize(
-                                R.dimen.sims_select_margin_bottom));
-                convertView.setLayoutParams(lp);
-            }
-
             if (sub == null) {
                 if (position == 0) {
                     title.setText(R.string.sim_calls_ask_first_prefs_title);
diff --git a/src/com/android/settings/widget/SeekBarPreference.java b/src/com/android/settings/widget/SeekBarPreference.java
index 62a19b9..9f9bc9f 100644
--- a/src/com/android/settings/widget/SeekBarPreference.java
+++ b/src/com/android/settings/widget/SeekBarPreference.java
@@ -18,6 +18,8 @@
 
 import static android.view.HapticFeedbackConstants.CLOCK_TICK;
 
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_SLIDER;
+
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.os.Parcel;
@@ -33,6 +35,7 @@
 import androidx.core.content.res.TypedArrayUtils;
 import androidx.preference.PreferenceViewHolder;
 
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.settingslib.RestrictedPreference;
 
 /**
@@ -45,6 +48,7 @@
     public static final int HAPTIC_FEEDBACK_MODE_ON_TICKS = 1;
     public static final int HAPTIC_FEEDBACK_MODE_ON_ENDS = 2;
 
+    private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance();
     private int mProgress;
     private int mMax;
     private int mMin;
@@ -312,6 +316,9 @@
     @Override
     public void onStartTrackingTouch(SeekBar seekBar) {
         mTrackingTouch = true;
+        mJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
+                .withView(CUJ_SETTINGS_SLIDER, seekBar)
+                .setTag(getKey()));
     }
 
     @Override
@@ -320,6 +327,7 @@
         if (seekBar.getProgress() != mProgress) {
             syncProgress(seekBar);
         }
+        mJankMonitor.end(CUJ_SETTINGS_SLIDER);
     }
 
     /**
diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java
index f59dc60..7b2eae9 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -37,6 +37,7 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.core.graphics.drawable.IconCompat;
 import androidx.slice.Slice;
@@ -56,6 +57,7 @@
 import com.android.settings.wifi.WifiDialogActivity;
 import com.android.settings.wifi.WifiUtils;
 import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
+import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils;
 import com.android.wifitrackerlib.WifiEntry;
 
 import java.util.Arrays;
@@ -74,10 +76,17 @@
 
     protected final Context mContext;
     protected final WifiManager mWifiManager;
+    protected final WifiRestriction mWifiRestriction;
 
     public WifiSlice(Context context) {
+        this(context, new WifiRestriction());
+    }
+
+    @VisibleForTesting
+    WifiSlice(Context context, WifiRestriction wifiRestriction) {
         mContext = context;
         mWifiManager = mContext.getSystemService(WifiManager.class);
+        mWifiRestriction = wifiRestriction;
     }
 
     @Override
@@ -167,20 +176,26 @@
         final SliceAction primarySliceAction = SliceAction.createDeeplink(primaryAction, icon,
                 ListBuilder.ICON_IMAGE, title);
 
-        return new ListBuilder.RowBuilder()
+        final ListBuilder.RowBuilder builder = new ListBuilder.RowBuilder()
                 .setTitle(title)
                 .setPrimaryAction(primarySliceAction);
+
+        if (!mWifiRestriction.isChangeWifiStateAllowed(mContext)) {
+            builder.setSubtitle(mContext.getString(R.string.not_allowed_by_ent));
+        }
+        return builder;
     }
 
     private ListBuilder getListBuilder(boolean isWifiEnabled, WifiSliceItem wifiSliceItem) {
-        final PendingIntent toggleAction = getBroadcastIntent(mContext);
-        final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction,
-                null /* actionTitle */, isWifiEnabled);
         final ListBuilder builder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY)
                 .setAccentColor(COLOR_NOT_TINTED)
                 .setKeywords(getKeywords())
-                .addRow(getHeaderRow(isWifiEnabled, wifiSliceItem))
-                .addAction(toggleSliceAction);
+                .addRow(getHeaderRow(isWifiEnabled, wifiSliceItem));
+
+        if (mWifiRestriction.isChangeWifiStateAllowed(mContext)) {
+            builder.addAction(SliceAction.createToggle(
+                    getBroadcastIntent(mContext), null /* actionTitle */, isWifiEnabled));
+        }
         return builder;
     }
 
@@ -349,4 +364,12 @@
     public Class getBackgroundWorkerClass() {
         return WifiScanWorker.class;
     }
+
+    @VisibleForTesting
+    static class WifiRestriction {
+        public boolean isChangeWifiStateAllowed(@Nullable Context context) {
+            if (context == null) return true;
+            return WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context);
+        }
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/PointerSpeedPreferenceTest.java b/tests/robotests/src/com/android/settings/PointerSpeedPreferenceTest.java
index 0925344..ea05f4a 100644
--- a/tests/robotests/src/com/android/settings/PointerSpeedPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/PointerSpeedPreferenceTest.java
@@ -27,13 +27,17 @@
 import android.util.AttributeSet;
 import android.widget.SeekBar;
 
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class PointerSpeedPreferenceTest {
 
     private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/accessibility/AlarmVibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AlarmVibrationIntensityPreferenceControllerTest.java
index 44d2e86..4a791e3 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AlarmVibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AlarmVibrationIntensityPreferenceControllerTest.java
@@ -31,6 +31,7 @@
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.widget.SeekBarPreference;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -40,8 +41,10 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class AlarmVibrationIntensityPreferenceControllerTest {
 
     private static final String PREFERENCE_KEY = "preference_key";
diff --git a/tests/robotests/src/com/android/settings/accessibility/BalanceSeekBarPreferenceTest.java b/tests/robotests/src/com/android/settings/accessibility/BalanceSeekBarPreferenceTest.java
index ba7bd2c..251698c 100644
--- a/tests/robotests/src/com/android/settings/accessibility/BalanceSeekBarPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/BalanceSeekBarPreferenceTest.java
@@ -26,13 +26,17 @@
 
 import androidx.preference.PreferenceViewHolder;
 
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class BalanceSeekBarPreferenceTest {
     private static final int BALANCE_CENTER_VALUE = 100;
     private static final int BALANCE_MAX_VALUE = 200;
diff --git a/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java
index eceb185..343d56a 100644
--- a/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java
@@ -38,6 +38,7 @@
 import androidx.preference.PreferenceScreen;
 import androidx.test.core.app.ApplicationProvider;
 
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.widget.SeekBarPreference;
 
 import org.junit.Before;
@@ -49,9 +50,11 @@
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
 
 /** Tests for {@link FloatingMenuTransparencyPreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class FloatingMenuTransparencyPreferenceControllerTest {
 
     @Rule
diff --git a/tests/robotests/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceControllerTest.java
index 344a25f..8c2be52 100644
--- a/tests/robotests/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceControllerTest.java
@@ -31,6 +31,7 @@
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.widget.SeekBarPreference;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -41,8 +42,10 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class HapticFeedbackIntensityPreferenceControllerTest {
 
     private static final String PREFERENCE_KEY = "preference_key";
diff --git a/tests/robotests/src/com/android/settings/accessibility/MediaVibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/MediaVibrationIntensityPreferenceControllerTest.java
index 3a4b43a..e0eff0e 100644
--- a/tests/robotests/src/com/android/settings/accessibility/MediaVibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/MediaVibrationIntensityPreferenceControllerTest.java
@@ -31,6 +31,7 @@
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.widget.SeekBarPreference;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -40,9 +41,11 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
 
 /** Test for {@link MediaVibrationIntensityPreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class MediaVibrationIntensityPreferenceControllerTest {
 
     private static final String PREFERENCE_KEY = "preference_key";
diff --git a/tests/robotests/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceControllerTest.java
index 9533c53..0638af9 100644
--- a/tests/robotests/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceControllerTest.java
@@ -31,6 +31,7 @@
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.widget.SeekBarPreference;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -41,8 +42,10 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class NotificationVibrationIntensityPreferenceControllerTest {
 
     private static final String PREFERENCE_KEY = "preference_key";
diff --git a/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java
index d33d80e..fae61d6 100644
--- a/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java
@@ -28,6 +28,7 @@
 import androidx.preference.PreferenceScreen;
 import androidx.test.core.app.ApplicationProvider;
 
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.widget.LabeledSeekBarPreference;
 
 import org.junit.Before;
@@ -36,11 +37,13 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
 
 /**
  * Tests for {@link PreviewSizeSeekBarController}.
  */
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class PreviewSizeSeekBarControllerTest {
     private static final String FONT_SIZE_KEY = "font_size";
     private final Context mContext = ApplicationProvider.getApplicationContext();
diff --git a/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
index fa3f3bf..2ff5d71 100644
--- a/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
@@ -31,6 +31,7 @@
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.widget.SeekBarPreference;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -41,9 +42,11 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
 
 /** Tests for {@link RingVibrationIntensityPreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class RingVibrationIntensityPreferenceControllerTest {
 
     private static final String PREFERENCE_KEY = "preference_key";
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java
index b630509..f768e42 100644
--- a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java
@@ -27,6 +27,7 @@
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.display.PreviewPagerAdapter;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.widget.LabeledSeekBarPreference;
 
 import org.junit.Before;
@@ -45,7 +46,7 @@
  * Tests for {@link TextReadingPreviewController}.
  */
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowChoreographer.class)
+@Config(shadows = {ShadowChoreographer.class, ShadowInteractionJankMonitor.class})
 public class TextReadingPreviewControllerTest {
     private static final String PREVIEW_KEY = "preview";
     private static final String FONT_SIZE_KEY = "font_size";
diff --git a/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityPreferenceControllerTest.java
index 048bce4..2508345 100644
--- a/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityPreferenceControllerTest.java
@@ -28,6 +28,7 @@
 import androidx.preference.PreferenceScreen;
 import androidx.test.core.app.ApplicationProvider;
 
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.widget.SeekBarPreference;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -37,9 +38,11 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
 
 /** Tests for {@link VibrationIntensityPreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class VibrationIntensityPreferenceControllerTest {
 
     private static final String SETTING_KEY = Settings.System.NOTIFICATION_VIBRATION_INTENSITY;
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java
index 5c66db7..1b2ef9a 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java
@@ -97,7 +97,8 @@
     public void initUsbPreference_usbConnected_preferenceAdded() {
         mDeviceUpdater.initUsbPreference(mContext);
         mDeviceUpdater.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
-                UsbManager.FUNCTION_NONE, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_NONE, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
 
         verify(mDevicePreferenceCallback).onDeviceAdded(mDeviceUpdater.mUsbPreference);
     }
@@ -106,7 +107,8 @@
     public void initUsbPreference_usbDisconnected_preferenceRemoved() {
         mDeviceUpdater.initUsbPreference(mContext);
         mDeviceUpdater.mUsbConnectionListener.onUsbConnectionChanged(false /* connected */,
-                UsbManager.FUNCTION_NONE, POWER_ROLE_NONE, DATA_ROLE_NONE);
+                UsbManager.FUNCTION_NONE, POWER_ROLE_NONE, DATA_ROLE_NONE,
+                /* isUsbConfigured= */ true);
 
         verify(mDevicePreferenceCallback).onDeviceRemoved(mDeviceUpdater.mUsbPreference);
     }
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiverTest.java
index 21ec48e..7cd7dcc 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiverTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiverTest.java
@@ -65,11 +65,12 @@
         final Intent intent = new Intent();
         intent.setAction(UsbManager.ACTION_USB_STATE);
         intent.putExtra(UsbManager.USB_CONNECTED, true);
+        intent.putExtra(UsbManager.USB_CONFIGURED, true);
 
         mReceiver.onReceive(mContext, intent);
 
         verify(mListener).onUsbConnectionChanged(true /* connected */, UsbManager.FUNCTION_NONE,
-                POWER_ROLE_NONE, DATA_ROLE_NONE);
+                POWER_ROLE_NONE, DATA_ROLE_NONE, /* isUsbConfigured= */ true);
     }
 
     @Test
@@ -77,11 +78,12 @@
         final Intent intent = new Intent();
         intent.setAction(UsbManager.ACTION_USB_STATE);
         intent.putExtra(UsbManager.USB_CONNECTED, false);
+        intent.putExtra(UsbManager.USB_CONFIGURED, true);
 
         mReceiver.onReceive(mContext, intent);
 
         verify(mListener).onUsbConnectionChanged(false /* connected */, UsbManager.FUNCTION_NONE,
-                POWER_ROLE_NONE, DATA_ROLE_NONE);
+                POWER_ROLE_NONE, DATA_ROLE_NONE, /* isUsbConfigured= */ true);
     }
 
     @Test
@@ -91,11 +93,12 @@
         intent.putExtra(UsbManager.USB_CONNECTED, true);
         intent.putExtra(UsbManager.USB_FUNCTION_MTP, true);
         intent.putExtra(UsbManager.USB_DATA_UNLOCKED, true);
+        intent.putExtra(UsbManager.USB_CONFIGURED, true);
 
         mReceiver.onReceive(mContext, intent);
 
         verify(mListener).onUsbConnectionChanged(true /* connected */, UsbManager.FUNCTION_MTP,
-                POWER_ROLE_NONE, DATA_ROLE_NONE);
+                POWER_ROLE_NONE, DATA_ROLE_NONE, /* isUsbConfigured= */ true);
     }
 
     @Test
@@ -105,26 +108,41 @@
         intent.putExtra(UsbManager.USB_CONNECTED, true);
         intent.putExtra(UsbManager.USB_FUNCTION_NCM, true);
         intent.putExtra(UsbManager.USB_DATA_UNLOCKED, true);
+        intent.putExtra(UsbManager.USB_CONFIGURED, true);
 
         mReceiver.onReceive(mContext, intent);
 
         verify(mListener).onUsbConnectionChanged(/* connected */ true, UsbManager.FUNCTION_NCM,
-                POWER_ROLE_NONE, DATA_ROLE_NONE);
+                POWER_ROLE_NONE, DATA_ROLE_NONE, /* isUsbConfigured= */ true);
     }
 
     @Test
-    public void onReceive_usbPortStatus_invokeCallback() {
+    public void onReceive_usbPortStatus_invokesCallback() {
         final Intent intent = new Intent();
         intent.setAction(UsbManager.ACTION_USB_PORT_CHANGED);
         final UsbPortStatus status = new UsbPortStatus(0, POWER_ROLE_SINK,
                 DATA_ROLE_DEVICE, 0, CONTAMINANT_PROTECTION_NONE,
                 CONTAMINANT_DETECTION_NOT_SUPPORTED);
         intent.putExtra(UsbManager.EXTRA_PORT_STATUS, status);
+        intent.putExtra(UsbManager.USB_CONFIGURED, true);
 
         mReceiver.onReceive(mContext, intent);
 
         verify(mListener).onUsbConnectionChanged(false /* connected */, UsbManager.FUNCTION_NONE,
-                POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                POWER_ROLE_SINK, DATA_ROLE_DEVICE, /* isUsbConfigured= */ true);
+    }
+
+    @Test
+    public void onReceive_usbConfiguredIsFalse_invokesCallback() {
+        final Intent intent = new Intent();
+        intent.setAction(UsbManager.ACTION_USB_STATE);
+        intent.putExtra(UsbManager.USB_CONNECTED, true);
+        intent.putExtra(UsbManager.USB_CONFIGURED, false);
+
+        mReceiver.onReceive(mContext, intent);
+
+        verify(mListener).onUsbConnectionChanged(true /* connected */, UsbManager.FUNCTION_NONE,
+                POWER_ROLE_NONE, DATA_ROLE_NONE, /* isUsbConfigured= */ false);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java
index 9afc677..71bbff2 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java
@@ -27,7 +27,6 @@
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -204,12 +203,13 @@
     public void onPause_receivedRndis_shouldSetRndis() {
         mFragment.mIsStartTethering = true;
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
-                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
         when(mUsbBackend.getCurrentFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
 
         mFragment.onPause();
 
-        verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
+        verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
         assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_RNDIS);
     }
 
@@ -217,11 +217,12 @@
     public void onPause_receivedNone_shouldSetNone() {
         mFragment.mIsStartTethering = true;
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
-                UsbManager.FUNCTION_NONE, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_NONE, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
 
         mFragment.onPause();
 
-        verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_NONE);
+        verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_NONE);
         assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NONE);
     }
 
@@ -229,12 +230,13 @@
     public void onPause_receivedMtp_shouldSetMtp() {
         mFragment.mIsStartTethering = true;
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
-                UsbManager.FUNCTION_MTP, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_MTP, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
         when(mUsbBackend.getCurrentFunctions()).thenReturn(UsbManager.FUNCTION_MTP);
 
         mFragment.onPause();
 
-        verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_MTP);
+        verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_MTP);
         assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MTP);
     }
 
@@ -242,12 +244,13 @@
     public void onPause_receivedPtp_shouldSetPtp() {
         mFragment.mIsStartTethering = true;
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
-                UsbManager.FUNCTION_PTP, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_PTP, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
         when(mUsbBackend.getCurrentFunctions()).thenReturn(UsbManager.FUNCTION_PTP);
 
         mFragment.onPause();
 
-        verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_PTP);
+        verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_PTP);
         assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_PTP);
     }
 
@@ -255,12 +258,13 @@
     public void onPause_receivedMidi_shouldSetMidi() {
         mFragment.mIsStartTethering = true;
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
-                UsbManager.FUNCTION_MIDI, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_MIDI, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
         when(mUsbBackend.getCurrentFunctions()).thenReturn(UsbManager.FUNCTION_MIDI);
 
         mFragment.onPause();
 
-        verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_MIDI);
+        verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_MIDI);
         assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MIDI);
     }
 
@@ -268,12 +272,13 @@
     public void onPause_receivedNcm_setsNcm() {
         mFragment.mIsStartTethering = true;
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected */ true,
-                UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
         when(mUsbBackend.getCurrentFunctions()).thenReturn(UsbManager.FUNCTION_NCM);
 
         mFragment.onPause();
 
-        verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_NCM);
+        verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_NCM);
         assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NCM);
     }
 
@@ -282,9 +287,11 @@
         when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
 
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(false /* connected */,
-                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
-                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
 
         verify(mTetheringManager).startTethering(eq(TetheringManager.TETHERING_USB),
                 any(),
@@ -296,9 +303,11 @@
         when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_NCM);
 
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected */ false,
-                UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected */ true,
-                UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
 
         verify(mTetheringManager).startTethering(eq(TetheringManager.TETHERING_USB),
                 any(),
@@ -310,7 +319,8 @@
         when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
 
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(false /* connected */,
-                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
 
         verify(mTetheringManager, never()).startTethering(eq(TetheringManager.TETHERING_USB),
                 any(),
@@ -323,15 +333,36 @@
         when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
 
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(false /* connected */,
-                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
         mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
-                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+                UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
 
         verify(mTetheringManager, never()).startTethering(eq(TetheringManager.TETHERING_USB),
                 any(),
                 eq(mFragment.mOnStartTetheringCallback));
     }
 
+    @Test
+    public void onUsbConnectionChanged_usbConfiguredIsTrue_updatesCurrentFunctions() {
+        mFragment.mCurrentFunctions = UsbManager.FUNCTION_NONE;
+        mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected= */ true,
+                UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ true);
+        assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NCM);
+    }
+
+    @Test
+    public void onUsbConnectionChanged_usbConfiguredIsFalse_doesNotUpdateCurrentFunctions() {
+        mFragment.mCurrentFunctions = UsbManager.FUNCTION_NONE;
+        mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected= */ true,
+                UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+                /* isUsbConfigured= */ false);
+        assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NONE);
+    }
+
+
     public static class TestFragment extends UsbDefaultFragment {
         public final PreferenceScreen mScreen;
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java
index 9b57593..b05d06d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java
@@ -15,6 +15,8 @@
 
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -22,8 +24,10 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public class BatterySaverScheduleSeekBarControllerTest {
 
     private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
index bb36c8a..78e19c3 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
@@ -10,6 +10,7 @@
 import android.provider.Settings;
 
 import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import org.junit.Before;
@@ -17,8 +18,10 @@
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
 public final class BatterySaverScheduleSettingsTest {
 
     private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/gestures/LabeledSeekBarPreferenceTest.java b/tests/robotests/src/com/android/settings/gestures/LabeledSeekBarPreferenceTest.java
index d00e905..6302f80 100644
--- a/tests/robotests/src/com/android/settings/gestures/LabeledSeekBarPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/LabeledSeekBarPreferenceTest.java
@@ -37,6 +37,7 @@
 import androidx.preference.PreferenceViewHolder;
 
 import com.android.settings.R;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.testutils.shadow.ShadowUserManager;
 import com.android.settings.widget.LabeledSeekBarPreference;
 
@@ -56,7 +57,8 @@
  */
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {
-        ShadowUserManager.class
+        ShadowUserManager.class,
+        ShadowInteractionJankMonitor.class,
 })
 public class LabeledSeekBarPreferenceTest {
 
diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
index 5ee9676..1424d0e 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
@@ -60,6 +60,7 @@
 import androidx.preference.PreferenceManager;
 import androidx.preference.PreferenceScreen;
 import androidx.recyclerview.widget.RecyclerView;
+import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.AirplaneModeEnabler;
 import com.android.settings.R;
@@ -77,24 +78,33 @@
 import com.android.wifitrackerlib.WifiPickerTracker;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
 import org.robolectric.shadows.ShadowToast;
 
+import java.util.List;
+
 @RunWith(RobolectricTestRunner.class)
 public class NetworkProviderSettingsTest {
 
+    private static final int XML_RES = R.xml.wifi_tether_settings;
     private static final int NUM_NETWORKS = 4;
     private static final String FAKE_URI_STRING = "fakeuri";
 
+    @Rule
+    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+    @Spy
+    Context mContext = ApplicationProvider.getApplicationContext();
     @Mock
     private PowerManager mPowerManager;
     @Mock
@@ -107,7 +117,6 @@
     private AirplaneModeEnabler mAirplaneModeEnabler;
     @Mock
     private DataUsagePreference mDataUsagePreference;
-    private Context mContext;
     private NetworkProviderSettings mNetworkProviderSettings;
     @Mock
     private WifiPickerTracker mMockWifiPickerTracker;
@@ -131,12 +140,11 @@
     PreferenceCategory mConnectedWifiEntryPreferenceCategory;
     @Mock
     PreferenceCategory mFirstWifiEntryPreferenceCategory;
+    @Mock
+    NetworkProviderSettings.WifiRestriction mWifiRestriction;
 
     @Before
     public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application);
-
         mNetworkProviderSettings = spy(new NetworkProviderSettings());
         doReturn(mContext).when(mNetworkProviderSettings).getContext();
         doReturn(mPreferenceManager).when(mNetworkProviderSettings).getPreferenceManager();
@@ -721,6 +729,28 @@
         verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt());
     }
 
+    @Test
+    public void getNonIndexableKeys_allowedChangeWifiState_keyNotReturned() {
+        when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true);
+        NetworkProviderSettings.SearchIndexProvider searchIndexProvider =
+                new NetworkProviderSettings.SearchIndexProvider(XML_RES, mWifiRestriction);
+
+        final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext);
+
+        assertThat(keys).doesNotContain(NetworkProviderSettings.PREF_KEY_WIFI_TOGGLE);
+    }
+
+    @Test
+    public void getNonIndexableKeys_disallowedChangeWifiState_keyReturned() {
+        when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(false);
+        NetworkProviderSettings.SearchIndexProvider searchIndexProvider =
+                new NetworkProviderSettings.SearchIndexProvider(XML_RES, mWifiRestriction);
+
+        final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext);
+
+        assertThat(keys).contains(NetworkProviderSettings.PREF_KEY_WIFI_TOGGLE);
+    }
+
     @Implements(PreferenceFragmentCompat.class)
     public static class ShadowPreferenceFragmentCompat {
 
diff --git a/tests/robotests/src/com/android/settings/notification/RemoteVolumeGroupControllerTest.java b/tests/robotests/src/com/android/settings/notification/RemoteVolumeGroupControllerTest.java
index 8b46374..e713963 100644
--- a/tests/robotests/src/com/android/settings/notification/RemoteVolumeGroupControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/RemoteVolumeGroupControllerTest.java
@@ -43,6 +43,7 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.widget.SeekBarPreference;
 import com.android.settingslib.media.LocalMediaManager;
 
@@ -61,7 +62,7 @@
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowBluetoothAdapter.class})
+@Config(shadows = {ShadowBluetoothAdapter.class, ShadowInteractionJankMonitor.class})
 public class RemoteVolumeGroupControllerTest {
 
     private static final String KEY_REMOTE_VOLUME_GROUP = "remote_media_group";
diff --git a/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java
index 451b84b..770559d 100644
--- a/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java
@@ -34,6 +34,7 @@
 
 import androidx.preference.PreferenceFragmentCompat;
 
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
 
 import org.junit.Before;
@@ -46,7 +47,7 @@
 import org.robolectric.shadows.androidx.fragment.FragmentController;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowRestrictedLockUtilsInternal.class)
+@Config(shadows = {ShadowRestrictedLockUtilsInternal.class, ShadowInteractionJankMonitor.class})
 public class SeekBarPreferenceTest {
 
     private static final int MAX = 75;
diff --git a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
index 5b7a7d6..d8151d0 100644
--- a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
@@ -25,7 +25,6 @@
 
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import android.content.ContentResolver;
@@ -37,9 +36,12 @@
 
 import androidx.slice.Slice;
 import androidx.slice.SliceItem;
+import androidx.slice.SliceMetadata;
 import androidx.slice.SliceProvider;
 import androidx.slice.core.SliceQuery;
+import androidx.slice.widget.ListContent;
 import androidx.slice.widget.SliceLiveData;
+import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.R;
 import com.android.settings.slices.SliceBackgroundWorker;
@@ -49,12 +51,14 @@
 import com.android.wifitrackerlib.WifiEntry.ConnectedState;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
@@ -74,26 +78,29 @@
     private static final String AP3_NAME = "ap3";
     private static final int USER_ID = 1;
 
+    @Rule
+    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+    @Spy
+    Context mContext = ApplicationProvider.getApplicationContext();
     @Mock
     private WifiManager mWifiManager;
     @Mock
     private PackageManager mPackageManager;
-
-
-    private Context mContext;
+    @Mock
     private ContentResolver mResolver;
+    @Mock
+    private WifiSlice.WifiRestriction mWifiRestriction;
+
     private WifiSlice mWifiSlice;
     private String mSIPackageName;
 
     @Before
     public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application);
-        mResolver = mock(ContentResolver.class);
         doReturn(mResolver).when(mContext).getContentResolver();
         doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class);
         doReturn(WifiManager.WIFI_STATE_ENABLED).when(mWifiManager).getWifiState();
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
+        when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true);
 
         // Set-up specs for SliceMetadata.
         SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
@@ -102,7 +109,7 @@
         ShadowBinder.setCallingUid(USER_ID);
         when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName});
         ShadowWifiSlice.setWifiPermissible(true);
-        mWifiSlice = new WifiSlice(mContext);
+        mWifiSlice = new WifiSlice(mContext, mWifiRestriction);
     }
 
     @Test
@@ -242,6 +249,30 @@
     }
 
     @Test
+    public void getWifiSlice_disallowedChangeWifiState_addSubtitleAndNoToggle() {
+        when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(false);
+
+        final Slice slice = mWifiSlice.getSlice();
+
+        final ListContent listContent = SliceMetadata.from(mContext, slice).getListContent();
+        assertThat(slice).isNotNull();
+        assertThat(listContent.getHeader().getSubtitleItem()).isNotNull();
+        assertThat(listContent.getSliceActions()).isNull();
+    }
+
+    @Test
+    public void getWifiSlice_allowedChangeWifiState_noSubtitleAndAddToggle() {
+        when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true);
+
+        final Slice slice = mWifiSlice.getSlice();
+
+        final ListContent listContent = SliceMetadata.from(mContext, slice).getListContent();
+        assertThat(slice).isNotNull();
+        assertThat(listContent.getHeader().getSubtitleItem()).isNull();
+        assertThat(listContent.getSliceActions()).isNotNull();
+    }
+
+    @Test
     public void handleUriChange_updatesWifi() {
         final Intent intent = mWifiSlice.getIntent();
         intent.putExtra(android.app.slice.Slice.EXTRA_TOGGLE_STATE, true);
