diff --git a/res/drawable-v35/expressive_battery_hints_chip_bg.xml b/res/drawable-v35/expressive_battery_hints_chip_bg.xml
new file mode 100644
index 0000000..86e9f6a
--- /dev/null
+++ b/res/drawable-v35/expressive_battery_hints_chip_bg.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2025 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.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="@dimen/settingslib_expressive_radius_medium" />
+    <stroke android:width="1dp" android:color="@color/settingslib_materialColorOutline" />
+</shape>
\ No newline at end of file
diff --git a/res/drawable-v35/expressive_battery_hints_chip_bg_ripple.xml b/res/drawable-v35/expressive_battery_hints_chip_bg_ripple.xml
new file mode 100644
index 0000000..542a40c
--- /dev/null
+++ b/res/drawable-v35/expressive_battery_hints_chip_bg_ripple.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2025 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.
+  -->
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+    android:color="?android:attr/colorControlHighlight">
+    <item android:drawable="@drawable/expressive_battery_hints_chip_bg"/>
+</ripple>
\ No newline at end of file
diff --git a/res/layout-v35/expressive_warning_frame_preference.xml b/res/layout-v35/expressive_warning_frame_preference.xml
new file mode 100644
index 0000000..ba11044
--- /dev/null
+++ b/res/layout-v35/expressive_warning_frame_preference.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+  ~ Copyright (C) 2025 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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:orientation="vertical">
+
+    <include layout="@layout/settingslib_expressive_preference"
+        android:id="@+id/preference_frame"/>
+
+    <LinearLayout
+        android:id="@+id/warning_chip_frame"
+        android:visibility="gone"
+        android:clickable="false"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="@dimen/settingslib_expressive_space_small1"
+        android:layout_marginTop="-8dp">
+        <Space
+            android:id="@+id/warning_padding_placeholder"
+            android:layout_width="@dimen/settingslib_expressive_space_medium3"
+            android:layout_height="1px"
+            android:layout_marginEnd="@dimen/settingslib_expressive_space_extrasmall6"/>
+
+        <include layout="@layout/power_anomaly_hints"/>
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/locale_order_list.xml b/res/layout/locale_order_list.xml
index da1eb62..36bb06d 100644
--- a/res/layout/locale_order_list.xml
+++ b/res/layout/locale_order_list.xml
@@ -44,7 +44,8 @@
             android:textAlignment="textStart"
             android:text="@string/add_a_language"
             style="@style/Base.Widget.AppCompat.Button.Borderless"
-            android:textAppearance="?android:attr/textAppearanceListItem"/>
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            android:visibility="gone"/>
 
     </LinearLayout>
 
diff --git a/res/layout/power_anomaly_hints.xml b/res/layout/power_anomaly_hints.xml
index 7ee419e..9498523 100644
--- a/res/layout/power_anomaly_hints.xml
+++ b/res/layout/power_anomaly_hints.xml
@@ -17,13 +17,12 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
     android:gravity="center_vertical|start"
-    android:padding="8dp"
-    android:background="@drawable/battery_hints_chip_bg_ripple">
+    android:id="@+id/warning_chip"
+    android:padding="8dp">
 
     <ImageView
         android:layout_width="16dp"
diff --git a/res/layout/power_usage_time.xml b/res/layout/power_usage_time.xml
deleted file mode 100644
index bad68f4..0000000
--- a/res/layout/power_usage_time.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2023 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.
--->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-    android:orientation="vertical">
-
-    <TextView
-        android:id="@+id/time_title"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingTop="20dp"
-        android:textAlignment="viewStart"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        android:textColor="?android:attr/textColorPrimary" />
-
-    <TextView
-        android:id="@+id/time_summary"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginVertical="4dp"
-        android:textAlignment="viewStart"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textColor="?android:attr/textColorSecondary" />
-
-    <include layout="@layout/power_anomaly_hints"
-        android:visibility="gone"
-        android:id="@+id/anomaly_hints"
-        android:paddingBottom="20dp"/>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/preference_volume_slider.xml b/res/layout/preference_volume_slider.xml
index 50095f4..1d9a848 100644
--- a/res/layout/preference_volume_slider.xml
+++ b/res/layout/preference_volume_slider.xml
@@ -66,6 +66,8 @@
                 android:layout_gravity="center_vertical"
                 android:paddingStart="0dp"
                 android:paddingEnd="12dp"
+                android:progressBackgroundTint="@color/settingslib_materialColorOutline"
+                android:progressTint="@color/settingslib_materialColorPrimaryFixed"
                 android:layout_width="match_parent"
                 android:layout_height="48dp"/>
 
diff --git a/res/layout/anomaly_app_item_preference.xml b/res/layout/warning_frame_preference.xml
similarity index 88%
rename from res/layout/anomaly_app_item_preference.xml
rename to res/layout/warning_frame_preference.xml
index 681fe68..4e624ce 100644
--- a/res/layout/anomaly_app_item_preference.xml
+++ b/res/layout/warning_frame_preference.xml
@@ -22,7 +22,7 @@
     <include layout="@layout/preference_app"/>
 
     <LinearLayout
-        android:id="@+id/warning_chip"
+        android:id="@+id/warning_chip_frame"
         android:visibility="gone"
         android:clickable="false"
         android:layout_width="match_parent"
@@ -32,13 +32,12 @@
         android:orientation="horizontal"
         android:paddingStart="?android:attr/listPreferredItemPaddingStart"
         android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
-
         <Space
+            android:id="@+id/warning_padding_placeholder"
             android:layout_width="@dimen/secondary_app_icon_size"
-            android:layout_height="wrap_content"
+            android:layout_height="1px"
             android:layout_marginEnd="16dp"/>
 
-        <include layout="@layout/power_anomaly_hints" />
-
+        <include layout="@layout/power_anomaly_hints"/>
     </LinearLayout>
 </LinearLayout>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c6b8210..6f328a3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13973,13 +13973,15 @@
     <string name="audio_sharing_share_with_button_label">Share with <xliff:g example="My buds" id="device_name">%1$s</xliff:g></string>
     <!-- Text for audio sharing close button [CHAR LIMIT=none]-->
     <string name="audio_sharing_close_button_label">Close</string>
-    <!-- Content for audio sharing share dialog with no device, ask users to connect device  [CHAR LIMIT=none]-->
+    <!-- Content for audio sharing share dialog with no second device, ask users to connect device  [CHAR LIMIT=none]-->
     <string name="audio_sharing_dialog_connect_device_content">Connect another pair of compatible headphones, or share your stream\'s name and password with the other person</string>
-    <!-- Content for audio sharing share dialog with no device, ask users to scan qr code [CHAR LIMIT=none]-->
+    <!-- Content for audio sharing share dialog with no second device, ask users to scan qr code [CHAR LIMIT=none]-->
     <string name="audio_sharing_dialog_qr_code_content">Let others scan this code and listen to your audio\n\nStream name: <xliff:g example="Pixel 8" id="stream_name">%1$s</xliff:g>\nPassword: <xliff:g example="123456" id="password">%2$s</xliff:g></string>
-    <!-- Content for audio sharing share dialog with no device, ask users to pair new device [CHAR LIMIT=none]-->
+    <!-- Content for audio sharing share dialog with no second device and no password, ask users to scan qr code [CHAR LIMIT=none]-->
+    <string name="audio_sharing_dialog_qr_code_content_no_password">Let others scan this code and listen to your audio\n\nStream name: <xliff:g example="Pixel 8" id="stream_name">%1$s</xliff:g></string>
+    <!-- Content for audio sharing share dialog with no second device, ask users to pair new device [CHAR LIMIT=none]-->
     <string name="audio_sharing_dialog_pair_new_device_content">or pair another set of compatible headphones</string>
-    <!-- Content for audio sharing share dialog with no device, ask users to pair device  [CHAR LIMIT=none]-->
+    <!-- Content for audio sharing share dialog with no second device, ask users to pair device  [CHAR LIMIT=none]-->
     <string name="audio_sharing_dialog_pair_device_content">Pair another set of compatible headphones, or share your audio stream QR code with the other person</string>
     <!-- Text for sharing audio sharing state [CHAR LIMIT=none]-->
     <string name="audio_sharing_sharing_label">Sharing audio</string>
diff --git a/res/xml/languages.xml b/res/xml/languages.xml
index d478aa1..1fb6368 100644
--- a/res/xml/languages.xml
+++ b/res/xml/languages.xml
@@ -31,6 +31,13 @@
         <com.android.settingslib.widget.LayoutPreference
             android:key="languages_picker"
             android:layout="@layout/locale_order_list" />
+
+        <Preference
+            android:key="add_a_language"
+            android:title="@string/add_a_language"
+            android:icon="@drawable/ic_add_24dp"
+            settings:isPreferenceVisible="false"
+            settings:fragment="com.android.settings.localepicker.SystemLocalePickerFragment"/>
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java
index cf71d5f..14a5590 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java
@@ -186,14 +186,17 @@
             Drawable qrCodeDrawable = metadata == null ? null : getQrCodeDrawable(metadata,
                     getContext()).orElse(null);
             if (qrCodeDrawable != null) {
+                String broadcastName =
+                        metadata.getBroadcastName() == null ? "" : metadata.getBroadcastName();
+                boolean hasPassword = metadata.getBroadcastCode() != null
+                        && metadata.getBroadcastCode().length > 0;
+                String message = hasPassword ? getString(
+                        R.string.audio_sharing_dialog_qr_code_content, broadcastName,
+                        new String(metadata.getBroadcastCode(), StandardCharsets.UTF_8)) :
+                        getString(R.string.audio_sharing_dialog_qr_code_content_no_password,
+                                broadcastName);
                 builder.setCustomImage(qrCodeDrawable)
-                        .setCustomMessage(
-                                getString(
-                                        R.string.audio_sharing_dialog_qr_code_content,
-                                        metadata.getBroadcastName(),
-                                        new String(
-                                                metadata.getBroadcastCode(),
-                                                StandardCharsets.UTF_8)))
+                        .setCustomMessage(message)
                         .setCustomMessage2(R.string.audio_sharing_dialog_pair_new_device_content)
                         .setCustomNegativeButton(R.string.audio_streams_dialog_close,
                                 v -> onCancelClick());
diff --git a/src/com/android/settings/development/DesktopExperiencePreferenceController.java b/src/com/android/settings/development/DesktopExperiencePreferenceController.java
index f6173a9..28e92fc 100644
--- a/src/com/android/settings/development/DesktopExperiencePreferenceController.java
+++ b/src/com/android/settings/development/DesktopExperiencePreferenceController.java
@@ -98,7 +98,7 @@
 
     @Override
     public CharSequence getSummary() {
-        if (DesktopModeStatus.isInternalDisplayEligibleToHostDesktops(mContext)
+        if (DesktopModeStatus.isDeviceEligibleForDesktopMode(mContext)
                 && !DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODE.isTrue()) {
             return mContext.getString(
                     R.string.enable_desktop_experience_features_summary_with_desktop);
diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
index 421963e..b49d62d 100644
--- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
@@ -17,6 +17,7 @@
 package com.android.settings.deviceinfo;
 
 import android.content.Context;
+import android.os.UserManager;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -30,6 +31,7 @@
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.network.SubscriptionUtil;
+import com.android.settingslib.Utils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -51,8 +53,13 @@
 
     @Override
     public int getAvailabilityStatus() {
-        return SubscriptionUtil.isSimHardwareVisible(mContext) ?
-                AVAILABLE : UNSUPPORTED_ON_DEVICE;
+        if (!SubscriptionUtil.isSimHardwareVisible(mContext) || Utils.isWifiOnly(mContext)) {
+            return UNSUPPORTED_ON_DEVICE;
+        }
+        if (!mContext.getSystemService(UserManager.class).isAdminUser()) {
+            return DISABLED_FOR_USER;
+        }
+        return AVAILABLE;
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/PowerUsageTimeController.java b/src/com/android/settings/fuelgauge/PowerUsageTimeController.java
index 0dfdd5d..e01a95c 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageTimeController.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageTimeController.java
@@ -93,10 +93,10 @@
                 || (summaryTimeMs == 0 && !TextUtils.equals(anomalyHintKey, preference.getKey()))) {
             return false;
         }
-        preference.setTimeTitle(mContext.getString(titleResId));
-        preference.setTimeSummary(getPowerUsageTimeInfo(summaryTimeMs));
+        preference.setTitle(mContext.getString(titleResId));
+        preference.setSummary(getPowerUsageTimeInfo(summaryTimeMs));
         if (TextUtils.equals(anomalyHintKey, preference.getKey())) {
-            preference.setAnomalyHint(anomalyHintText);
+            preference.setHint(anomalyHintText);
         }
         preference.setVisible(true);
         return true;
diff --git a/src/com/android/settings/fuelgauge/PowerUsageTimePreference.java b/src/com/android/settings/fuelgauge/PowerUsageTimePreference.java
index 16c7770..d2f39ff 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageTimePreference.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageTimePreference.java
@@ -17,74 +17,17 @@
 package com.android.settings.fuelgauge;
 
 import android.content.Context;
-import android.text.TextUtils;
 import android.util.AttributeSet;
-import android.view.View;
-import android.widget.TextView;
 
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceViewHolder;
-
-import com.android.settings.R;
+import com.android.settingslib.widget.GroupSectionDividerMixin;
 
 /** Custom preference for displaying the app power usage time. */
-public class PowerUsageTimePreference extends Preference {
+public class PowerUsageTimePreference extends WarningFramePreference implements
+        GroupSectionDividerMixin {
     private static final String TAG = "PowerUsageTimePreference";
 
-    @VisibleForTesting CharSequence mTimeTitle;
-    @VisibleForTesting CharSequence mTimeSummary;
-    @VisibleForTesting CharSequence mAnomalyHintText;
-
     public PowerUsageTimePreference(Context context, AttributeSet attrs) {
         super(context, attrs);
-        setLayoutResource(R.layout.power_usage_time);
-    }
-
-    void setTimeTitle(CharSequence timeTitle) {
-        if (!TextUtils.equals(mTimeTitle, timeTitle)) {
-            mTimeTitle = timeTitle;
-            notifyChanged();
-        }
-    }
-
-    void setTimeSummary(CharSequence timeSummary) {
-        if (!TextUtils.equals(mTimeSummary, timeSummary)) {
-            mTimeSummary = timeSummary;
-            notifyChanged();
-        }
-    }
-
-    void setAnomalyHint(CharSequence anomalyHintText) {
-        if (!TextUtils.equals(mAnomalyHintText, anomalyHintText)) {
-            mAnomalyHintText = anomalyHintText;
-            notifyChanged();
-        }
-    }
-
-    private void showAnomalyHint(PreferenceViewHolder view) {
-        if (TextUtils.isEmpty(mAnomalyHintText)) {
-            return;
-        }
-        final View anomalyHintView = view.findViewById(R.id.anomaly_hints);
-        if (anomalyHintView == null) {
-            return;
-        }
-        final TextView warningInfo = anomalyHintView.findViewById(R.id.warning_info);
-        if (warningInfo == null) {
-            return;
-        }
-        warningInfo.setText(mAnomalyHintText);
-        anomalyHintView.setVisibility(View.VISIBLE);
-    }
-
-    @Override
-    public void onBindViewHolder(PreferenceViewHolder view) {
-        super.onBindViewHolder(view);
-
-        ((TextView) view.findViewById(R.id.time_title)).setText(mTimeTitle);
-        ((TextView) view.findViewById(R.id.time_summary)).setText(mTimeSummary);
-
-        showAnomalyHint(view);
+        setSelectable(false);
     }
 }
diff --git a/src/com/android/settings/fuelgauge/WarningFramePreference.java b/src/com/android/settings/fuelgauge/WarningFramePreference.java
new file mode 100644
index 0000000..fef03a5
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/WarningFramePreference.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2025 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.fuelgauge;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
+
+import com.android.settings.R;
+import com.android.settingslib.Utils;
+import com.android.settingslib.widget.SettingsThemeHelper;
+
+/**
+ * Custom preference for displaying the {@link Preference} with an optional hint chip.
+ */
+public class WarningFramePreference extends Preference {
+    private final int mTitleColorNormal;
+    private final int mSummaryColorNormal;
+    private final int mWarningChipBackgroundResId;
+    private final boolean mIsExpressiveTheme;
+
+    @Nullable private CharSequence mHintText;
+
+    public WarningFramePreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mIsExpressiveTheme = SettingsThemeHelper.isExpressiveTheme(context);
+        int layoutResId =
+                mIsExpressiveTheme
+                        ? R.layout.expressive_warning_frame_preference
+                        : R.layout.warning_frame_preference;
+        setLayoutResource(layoutResId);
+        mWarningChipBackgroundResId =
+                mIsExpressiveTheme
+                        ? R.drawable.expressive_battery_hints_chip_bg_ripple
+                        : R.drawable.battery_hints_chip_bg_ripple;
+        mTitleColorNormal =
+                Utils.getColorAttrDefaultColor(context, android.R.attr.textColorPrimary);
+        mSummaryColorNormal =
+                Utils.getColorAttrDefaultColor(context, android.R.attr.textColorSecondary);
+    }
+
+    /** Sets the text of hint to show. */
+    public void setHint(@Nullable CharSequence hintText) {
+        if (!TextUtils.equals(mHintText, hintText)) {
+            mHintText = hintText;
+            notifyChanged();
+        }
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder view) {
+        super.onBindViewHolder(view);
+
+        if (mIsExpressiveTheme) {
+            final View preferenceFrame = view.findViewById(R.id.preference_frame);
+            preferenceFrame.setBackground(null);
+            preferenceFrame.setPadding(0, 0, 0, 0);
+        }
+
+        final View warningChipFrame = view.findViewById(R.id.warning_chip_frame);
+        warningChipFrame
+                .findViewById(R.id.warning_padding_placeholder)
+                .setVisibility(getIcon() != null ? View.VISIBLE : View.GONE);
+        if (!TextUtils.isEmpty(mHintText)) {
+            ((TextView) warningChipFrame.findViewById(R.id.warning_info)).setText(mHintText);
+            warningChipFrame.setVisibility(View.VISIBLE);
+            warningChipFrame
+                    .findViewById(R.id.warning_chip)
+                    .setBackgroundResource(mWarningChipBackgroundResId);
+        } else {
+            warningChipFrame.setVisibility(View.GONE);
+        }
+        ((TextView) view.findViewById(android.R.id.title)).setTextColor(mTitleColorNormal);
+        ((TextView) view.findViewById(android.R.id.summary)).setTextColor(mSummaryColorNormal);
+    }
+}
+
diff --git a/src/com/android/settings/fuelgauge/batteryusage/AnomalyAppItemPreference.java b/src/com/android/settings/fuelgauge/batteryusage/AnomalyAppItemPreference.java
deleted file mode 100644
index 592d308..0000000
--- a/src/com/android/settings/fuelgauge/batteryusage/AnomalyAppItemPreference.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2023 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.fuelgauge.batteryusage;
-
-import android.annotation.Nullable;
-import android.content.Context;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import androidx.preference.PreferenceViewHolder;
-
-import com.android.settings.R;
-
-class AnomalyAppItemPreference extends PowerGaugePreference {
-
-    private static final String TAG = "AnomalyAppItemPreference";
-
-    private CharSequence mAnomalyHintText;
-
-    AnomalyAppItemPreference(Context context) {
-        super(context, /* attrs */ null);
-        setLayoutResource(R.layout.anomaly_app_item_preference);
-    }
-
-    void setAnomalyHint(@Nullable CharSequence anomalyHintText) {
-        if (!TextUtils.equals(mAnomalyHintText, anomalyHintText)) {
-            mAnomalyHintText = anomalyHintText;
-            notifyChanged();
-        }
-    }
-
-    @Override
-    public void onBindViewHolder(PreferenceViewHolder viewHolder) {
-        super.onBindViewHolder(viewHolder);
-        final LinearLayout warningChipView =
-                (LinearLayout) viewHolder.findViewById(R.id.warning_chip);
-
-        if (!TextUtils.isEmpty(mAnomalyHintText)) {
-            ((TextView) warningChipView.findViewById(R.id.warning_info)).setText(mAnomalyHintText);
-            warningChipView.setVisibility(View.VISIBLE);
-        } else {
-            warningChipView.setVisibility(View.GONE);
-        }
-    }
-}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
index 6fd4eb5..280fa18 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java
@@ -381,15 +381,15 @@
                 continue;
             }
             final String prefKey = entry.getKey();
-            AnomalyAppItemPreference preference = mRootPreferenceGroup.findPreference(prefKey);
+            PowerGaugePreference preference = mRootPreferenceGroup.findPreference(prefKey);
             if (preference != null) {
                 isAdded = true;
             } else {
-                preference = (AnomalyAppItemPreference) mPreferenceCache.get(prefKey);
+                preference = (PowerGaugePreference) mPreferenceCache.get(prefKey);
             }
             // Creates new instance if cached preference is not found.
             if (preference == null) {
-                preference = new AnomalyAppItemPreference(mPrefContext);
+                preference = new PowerGaugePreference(mPrefContext);
                 preference.setKey(prefKey);
                 mPreferenceCache.put(prefKey, preference);
             }
@@ -398,7 +398,7 @@
             preference.setOrder(++preferenceOrder);
             preference.setSingleLineTitle(true);
             // Updates App item preference style
-            preference.setAnomalyHint(isAnomalyBatteryDiffEntry(entry) ? mAnomalyHintString : null);
+            preference.setHint(isAnomalyBatteryDiffEntry(entry) ? mAnomalyHintString : null);
             // Sets the BatteryDiffEntry to preference for launching detailed page.
             preference.setBatteryDiffEntry(entry);
             preference.setSelectable(entry.validForRestriction());
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
index 1fc9abd..866b9ae 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
@@ -28,7 +28,7 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
-import com.android.settingslib.widget.AppPreference;
+import com.android.settings.fuelgauge.WarningFramePreference;
 
 /**
  * Custom preference for displaying battery usage info as a bar and an icon on the left for the
@@ -37,7 +37,7 @@
  * <p>The battery usage info could be usage percentage or usage time. The preference won't show any
  * icon if it is null.
  */
-public class PowerGaugePreference extends AppPreference {
+public class PowerGaugePreference extends WarningFramePreference {
 
     // Please see go/battery-usage-app-list-alpha
     private static final float SELECTABLE_ALPHA = 1f;
@@ -51,7 +51,6 @@
     private CharSequence mContentDescription;
     private CharSequence mProgress;
     private CharSequence mProgressContentDescription;
-    private boolean mShowAnomalyIcon;
 
     public PowerGaugePreference(
             Context context, Drawable icon, CharSequence contentDescription, BatteryEntry info) {
@@ -79,7 +78,6 @@
         setWidgetLayoutResource(R.layout.preference_widget_summary);
         mInfo = info;
         mContentDescription = contentDescription;
-        mShowAnomalyIcon = false;
         mTitleColorNormal =
                 Utils.getColorAttrDefaultColor(context, android.R.attr.textColorPrimary);
     }
@@ -108,17 +106,6 @@
         return mProgress.toString();
     }
 
-    /** Sets whether to show anomaly icon */
-    public void shouldShowAnomalyIcon(boolean showAnomalyIcon) {
-        mShowAnomalyIcon = showAnomalyIcon;
-        notifyChanged();
-    }
-
-    /** Gets whether to show anomaly icon */
-    public boolean showAnomalyIcon() {
-        return mShowAnomalyIcon;
-    }
-
     public void setBatteryDiffEntry(BatteryDiffEntry entry) {
         mBatteryDiffEntry = entry;
     }
@@ -149,12 +136,6 @@
         if (!TextUtils.isEmpty(mProgressContentDescription)) {
             subtitle.setContentDescription(mProgressContentDescription);
         }
-        if (mShowAnomalyIcon) {
-            subtitle.setCompoundDrawablesRelativeWithIntrinsicBounds(
-                    R.drawable.ic_warning_24dp, 0, 0, 0);
-        } else {
-            subtitle.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0);
-        }
         if (mContentDescription != null) {
             final TextView titleView = (TextView) view.findViewById(android.R.id.title);
             titleView.setContentDescription(mContentDescription);
diff --git a/src/com/android/settings/localepicker/LocaleListEditor.java b/src/com/android/settings/localepicker/LocaleListEditor.java
index 461ea65..b1f005a 100644
--- a/src/com/android/settings/localepicker/LocaleListEditor.java
+++ b/src/com/android/settings/localepicker/LocaleListEditor.java
@@ -46,6 +46,7 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
 import androidx.fragment.app.FragmentManager;
+import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 import androidx.recyclerview.widget.RecyclerView;
 
@@ -53,6 +54,7 @@
 import com.android.internal.app.LocaleStore;
 import com.android.settings.R;
 import com.android.settings.RestrictedSettingsFragment;
+import com.android.settings.flags.Flags;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
@@ -84,6 +86,7 @@
     private static final String INDEX_KEY_ADD_LANGUAGE = "add_language";
     private static final String KEY_LANGUAGES_PICKER = "languages_picker";
     private static final String KEY_CATEGORY_TERMS_OF_ADDRESS = "key_category_terms_of_address";
+    private static final String KEY_ADD_A_LANGUAGE = "add_a_language";
     private static final String TAG_DIALOG_CONFIRM_SYSTEM_DEFAULT = "dialog_confirm_system_default";
     private static final String TAG_DIALOG_NOT_AVAILABLE = "dialog_not_available_locale";
     private static final String TAG_DIALOG_ADD_SYSTEM_LOCALE = "dialog_add_system_locale";
@@ -92,6 +95,7 @@
     private LocaleDragAndDropAdapter mAdapter;
     private Menu mMenu;
     private View mAddLanguage;
+    private Preference mAddLanguagePreference;
     private boolean mRemoveMode;
     private boolean mShowingRemoveDialog;
     private boolean mLocaleAdditionMode = false;
@@ -282,7 +286,11 @@
     private void setRemoveMode(boolean mRemoveMode) {
         this.mRemoveMode = mRemoveMode;
         mAdapter.setRemoveMode(mRemoveMode);
-        mAddLanguage.setVisibility(mRemoveMode ? View.INVISIBLE : View.VISIBLE);
+        if (Flags.settingsExpressiveDesignEnabled()) {
+            mAddLanguagePreference.setVisible(!mRemoveMode);
+        } else {
+            mAddLanguage.setVisibility(mRemoveMode ? View.INVISIBLE : View.VISIBLE);
+        }
         updateVisibilityOfRemoveMenu();
     }
 
@@ -489,19 +497,23 @@
         list.setAdapter(mAdapter);
         list.setOnTouchListener(this);
         list.requestFocus();
-        mAddLanguage = layout.findViewById(R.id.add_language);
-        mAddLanguage.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                FeatureFactory.getFeatureFactory().getMetricsFeatureProvider()
-                        .logSettingsTileClick(INDEX_KEY_ADD_LANGUAGE, getMetricsCategory());
+        if (Flags.settingsExpressiveDesignEnabled()) {
+            mAddLanguagePreference = getPreferenceScreen().findPreference(KEY_ADD_A_LANGUAGE);
+        } else {
+            mAddLanguage = layout.findViewById(R.id.add_language);
+            mAddLanguage.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(@NonNull View v) {
+                    FeatureFactory.getFeatureFactory().getMetricsFeatureProvider()
+                            .logSettingsTileClick(INDEX_KEY_ADD_LANGUAGE, getMetricsCategory());
 
-                final Intent intent = new Intent(getActivity(),
-                        LocalePickerWithRegionActivity.class);
-                intent.putExtras(getActivity().getIntent().getExtras());
-                startActivityForResult(intent, REQUEST_LOCALE_PICKER);
-            }
-        });
+                    final Intent intent = new Intent(getActivity(),
+                            LocalePickerWithRegionActivity.class);
+                    intent.putExtras(getActivity().getIntent().getExtras());
+                    startActivityForResult(intent, REQUEST_LOCALE_PICKER);
+                }
+            });
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/localepicker/LocalePickerBaseListPreferenceController.java b/src/com/android/settings/localepicker/LocalePickerBaseListPreferenceController.java
index c65382f..8bcbe31 100644
--- a/src/com/android/settings/localepicker/LocalePickerBaseListPreferenceController.java
+++ b/src/com/android/settings/localepicker/LocalePickerBaseListPreferenceController.java
@@ -75,9 +75,6 @@
     public LocalePickerBaseListPreferenceController(@NonNull Context context,
             @NonNull String preferenceKey) {
         super(context, preferenceKey);
-        mLocaleList = getLocaleCollectorController(context).getSupportedLocaleList(null,
-                false, false);
-        mLocaleOptions = new ArrayList<>(mLocaleList.size());
         mPreferences = new ArrayMap<>();
         mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider();
     }
@@ -246,7 +243,7 @@
     private void setupLocaleList() {
         mLocaleList = getLocaleCollectorController(mContext).getSupportedLocaleList(
                 mParentLocale, false, mIsCountryMode);
-        mLocaleOptions.clear();
+        mLocaleOptions = new ArrayList<>(mLocaleList.size());
     }
 
     private List<LocaleStore.LocaleInfo> getSortedLocaleList(
@@ -262,7 +259,9 @@
         boolean shouldShowLocaleEditor = shouldShowLocaleEditor(localeInfo);
         if (shouldShowLocaleEditor) {
             List<LocaleStore.LocaleInfo> feedItemList = getUserLocaleList();
-            feedItemList.add(localeInfo);
+            for (LocaleStore.LocaleInfo locale : mLocaleList) {
+                feedItemList.add(locale);
+            }
             LocaleList localeList = new LocaleList(feedItemList.stream()
                     .map(LocaleStore.LocaleInfo::getLocale)
                     .toArray(Locale[]::new));
diff --git a/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt b/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt
index db16acd..40cb6f9 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt
+++ b/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt
@@ -25,6 +25,8 @@
 import com.android.settings.flags.Flags
 import com.android.settings.network.SubscriptionUtil
 import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
+import com.android.settingslib.spaprivileged.framework.common.userManager
+import com.android.settingslib.Utils
 
 /** Preference controller for "Phone number" */
 class MobileNetworkPhoneNumberPreferenceController
@@ -41,13 +43,14 @@
         mSubId = subId
     }
 
-    override fun getAvailabilityStatus(subId: Int): Int =
-        when {
-            !Flags.isDualSimOnboardingEnabled() -> CONDITIONALLY_UNAVAILABLE
-            SubscriptionManager.isValidSubscriptionId(subId) &&
-                SubscriptionUtil.isSimHardwareVisible(mContext) -> AVAILABLE
-            else -> CONDITIONALLY_UNAVAILABLE
-        }
+    override fun getAvailabilityStatus(subId: Int): Int = when {
+        !Flags.isDualSimOnboardingEnabled()
+            || !SubscriptionManager.isValidSubscriptionId(subId)
+            || !SubscriptionUtil.isSimHardwareVisible(mContext)
+            || Utils.isWifiOnly(mContext) -> CONDITIONALLY_UNAVAILABLE
+        !mContext.userManager.isAdminUser -> DISABLED_FOR_USER
+        else -> AVAILABLE
+    }
 
     override fun displayPreference(screen: PreferenceScreen) {
         super.displayPreference(screen)
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java
index 145a5c7..d964b9c 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragmentTest.java
@@ -93,8 +93,14 @@
     private static final String METADATA_STR =
             "BLUETOOTH:UUID:184F;BN:VGVzdA==;AT:1;AD:00A1A1A1A1A1;BI:1E240;BC:VGVzdENvZGU=;"
                     + "MD:BgNwVGVzdA==;AS:1;PI:A0;NS:1;BS:3;NB:2;SM:BQNUZXN0BARlbmc=;;";
+    private static final String METADATA_STR_NO_PASSWORD =
+            "BLUETOOTH:UUID:184F;BN:SG9ja2V5;AT:0;AD:AABBCC001122;BI:DE51E9;SQ:1;AS:1;PI:FFFF;"
+                    + "NS:1;BS:1;NB:1;;";
     private static final BluetoothLeBroadcastMetadata METADATA =
             BluetoothLeBroadcastMetadataExt.INSTANCE.convertToBroadcastMetadata(METADATA_STR);
+    private static final BluetoothLeBroadcastMetadata METADATA_NO_PASSWORD =
+            BluetoothLeBroadcastMetadataExt.INSTANCE.convertToBroadcastMetadata(
+                    METADATA_STR_NO_PASSWORD);
 
     private Fragment mParent;
     private FakeFeatureFactory mFeatureFactory;
@@ -291,6 +297,50 @@
     }
 
     @Test
+    public void onCreateDialog_noExtraConnectedDevice_hasMetadataNoPassword_showCancelButton() {
+        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+        AtomicBoolean isCancelBtnClicked = new AtomicBoolean(false);
+        AudioSharingDialogFragment.show(
+                mParent,
+                new ArrayList<>(),
+                METADATA_NO_PASSWORD,
+                new AudioSharingDialogFragment.DialogEventListener() {
+                    @Override
+                    public void onCancelClick() {
+                        isCancelBtnClicked.set(true);
+                    }
+                },
+                TEST_EVENT_DATA_LIST);
+        shadowMainLooper().idle();
+        AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(dialog).isNotNull();
+        ImageView image = dialog.findViewById(R.id.description_image);
+        assertThat(image).isNotNull();
+        TextView text = dialog.findViewById(R.id.description_text);
+        assertThat(text).isNotNull();
+        assertThat(METADATA_NO_PASSWORD).isNotNull();
+        assertThat(text.getText().toString()).isEqualTo(
+                mParent.getString(R.string.audio_sharing_dialog_qr_code_content_no_password,
+                        METADATA_NO_PASSWORD.getBroadcastName()));
+        TextView textBottom = dialog.findViewById(R.id.description_text_2);
+        assertThat(textBottom).isNotNull();
+        assertThat(textBottom.getText().toString()).isEqualTo(
+                mParent.getString(R.string.audio_sharing_dialog_pair_new_device_content));
+        Button cancelBtn = dialog.findViewById(R.id.negative_btn);
+        assertThat(cancelBtn).isNotNull();
+        cancelBtn.performClick();
+        shadowMainLooper().idle();
+
+        verify(mFeatureFactory.metricsFeatureProvider)
+                .action(
+                        any(Context.class),
+                        eq(SettingsEnums.ACTION_AUDIO_SHARING_DIALOG_NEGATIVE_BTN_CLICKED),
+                        eq(TEST_EVENT_DATA));
+        assertThat(isCancelBtnClicked.get()).isTrue();
+        assertThat(dialog.isShowing()).isFalse();
+    }
+
+    @Test
     public void onCreateDialog_flagOn_singleExtraConnectedDevice() {
         mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
         ArrayList<AudioSharingDeviceItem> list = new ArrayList<>();
diff --git a/tests/robotests/src/com/android/settings/development/DesktopExperiencePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/DesktopExperiencePreferenceControllerTest.java
index 6296626..388e9b2 100644
--- a/tests/robotests/src/com/android/settings/development/DesktopExperiencePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/DesktopExperiencePreferenceControllerTest.java
@@ -102,7 +102,8 @@
         // Set desktop mode available
         when(mResources.getBoolean(com.android.internal.R.bool.config_isDesktopModeSupported))
                 .thenReturn(true);
-        when(mResources.getBoolean(com.android.internal.R.bool.config_canInternalDisplayHostDesktops))
+        when(mResources
+                .getBoolean(com.android.internal.R.bool.config_canInternalDisplayHostDesktops))
                 .thenReturn(true);
         ShadowSystemProperties.override("persist.wm.debug.desktop_mode_enforce_device_restrictions",
                 "false");
diff --git a/tests/robotests/src/com/android/settings/development/DesktopModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/DesktopModePreferenceControllerTest.java
index 02aa872..9f718f9 100644
--- a/tests/robotests/src/com/android/settings/development/DesktopModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/DesktopModePreferenceControllerTest.java
@@ -104,7 +104,8 @@
         // Set desktop mode available
         when(mResources.getBoolean(R.bool.config_isDesktopModeSupported))
                 .thenReturn(true);
-        when(mResources.getBoolean(com.android.internal.R.bool.config_canInternalDisplayHostDesktops))
+        when(mResources
+                .getBoolean(com.android.internal.R.bool.config_canInternalDisplayHostDesktops))
                 .thenReturn(true);
         ShadowSystemProperties.override("persist.wm.debug.desktop_mode_enforce_device_restrictions",
                 "false");
diff --git a/tests/robotests/src/com/android/settings/development/DesktopModeSecondaryDisplayPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/DesktopModeSecondaryDisplayPreferenceControllerTest.java
index f3b96a4..2284d92 100644
--- a/tests/robotests/src/com/android/settings/development/DesktopModeSecondaryDisplayPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/DesktopModeSecondaryDisplayPreferenceControllerTest.java
@@ -97,7 +97,8 @@
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
         mController.displayPreference(mScreen);
         when(mResources.getBoolean(R.bool.config_isDesktopModeSupported)).thenReturn(false);
-        when(mResources.getBoolean(com.android.internal.R.bool.config_canInternalDisplayHostDesktops))
+        when(mResources
+            .getBoolean(com.android.internal.R.bool.config_canInternalDisplayHostDesktops))
             .thenReturn(false);
     }
 
diff --git a/tests/robotests/src/com/android/settings/development/FreeformWindowsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/FreeformWindowsPreferenceControllerTest.java
index cf32ae8..b4b0bcc 100644
--- a/tests/robotests/src/com/android/settings/development/FreeformWindowsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/FreeformWindowsPreferenceControllerTest.java
@@ -91,6 +91,7 @@
         doReturn(mFragmentManager).when(mActivity).getSupportFragmentManager();
         doReturn(mActivity).when(mFragment).getActivity();
         doReturn(true).when(mResources).getBoolean(R.bool.config_isDesktopModeSupported);
+        doReturn(true).when(mResources).getBoolean(R.bool.config_canInternalDisplayHostDesktops);
         mController = new FreeformWindowsPreferenceController(mContext, mFragment);
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageTimeControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageTimeControllerTest.java
index e8eb126..60ece9d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageTimeControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageTimeControllerTest.java
@@ -99,9 +99,9 @@
                 /* anomalyHintText= */ null);
 
         verifyOnePreferenceInvisible(mBackgroundTimePreference);
-        verify(mScreenTimePreference).setTimeTitle("Screen time");
-        verify(mScreenTimePreference).setTimeSummary("1 min");
-        verify(mScreenTimePreference, never()).setAnomalyHint(anyString());
+        verify(mScreenTimePreference).setTitle("Screen time");
+        verify(mScreenTimePreference).setSummary("1 min");
+        verify(mScreenTimePreference, never()).setHint(anyString());
     }
 
     @Test
@@ -117,9 +117,9 @@
                 /* anomalyHintText= */ null);
 
         verifyOnePreferenceInvisible(mScreenTimePreference);
-        verify(mBackgroundTimePreference).setTimeTitle("Background time");
-        verify(mBackgroundTimePreference).setTimeSummary("2 min");
-        verify(mBackgroundTimePreference, never()).setAnomalyHint(anyString());
+        verify(mBackgroundTimePreference).setTitle("Background time");
+        verify(mBackgroundTimePreference).setSummary("2 min");
+        verify(mBackgroundTimePreference, never()).setHint(anyString());
     }
 
     @Test
@@ -135,12 +135,12 @@
                 /* anomalyHintText= */ null);
 
         verifyAllPreferencesVisible(true);
-        verify(mScreenTimePreference).setTimeTitle("Screen time");
-        verify(mScreenTimePreference).setTimeSummary("1 min");
-        verify(mScreenTimePreference, never()).setAnomalyHint(anyString());
-        verify(mBackgroundTimePreference).setTimeTitle("Background time");
-        verify(mBackgroundTimePreference).setTimeSummary("2 min");
-        verify(mBackgroundTimePreference, never()).setAnomalyHint(anyString());
+        verify(mScreenTimePreference).setTitle("Screen time");
+        verify(mScreenTimePreference).setSummary("1 min");
+        verify(mScreenTimePreference, never()).setHint(anyString());
+        verify(mBackgroundTimePreference).setTitle("Background time");
+        verify(mBackgroundTimePreference).setSummary("2 min");
+        verify(mBackgroundTimePreference, never()).setHint(anyString());
         verify(mPowerUsageTimeCategory).setTitle("App usage for 12 am-2 am");
     }
 
@@ -173,8 +173,8 @@
                 /* anomalyHintText= */ null);
 
         verifyAllPreferencesVisible(true);
-        verify(mScreenTimePreference).setTimeSummary("1 min");
-        verify(mBackgroundTimePreference).setTimeSummary("Less than a minute");
+        verify(mScreenTimePreference).setSummary("1 min");
+        verify(mBackgroundTimePreference).setSummary("Less than a minute");
     }
 
     @Test
@@ -190,8 +190,8 @@
                 /* anomalyHintText= */ null);
 
         verifyAllPreferencesVisible(true);
-        verify(mScreenTimePreference).setTimeSummary("Less than a minute");
-        verify(mBackgroundTimePreference).setTimeSummary("2 min");
+        verify(mScreenTimePreference).setSummary("Less than a minute");
+        verify(mBackgroundTimePreference).setSummary("2 min");
     }
 
     @Test
@@ -207,8 +207,8 @@
                 /* anomalyHintText= */ null);
 
         verifyAllPreferencesVisible(true);
-        verify(mScreenTimePreference).setTimeSummary("Less than a minute");
-        verify(mBackgroundTimePreference).setTimeSummary("Less than a minute");
+        verify(mScreenTimePreference).setSummary("Less than a minute");
+        verify(mBackgroundTimePreference).setSummary("Less than a minute");
     }
 
     @Test
@@ -224,8 +224,8 @@
                 TEST_ANOMALY_HINT_TEXT);
 
         verifyAllPreferencesVisible(true);
-        verify(mScreenTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT);
-        verify(mBackgroundTimePreference, never()).setAnomalyHint(anyString());
+        verify(mScreenTimePreference).setHint(TEST_ANOMALY_HINT_TEXT);
+        verify(mBackgroundTimePreference, never()).setHint(anyString());
     }
 
     @Test
@@ -241,8 +241,8 @@
                 TEST_ANOMALY_HINT_TEXT);
 
         verifyAllPreferencesVisible(true);
-        verify(mScreenTimePreference, never()).setAnomalyHint(anyString());
-        verify(mBackgroundTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT);
+        verify(mScreenTimePreference, never()).setHint(anyString());
+        verify(mBackgroundTimePreference).setHint(TEST_ANOMALY_HINT_TEXT);
     }
 
     @Test
@@ -258,9 +258,9 @@
                 TEST_ANOMALY_HINT_TEXT);
 
         verifyAllPreferencesVisible(true);
-        verify(mScreenTimePreference).setTimeSummary("Less than a minute");
-        verify(mScreenTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT);
-        verify(mBackgroundTimePreference, never()).setAnomalyHint(anyString());
+        verify(mScreenTimePreference).setSummary("Less than a minute");
+        verify(mScreenTimePreference).setHint(TEST_ANOMALY_HINT_TEXT);
+        verify(mBackgroundTimePreference, never()).setHint(anyString());
     }
 
     private void verifySetPrefToVisible(Preference pref, boolean isVisible) {
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
index c4cbb98..7ad7c49 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
@@ -67,7 +67,7 @@
     @Mock private PreferenceGroup mRootPreferenceGroup;
     @Mock private Drawable mDrawable;
     @Mock private BatteryHistEntry mBatteryHistEntry;
-    @Mock private AnomalyAppItemPreference mAnomalyAppItemPreference;
+    @Mock private PowerGaugePreference mPowerGaugePreference;
 
     private Context mContext;
     private FakeFeatureFactory mFeatureFactory;
@@ -131,13 +131,13 @@
         BatteryDiffEntry.sResourceCache.put(
                 "fakeBatteryDiffEntryKey",
                 new BatteryEntry.NameAndIcon("fakeName", /* icon= */ null, /* iconId= */ 1));
-        doReturn(mAnomalyAppItemPreference).when(mRootPreferenceGroup).findPreference(PREF_KEY);
+        doReturn(mPowerGaugePreference).when(mRootPreferenceGroup).findPreference(PREF_KEY);
     }
 
     @Test
     public void onDestroy_clearPreferenceCacheAndPreferenceGroupRemoveAll() {
         // Ensures the testing environment is correct.
-        mBatteryUsageBreakdownController.mPreferenceCache.put(PREF_KEY, mAnomalyAppItemPreference);
+        mBatteryUsageBreakdownController.mPreferenceCache.put(PREF_KEY, mPowerGaugePreference);
         assertThat(mBatteryUsageBreakdownController.mPreferenceCache).hasSize(1);
 
         mBatteryUsageBreakdownController.onDestroy();
@@ -204,25 +204,25 @@
     @Test
     public void removeAndCacheAllUnusedPreferences_removePref_buildCacheAndRemoveAllPreference() {
         doReturn(1).when(mRootPreferenceGroup).getPreferenceCount();
-        doReturn(mAnomalyAppItemPreference).when(mRootPreferenceGroup).getPreference(0);
+        doReturn(mPowerGaugePreference).when(mRootPreferenceGroup).getPreference(0);
         doReturn(PREF_KEY2).when(mBatteryHistEntry).getKey();
-        doReturn(PREF_KEY).when(mAnomalyAppItemPreference).getKey();
+        doReturn(PREF_KEY).when(mPowerGaugePreference).getKey();
         // Ensures the testing data is correct.
         assertThat(mBatteryUsageBreakdownController.mPreferenceCache).isEmpty();
 
         mBatteryUsageBreakdownController.removeAndCacheAllUnusedPreferences();
 
         assertThat(mBatteryUsageBreakdownController.mPreferenceCache.get(PREF_KEY))
-                .isEqualTo(mAnomalyAppItemPreference);
-        verify(mRootPreferenceGroup).removePreference(mAnomalyAppItemPreference);
+                .isEqualTo(mPowerGaugePreference);
+        verify(mRootPreferenceGroup).removePreference(mPowerGaugePreference);
     }
 
     @Test
     public void removeAndCacheAllUnusedPreferences_keepPref_KeepAllPreference() {
         doReturn(1).when(mRootPreferenceGroup).getPreferenceCount();
-        doReturn(mAnomalyAppItemPreference).when(mRootPreferenceGroup).getPreference(0);
+        doReturn(mPowerGaugePreference).when(mRootPreferenceGroup).getPreference(0);
         doReturn(PREF_KEY).when(mBatteryDiffEntry).getKey();
-        doReturn(PREF_KEY).when(mAnomalyAppItemPreference).getKey();
+        doReturn(PREF_KEY).when(mPowerGaugePreference).getKey();
         // Ensures the testing data is correct.
         assertThat(mBatteryUsageBreakdownController.mPreferenceCache).isEmpty();
 
@@ -246,11 +246,11 @@
     @Test
     public void handlePreferenceTreeClick_forAppEntry_returnTrue() {
         mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY;
-        doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry();
+        doReturn(mBatteryDiffEntry).when(mPowerGaugePreference).getBatteryDiffEntry();
 
         assertThat(
                         mBatteryUsageBreakdownController.handlePreferenceTreeClick(
-                                mAnomalyAppItemPreference))
+                                mPowerGaugePreference))
                 .isTrue();
         verify(mMetricsFeatureProvider)
                 .action(
@@ -264,11 +264,11 @@
     @Test
     public void handlePreferenceTreeClick_forSystemEntry_returnTrue() {
         mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_UID_BATTERY;
-        doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry();
+        doReturn(mBatteryDiffEntry).when(mPowerGaugePreference).getBatteryDiffEntry();
 
         assertThat(
                         mBatteryUsageBreakdownController.handlePreferenceTreeClick(
-                                mAnomalyAppItemPreference))
+                                mPowerGaugePreference))
                 .isTrue();
         verify(mMetricsFeatureProvider)
                 .action(
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
index f64ef49..0bad0a0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
@@ -19,19 +19,20 @@
 
 import android.content.Context;
 import android.graphics.drawable.Drawable;
-import android.graphics.drawable.VectorDrawable;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.LinearLayout;
-import android.widget.TextView;
+import android.widget.Space;
 
 import androidx.preference.PreferenceViewHolder;
 
 import com.android.settings.R;
+import com.android.settingslib.widget.SettingsThemeHelper;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
@@ -48,17 +49,17 @@
     private View mWidgetView;
     private PreferenceViewHolder mPreferenceViewHolder;
 
+    @Mock Drawable mMockIcon;
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
         mContext = RuntimeEnvironment.application;
+        mPowerGaugePreference = new PowerGaugePreference(mContext);
         mRootView =
                 LayoutInflater.from(mContext)
-                        .inflate(
-                                com.android.settingslib.widget.preference.app.R.layout
-                                        .preference_app,
-                                null);
+                        .inflate(mPowerGaugePreference.getLayoutResource(), null);
         mWidgetView =
                 LayoutInflater.from(mContext).inflate(R.layout.preference_widget_summary, null);
         final LinearLayout widgetFrame = mRootView.findViewById(android.R.id.widget_frame);
@@ -66,31 +67,56 @@
         widgetFrame.addView(mWidgetView);
         mPreferenceViewHolder = PreferenceViewHolder.createInstanceForTests(mRootView);
 
-        mPowerGaugePreference = new PowerGaugePreference(mContext);
         assertThat(mPowerGaugePreference.getLayoutResource())
-                .isEqualTo(com.android.settingslib.widget.preference.app.R.layout.preference_app);
+                .isEqualTo(
+                        SettingsThemeHelper.isExpressiveTheme(mContext)
+                                ? R.layout.expressive_warning_frame_preference
+                                : R.layout.warning_frame_preference);
     }
 
     @Test
-    public void testOnBindViewHolder_showAnomaly_bindAnomalyIcon() {
-        mPowerGaugePreference.shouldShowAnomalyIcon(true);
+    public void testOnBindViewHolder_showHint_hasHintChip() {
+        mPowerGaugePreference.setHint("Hint Text");
+        mPowerGaugePreference.setIcon(mMockIcon);
         mPowerGaugePreference.onBindViewHolder(mPreferenceViewHolder);
 
-        TextView widgetSummary = (TextView) mPreferenceViewHolder.findViewById(R.id.widget_summary);
-        final Drawable[] drawables = widgetSummary.getCompoundDrawablesRelative();
+        final LinearLayout warningChipFrame =
+                (LinearLayout) mPreferenceViewHolder.findViewById(R.id.warning_chip_frame);
+        final Space warningPaddingPlaceHolder =
+                warningChipFrame.findViewById(R.id.warning_padding_placeholder);
 
-        assertThat(drawables[0]).isInstanceOf(VectorDrawable.class);
+        assertThat(warningChipFrame.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(warningPaddingPlaceHolder.getVisibility()).isEqualTo(View.VISIBLE);
     }
 
     @Test
-    public void testOnBindViewHolder_notShowAnomaly_bindAnomalyIcon() {
-        mPowerGaugePreference.shouldShowAnomalyIcon(false);
+    public void testOnBindViewHolder_emptyHintText_withoutHintChip() {
+        mPowerGaugePreference.setHint("");
+        mPowerGaugePreference.setIcon(mMockIcon);
         mPowerGaugePreference.onBindViewHolder(mPreferenceViewHolder);
 
-        TextView widgetSummary = (TextView) mPreferenceViewHolder.findViewById(R.id.widget_summary);
-        final Drawable[] drawables = widgetSummary.getCompoundDrawablesRelative();
+        final LinearLayout warningChipFrame =
+                (LinearLayout) mPreferenceViewHolder.findViewById(R.id.warning_chip_frame);
+        final Space warningPaddingPlaceholder =
+                warningChipFrame.findViewById(R.id.warning_padding_placeholder);
 
-        assertThat(drawables[0]).isNull();
+        assertThat(warningChipFrame.getVisibility()).isEqualTo(View.GONE);
+        assertThat(warningPaddingPlaceholder.getVisibility()).isEqualTo(View.VISIBLE);
+    }
+
+    @Test
+    public void testOnBindViewHolder_noAppIconWithHintText_hasChipWithoutPaddingPlaceholder() {
+        mPowerGaugePreference.setHint("Anomaly Hint Text");
+        mPowerGaugePreference.setIcon(null);
+        mPowerGaugePreference.onBindViewHolder(mPreferenceViewHolder);
+
+        final LinearLayout warningChipFrame =
+                (LinearLayout) mPreferenceViewHolder.findViewById(R.id.warning_chip_frame);
+        final Space warningPaddingPlaceHolder =
+                warningChipFrame.findViewById(R.id.warning_padding_placeholder);
+
+        assertThat(warningChipFrame.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(warningPaddingPlaceHolder.getVisibility()).isEqualTo(View.GONE);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java b/tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java
index 0d5a952..4272afe 100644
--- a/tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java
+++ b/tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java
@@ -57,6 +57,7 @@
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
+import androidx.preference.Preference;
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.internal.app.LocaleStore;
@@ -145,6 +146,8 @@
     private ImageView mDragHandle;
     @Mock
     private NotificationController mNotificationController;
+    @Mock
+    private Preference mAddLanguagePreference;
 
     @Rule
     public final CheckFlagsRule mCheckFlagsRule =
@@ -168,6 +171,8 @@
                 context.getSystemService(Context.USER_SERVICE));
         ReflectionHelpers.setField(mLocaleListEditor, "mAdapter", mAdapter);
         ReflectionHelpers.setField(mLocaleListEditor, "mAddLanguage", mAddLanguage);
+        ReflectionHelpers.setField(mLocaleListEditor, "mAddLanguagePreference",
+                mAddLanguagePreference);
         ReflectionHelpers.setField(mLocaleListEditor, "mFragmentManager", mFragmentManager);
         ReflectionHelpers.setField(mLocaleListEditor, "mMetricsFeatureProvider",
                 mMetricsFeatureProvider);
diff --git a/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt
index 8524ef4..ed40a8c 100644
--- a/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt
+++ b/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt
@@ -17,6 +17,7 @@
 package com.android.settings.deviceinfo
 
 import android.content.Context
+import android.os.UserManager
 import android.telephony.SubscriptionInfo
 import android.telephony.SubscriptionManager
 import android.telephony.TelephonyManager
@@ -25,30 +26,39 @@
 import androidx.preference.PreferenceManager
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.dx.mockito.inline.extended.ExtendedMockito
 import com.android.settings.R
+import com.android.settings.core.BasePreferenceController
+import com.android.settings.network.SubscriptionUtil
+import com.android.settingslib.Utils
 import com.google.common.truth.Truth.assertThat
+import org.junit.After
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
+import org.mockito.MockitoSession
 import org.mockito.kotlin.any
 import org.mockito.kotlin.doReturn
 import org.mockito.kotlin.mock
 import org.mockito.kotlin.spy
+import org.mockito.kotlin.stub
 import org.mockito.kotlin.verify
 import org.mockito.kotlin.whenever
+import org.mockito.quality.Strictness
 
 @RunWith(AndroidJUnit4::class)
 class PhoneNumberPreferenceControllerTest {
+    private lateinit var mockSession: MockitoSession
 
+    private val mockUserManager = mock<UserManager>()
     private val mockTelephonyManager = mock<TelephonyManager>()
     private val mockSubscriptionManager = mock<SubscriptionManager>()
 
     private val context: Context =
         spy(ApplicationProvider.getApplicationContext()) {
-            on { getSystemService(SubscriptionManager::class.java) } doReturn
-                mockSubscriptionManager
-
+            on { getSystemService(SubscriptionManager::class.java) } doReturn mockSubscriptionManager
             on { getSystemService(TelephonyManager::class.java) } doReturn mockTelephonyManager
+            on { getSystemService(UserManager::class.java) } doReturn mockUserManager
         }
 
     private val subscriptionInfo = mock<SubscriptionInfo>()
@@ -61,6 +71,20 @@
 
     @Before
     fun setup() {
+        mockSession =
+            ExtendedMockito.mockitoSession()
+                .mockStatic(SubscriptionUtil::class.java)
+                .mockStatic(Utils::class.java)
+                .strictness(Strictness.LENIENT)
+                .startMocking()
+
+        // By default, available
+        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true)
+        whenever(Utils.isWifiOnly(context)).thenReturn(false)
+        mockUserManager.stub {
+            on { isAdminUser } doReturn true
+        }
+
         preference.setKey(controller.preferenceKey)
         preference.isVisible = true
         preferenceScreen.addPreference(preference)
@@ -70,6 +94,11 @@
         doReturn(secondPreference).whenever(controller).createNewPreference(context)
     }
 
+    @After
+    fun teardown() {
+        mockSession.finishMocking()
+    }
+
     @Test
     fun displayPreference_multiSim_shouldAddSecondPreference() {
         whenever(mockTelephonyManager.phoneCount).thenReturn(2)
@@ -132,4 +161,37 @@
 
         verify(preference).summary = context.getString(R.string.device_info_not_available)
     }
+
+    @Test
+    fun getAvailabilityStatus_simHardwareVisible_userAdmin_notWifiOnly_displayed() {
+        // Use defaults from setup()
+        val availabilityStatus = controller.availabilityStatus
+        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE)
+    }
+
+    @Test
+    fun getAvailabilityStatus_notSimHardwareVisible_userAdmin_notWifiOnly_notDisplayed() {
+        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false)
+
+        val availabilityStatus = controller.availabilityStatus
+        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE)
+    }
+
+    @Test
+    fun getAvailabilityStatus_simHardwareVisible_notUserAdmin_notWifiOnly_notDisplayed() {
+        mockUserManager.stub {
+            on { isAdminUser } doReturn false
+        }
+
+        val availabilityStatus = controller.availabilityStatus
+        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.DISABLED_FOR_USER)
+    }
+
+    @Test
+    fun getAvailabilityStatus_simHardwareVisible_userAdmin_wifiOnly_notDisplayed() {
+        whenever(Utils.isWifiOnly(context)).thenReturn(true)
+
+        val availabilityStatus = controller.availabilityStatus
+        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE)
+    }
 }
diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt
index f56c0c4..a46b710 100644
--- a/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt
+++ b/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt
@@ -17,6 +17,7 @@
 package com.android.settings.network.telephony
 
 import android.content.Context
+import android.os.UserManager
 import androidx.lifecycle.testing.TestLifecycleOwner
 import androidx.preference.Preference
 import androidx.preference.PreferenceManager
@@ -26,6 +27,7 @@
 import com.android.settings.R
 import com.android.settings.core.BasePreferenceController
 import com.android.settings.network.SubscriptionUtil
+import com.android.settingslib.Utils
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.flow.flowOf
@@ -37,6 +39,7 @@
 import org.mockito.MockitoSession
 import org.mockito.kotlin.doReturn
 import org.mockito.kotlin.mock
+import org.mockito.kotlin.spy
 import org.mockito.kotlin.stub
 import org.mockito.kotlin.whenever
 import org.mockito.quality.Strictness
@@ -45,9 +48,14 @@
 class MobileNetworkPhoneNumberPreferenceControllerTest {
     private lateinit var mockSession: MockitoSession
 
-    private val context: Context = ApplicationProvider.getApplicationContext()
+    private val mockUserManager = mock<UserManager>()
     private val mockSubscriptionRepository = mock<SubscriptionRepository>()
 
+    private val context: Context =
+        spy(ApplicationProvider.getApplicationContext()) {
+            on { getSystemService(UserManager::class.java) } doReturn mockUserManager
+        }
+
     private val controller =
         MobileNetworkPhoneNumberPreferenceController(context, TEST_KEY, mockSubscriptionRepository)
     private val preference = Preference(context).apply { key = TEST_KEY }
@@ -58,9 +66,17 @@
         mockSession =
             ExtendedMockito.mockitoSession()
                 .mockStatic(SubscriptionUtil::class.java)
+                .mockStatic(Utils::class.java)
                 .strictness(Strictness.LENIENT)
                 .startMocking()
 
+        // By default, available
+        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true)
+        whenever(Utils.isWifiOnly(context)).thenReturn(false)
+        mockUserManager.stub {
+            on { isAdminUser } doReturn true
+        }
+
         preferenceScreen.addPreference(preference)
         controller.init(SUB_ID)
         controller.displayPreference(preferenceScreen)
@@ -73,7 +89,6 @@
 
     @Test
     fun onViewCreated_cannotGetPhoneNumber_displayUnknown() = runBlocking {
-        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true)
         mockSubscriptionRepository.stub {
             on { phoneNumberFlow(SUB_ID) } doReturn flowOf(null)
         }
@@ -86,7 +101,6 @@
 
     @Test
     fun onViewCreated_canGetPhoneNumber_displayPhoneNumber() = runBlocking {
-        whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true)
         mockSubscriptionRepository.stub {
             on { phoneNumberFlow(SUB_ID) } doReturn flowOf(PHONE_NUMBER)
         }
@@ -98,11 +112,35 @@
     }
 
     @Test
-    fun getAvailabilityStatus_notSimHardwareVisible() {
+    fun getAvailabilityStatus_simHardwareVisible_userAdmin_notWifiOnly_displayed() {
+        // Use defaults from setup()
+        val availabilityStatus = controller.availabilityStatus
+        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE)
+    }
+
+    @Test
+    fun getAvailabilityStatus_notSimHardwareVisible_userAdmin_notWifiOnly_notDisplayed() {
         whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false)
 
         val availabilityStatus = controller.availabilityStatus
+        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE)
+    }
 
+    @Test
+    fun getAvailabilityStatus_simHardwareVisible_notUserAdmin_notWifiOnly_notDisplayed() {
+        mockUserManager.stub {
+            on { isAdminUser } doReturn false
+        }
+
+        val availabilityStatus = controller.availabilityStatus
+        assertThat(availabilityStatus).isEqualTo(BasePreferenceController.DISABLED_FOR_USER)
+    }
+
+    @Test
+    fun getAvailabilityStatus_simHardwareVisible_userAdmin_wifiOnly_notDisplayed() {
+        whenever(Utils.isWifiOnly(context)).thenReturn(true)
+
+        val availabilityStatus = controller.availabilityStatus
         assertThat(availabilityStatus).isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE)
     }
 
