Merge "Show icons for allowed sounds" into main
diff --git a/Android.bp b/Android.bp
index 0fd4cb0..4c472c8 100644
--- a/Android.bp
+++ b/Android.bp
@@ -68,6 +68,9 @@
     static_libs: [
         // External dependencies
         "androidx.navigation_navigation-fragment-ktx",
+        "androidx.slice_slice-builders",
+        "androidx.slice_slice-core",
+        "androidx.slice_slice-view",
         "androidx.window_window-java",
         "gson",
         "guava",
diff --git a/aconfig/settings_globalintl_flag_declarations.aconfig b/aconfig/settings_globalintl_flag_declarations.aconfig
index 48f3a29..2f046d0 100644
--- a/aconfig/settings_globalintl_flag_declarations.aconfig
+++ b/aconfig/settings_globalintl_flag_declarations.aconfig
@@ -14,3 +14,10 @@
     description: "Feature flag for locale notification"
     bug: "301380610"
 }
+
+flag {
+    name: "accessibility_appearance_settings_backup_enabled"
+    namespace: "globalintl"
+    description: "Feature flag for B&R accessibility appearance settings"
+    bug: "341210043"
+}
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ecfc10a..ec2ff55 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4451,6 +4451,10 @@
     <string name="sticky_keys">Sticky keys</string>
     <!-- Summary text for the 'Sticky keys' preference sub-screen. [CHAR LIMIT=300] -->
     <string name="sticky_keys_summary">Press one key at a time for shortcuts instead of holding keys down together</string>
+    <!-- Title for a toggle switch for 'mouse' keys,  an accessibility setting that allows the mouse pointer to be controlled using certain keys on a physical keyboard if keyboard is connected. [CHAR LIMIT=35] -->
+    <string name="mouse_keys">Mouse keys</string>
+    <!-- Summary text for the accessibility setting 'Mouse keys' preference sub-screen. [CHAR LIMIT=100] -->
+    <string name="mouse_keys_summary">Use the physical keyboard to control the mouse.</string>
     <!-- Title for the button to trigger the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=35] -->
     <string name="keyboard_shortcuts_helper">Keyboard shortcuts</string>
     <!-- Summary text for the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=100] -->
@@ -8867,9 +8871,10 @@
     <string name="notif_listener_more_settings_desc">More settings are available inside this app</string>
 
     <!-- Title for Polite Notifications setting  [CHAR LIMIT=45]-->
-    <string name="notification_polite_title">Adaptive Notifications</string>
-    <string name="notification_polite_main_control_title">Use adaptive notifications</string>
-    <string name="notification_polite_description">When you get many notifications within a short time, your phone will lower volume and minimize pop-ups on screen for up to two minutes. Calls, alarms, and priority conversations still vibrate, make a sound, or show up on the screen, and all notifications are easy to find when you pull down from the top of the screen.</string>
+    <string name="notification_polite_title">Notification cooldown</string>
+    <string name="notification_polite_main_control_title">Use notification cooldown</string>
+    <string name="notification_polite_description">When you receive many notifications within a short time, your device will lower it\u2019s volume and minimize alerts for up to 2 minutes. Calls, alarms, and priority conversations aren\u2019t affected.
+        \n\nNotifications received during the cooldown can be found by pulling down from the top of the screen.</string>
     <string name="notification_polite_work">Apply to work profiles</string>
     <string name="notification_polite_work_summary">Apply to work profile apps</string>
 
diff --git a/res/xml/physical_keyboard_settings.xml b/res/xml/physical_keyboard_settings.xml
index dd2b709..2063618 100644
--- a/res/xml/physical_keyboard_settings.xml
+++ b/res/xml/physical_keyboard_settings.xml
@@ -53,5 +53,11 @@
             android:title="@string/slow_keys"
             android:defaultValue="false" />
 
+        <SwitchPreferenceCompat
+            android:key="accessibility_mouse_keys"
+            android:title="@string/mouse_keys"
+            android:summary="@string/mouse_keys_summary"
+            android:defaultValue="false" />
+
     </PreferenceCategory>
 </PreferenceScreen>
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index d746434..23f8ec7 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -154,7 +154,7 @@
     };
 
     @VisibleForTesting
-    final AccessibilitySettingsContentObserver mSettingsContentObserver;
+    AccessibilitySettingsContentObserver mSettingsContentObserver;
 
     private final Map<String, PreferenceCategory> mCategoryToPrefCategoryMap =
             new ArrayMap<>();
@@ -168,9 +168,14 @@
     private boolean mIsForeground = true;
 
     public AccessibilitySettings() {
+        mSettingsContentObserver = new AccessibilitySettingsContentObserver(mHandler);
+    }
+
+    private void initializeSettingsContentObserver() {
         // Observe changes to anything that the shortcut can toggle, so we can reflect updates
         final Collection<AccessibilityShortcutController.FrameworkFeatureInfo> features =
-                AccessibilityShortcutController.getFrameworkShortcutFeaturesMap().values();
+                AccessibilityShortcutController
+                        .getFrameworkShortcutFeaturesMap().values();
         final List<String> shortcutFeatureKeys = new ArrayList<>(features.size());
         for (AccessibilityShortcutController.FrameworkFeatureInfo feature : features) {
             final String key = feature.getSettingKey();
@@ -188,7 +193,6 @@
         shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_STICKY_KEYS);
         shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_SLOW_KEYS);
         shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_BOUNCE_KEYS);
-        mSettingsContentObserver = new AccessibilitySettingsContentObserver(mHandler);
         mSettingsContentObserver.registerKeysToObserverCallback(shortcutFeatureKeys,
                 key -> onContentChanged());
     }
@@ -213,6 +217,7 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
+        initializeSettingsContentObserver();
         initializeAllPreferences();
         updateAllPreferences();
         mNeedPreferencesUpdate = false;
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index 1ee980e..72a0f08 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -50,6 +50,7 @@
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.password.ChooseLockPattern;
 import com.android.settings.privatespace.PrivateSpaceSetupActivity;
+import com.android.settings.privatespace.delete.PrivateSpaceDeleteActivity;
 import com.android.settings.remoteauth.RemoteAuthActivity;
 import com.android.settings.remoteauth.RemoteAuthActivityInternal;
 
@@ -263,6 +264,9 @@
         addActivityFilter(activityFilters, RemoteAuthActivityInternal.class);
         addActivityFilter(activityFilters, ChooseLockPattern.class);
         addActivityFilter(activityFilters, PrivateSpaceSetupActivity.class);
+        if (android.multiuser.Flags.fixLargeDisplayPrivateSpaceSettings()) {
+            addActivityFilter(activityFilters, PrivateSpaceDeleteActivity.class);
+        }
         String action = mContext.getString(R.string.config_avatar_picker_action);
         addActivityFilter(activityFilters, new Intent(action));
 
diff --git a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
index caa7327..b9a0b93 100644
--- a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
+++ b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
@@ -65,7 +65,8 @@
     static final int CONFIRM_REQUEST = 2001;
     private static final int CHOOSE_LOCK_REQUEST = 2002;
     protected static final int ACTIVE_UNLOCK_REQUEST = 2003;
-    private static final int BIOMETRIC_AUTH_REQUEST = 2004;
+    @VisibleForTesting
+    static final int BIOMETRIC_AUTH_REQUEST = 2004;
 
     private static final String SAVE_STATE_CONFIRM_CREDETIAL = "confirm_credential";
     private static final String DO_NOT_FINISH_ACTIVITY = "do_not_finish_activity";
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
index 29292a1..bafec32 100644
--- a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
@@ -73,6 +73,7 @@
     private static final String ACCESSIBILITY_BOUNCE_KEYS = "accessibility_bounce_keys";
     private static final String ACCESSIBILITY_SLOW_KEYS = "accessibility_slow_keys";
     private static final String ACCESSIBILITY_STICKY_KEYS = "accessibility_sticky_keys";
+    private static final String ACCESSIBILITY_MOUSE_KEYS = "accessibility_mouse_keys";
     private static final String KEYBOARD_SHORTCUTS_HELPER = "keyboard_shortcuts_helper";
     private static final String MODIFIER_KEYS_SETTINGS = "modifier_keys_settings";
     private static final String EXTRA_AUTO_SELECTION = "auto_selection";
@@ -84,6 +85,8 @@
             Secure.ACCESSIBILITY_SLOW_KEYS);
     private static final Uri sAccessibilityStickyKeysUri = Secure.getUriFor(
             Secure.ACCESSIBILITY_STICKY_KEYS);
+    private static final Uri sAccessibilityMouseKeysUri = Secure.getUriFor(
+            Secure.ACCESSIBILITY_MOUSE_KEYS_ENABLED);
     public static final int BOUNCE_KEYS_THRESHOLD = 500;
     public static final int SLOW_KEYS_THRESHOLD = 500;
 
@@ -104,7 +107,8 @@
     private TwoStatePreference mAccessibilitySlowKeys = null;
     @Nullable
     private TwoStatePreference mAccessibilityStickyKeys = null;
-
+    @Nullable
+    private TwoStatePreference mAccessibilityMouseKeys = null;
 
     private Intent mIntentWaitingForResult;
     private boolean mSupportsFirmwareUpdate;
@@ -138,6 +142,8 @@
                 getContext().getString(R.string.slow_keys_summary, SLOW_KEYS_THRESHOLD));
         mAccessibilityStickyKeys = Objects.requireNonNull(
                 mKeyboardA11yCategory.findPreference(ACCESSIBILITY_STICKY_KEYS));
+        mAccessibilityMouseKeys = Objects.requireNonNull(
+                mKeyboardA11yCategory.findPreference(ACCESSIBILITY_MOUSE_KEYS));
 
         FeatureFactory featureFactory = FeatureFactory.getFeatureFactory();
         mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider();
@@ -160,6 +166,9 @@
         if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled()) {
             mKeyboardA11yCategory.removePreference(mAccessibilityStickyKeys);
         }
+        if (!InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
+            mKeyboardA11yCategory.removePreference(mAccessibilityMouseKeys);
+        }
         InputDeviceIdentifier inputDeviceIdentifier = activity.getIntent().getParcelableExtra(
                 KeyboardLayoutPickerFragment.EXTRA_INPUT_DEVICE_IDENTIFIER,
                 InputDeviceIdentifier.class);
@@ -208,6 +217,8 @@
                 mAccessibilitySlowKeysSwitchPreferenceChangeListener);
         Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener(
                 mAccessibilityStickyKeysSwitchPreferenceChangeListener);
+        Objects.requireNonNull(mAccessibilityMouseKeys).setOnPreferenceChangeListener(
+                mAccessibilityMouseKeysSwitchPreferenceChangeListener);
         registerSettingsObserver();
     }
 
@@ -219,6 +230,7 @@
         Objects.requireNonNull(mAccessibilityBounceKeys).setOnPreferenceChangeListener(null);
         Objects.requireNonNull(mAccessibilitySlowKeys).setOnPreferenceChangeListener(null);
         Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener(null);
+        Objects.requireNonNull(mAccessibilityMouseKeys).setOnPreferenceChangeListener(null);
         unregisterSettingsObserver();
     }
 
@@ -309,12 +321,14 @@
 
         if (InputSettings.isAccessibilityBounceKeysFeatureEnabled()
                 || InputSettings.isAccessibilityStickyKeysFeatureEnabled()
-                || InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) {
+                || InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()
+                || InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
             Objects.requireNonNull(mKeyboardA11yCategory).setOrder(2);
             preferenceScreen.addPreference(mKeyboardA11yCategory);
             updateAccessibilityBounceKeysSwitch();
             updateAccessibilitySlowKeysSwitch();
             updateAccessibilityStickyKeysSwitch();
+            updateAccessibilityMouseKeysSwitch();
         }
     }
 
@@ -365,9 +379,17 @@
                     mContentObserver,
                     UserHandle.myUserId());
         }
+        if (InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
+            contentResolver.registerContentObserver(
+                    sAccessibilityMouseKeysUri,
+                    false,
+                    mContentObserver,
+                    UserHandle.myUserId());
+        }
         updateAccessibilityBounceKeysSwitch();
         updateAccessibilitySlowKeysSwitch();
         updateAccessibilityStickyKeysSwitch();
+        updateAccessibilityMouseKeysSwitch();
     }
 
     private void unregisterSettingsObserver() {
@@ -398,6 +420,14 @@
                 InputSettings.isAccessibilityStickyKeysEnabled(getContext()));
     }
 
+    private void updateAccessibilityMouseKeysSwitch() {
+        if (!InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
+            return;
+        }
+        Objects.requireNonNull(mAccessibilityMouseKeys).setChecked(
+                InputSettings.isAccessibilityMouseKeysEnabled(getContext()));
+    }
+
     private void toggleKeyboardShortcutsMenu() {
         getActivity().requestShowKeyboardShortcuts();
     }
@@ -422,6 +452,12 @@
                 return true;
             };
 
+    private final OnPreferenceChangeListener
+            mAccessibilityMouseKeysSwitchPreferenceChangeListener = (preference, newValue) -> {
+                InputSettings.setAccessibilityMouseKeysEnabled(getContext(), (Boolean) newValue);
+                return true;
+            };
+
     private final ContentObserver mContentObserver = new ContentObserver(new Handler(true)) {
         @Override
         public void onChange(boolean selfChange, Uri uri) {
@@ -431,6 +467,8 @@
                 updateAccessibilitySlowKeysSwitch();
             } else if (sAccessibilityStickyKeysUri.equals(uri)) {
                 updateAccessibilityStickyKeysSwitch();
+            } else if (sAccessibilityMouseKeysUri.equals(uri)) {
+                updateAccessibilityMouseKeysSwitch();
             }
         }
     };
diff --git a/src/com/android/settings/network/MobileNetworkRepository.java b/src/com/android/settings/network/MobileNetworkRepository.java
index 9901929..f5763eb 100644
--- a/src/com/android/settings/network/MobileNetworkRepository.java
+++ b/src/com/android/settings/network/MobileNetworkRepository.java
@@ -29,7 +29,6 @@
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyManager;
-import android.telephony.UiccCardInfo;
 import android.telephony.UiccPortInfo;
 import android.telephony.UiccSlotInfo;
 import android.util.ArrayMap;
@@ -86,12 +85,6 @@
     private AirplaneModeObserver mAirplaneModeObserver;
     private MetricsFeatureProvider mMetricsFeatureProvider;
     private int mPhysicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
-    private int mLogicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
-    private int mCardState = UiccSlotInfo.CARD_STATE_INFO_ABSENT;
-    private int mPortIndex = TelephonyManager.INVALID_PORT_INDEX;
-    private int mCardId = TelephonyManager.UNINITIALIZED_CARD_ID;
-    private boolean mIsEuicc = false;
-    private boolean mIsRemovable = false;
     private boolean mIsActive = false;
     private Map<Integer, SubscriptionInfo> mSubscriptionInfoMap = new ArrayMap<>();
     private Map<Integer, TelephonyManager> mTelephonyManagerMap = new HashMap<>();
@@ -301,19 +294,13 @@
             UiccSlotInfo curSlotInfo = uiccSlotInfos[i];
             if (curSlotInfo != null && curSlotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT) {
                 final int index = i;
-                mIsEuicc = curSlotInfo.getIsEuicc();
-                mCardState = curSlotInfo.getCardStateInfo();
-                mIsRemovable = curSlotInfo.isRemovable();
-                mCardId = subInfo.getCardId();
 
                 Collection<UiccPortInfo> uiccPortInfos = curSlotInfo.getPorts();
                 uiccPortInfos.forEach(portInfo -> {
                     if (portInfo.getPortIndex() == subInfo.getPortIndex()
                             && portInfo.getLogicalSlotIndex() == subInfo.getSimSlotIndex()) {
                         mPhysicalSlotIndex = index;
-                        mLogicalSlotIndex = portInfo.getLogicalSlotIndex();
                         mIsActive = portInfo.isActive();
-                        mPortIndex = portInfo.getPortIndex();
                     } else if (DEBUG) {
                         Log.d(TAG, "Can not get port index and physicalSlotIndex for subId "
                                 + subInfo.getSubscriptionId());
@@ -433,7 +420,7 @@
                 mMobileNetworkDatabase.insertSubsInfo(subInfoEntity);
                 mMetricsFeatureProvider.action(mContext,
                         SettingsEnums.ACTION_MOBILE_NETWORK_DB_INSERT_SUB_INFO, subId);
-                insertUiccInfo(subId, telephonyManager);
+                insertUiccInfo(subId);
                 insertMobileNetworkInfo(subId, telephonyManager);
             }
         } else if (DEBUG) {
@@ -488,8 +475,8 @@
         }
     }
 
-    private void insertUiccInfo(int subId, TelephonyManager telephonyManager) {
-        UiccInfoEntity uiccInfoEntity = convertToUiccInfoEntity(subId, telephonyManager);
+    private void insertUiccInfo(int subId) {
+        UiccInfoEntity uiccInfoEntity = convertToUiccInfoEntity(subId);
         if (DEBUG) {
             Log.d(TAG, "uiccInfoEntity = " + uiccInfoEntity);
         }
@@ -532,27 +519,8 @@
         );
     }
 
-    private UiccInfoEntity convertToUiccInfoEntity(int subId, TelephonyManager telephonyManager) {
-        return new UiccInfoEntity(String.valueOf(subId), String.valueOf(mPhysicalSlotIndex),
-                mLogicalSlotIndex, mCardId, mIsEuicc,
-                isMultipleEnabledProfilesSupported(telephonyManager), mCardState, mIsRemovable,
-                mIsActive, mPortIndex
-        );
-    }
-
-    private boolean isMultipleEnabledProfilesSupported(TelephonyManager telephonyManager) {
-        if (telephonyManager == null) {
-            Log.d(TAG, "TelephonyManager is null");
-            return false;
-        }
-
-        List<UiccCardInfo> cardInfos = telephonyManager.getUiccCardsInfo();
-        if (cardInfos == null) {
-            Log.d(TAG, "UICC card info list is empty.");
-            return false;
-        }
-        return cardInfos.stream().anyMatch(
-                cardInfo -> cardInfo.isMultipleEnabledProfilesSupported());
+    private UiccInfoEntity convertToUiccInfoEntity(int subId) {
+        return new UiccInfoEntity(String.valueOf(subId), mIsActive);
     }
 
     @Override
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 4c18309..915fe17 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -160,7 +160,8 @@
         static final int CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST = 103;
         @VisibleForTesting
         static final int SKIP_FINGERPRINT_REQUEST = 104;
-        private static final int BIOMETRIC_AUTH_REQUEST = 105;
+        @VisibleForTesting
+        static final int BIOMETRIC_AUTH_REQUEST = 105;
 
         private LockPatternUtils mLockPatternUtils;
         private DevicePolicyManager mDpm;
diff --git a/src/com/android/settings/sim/smartForwarding/SmartForwardingFragment.java b/src/com/android/settings/sim/smartForwarding/SmartForwardingFragment.java
index a95eb38..f847147 100644
--- a/src/com/android/settings/sim/smartForwarding/SmartForwardingFragment.java
+++ b/src/com/android/settings/sim/smartForwarding/SmartForwardingFragment.java
@@ -48,8 +48,7 @@
     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
         setPreferencesFromResource(R.xml.smart_forwarding_switch, rootKey);
 
-        String title = getResources().getString(R.string.smart_forwarding_title);
-        getActivity().getActionBar().setTitle(title);
+        getActivity().setTitle(R.string.smart_forwarding_title);
 
         TwoStatePreference smartForwardingSwitch = findPreference(KEY_SMART_FORWARDING_SWITCH);
         if (turnOffSwitch) {
diff --git a/src/com/android/settings/spa/core/instrumentation/SpaLogProvider.kt b/src/com/android/settings/spa/core/instrumentation/SpaLogProvider.kt
index 8659bf5..4377ccc 100644
--- a/src/com/android/settings/spa/core/instrumentation/SpaLogProvider.kt
+++ b/src/com/android/settings/spa/core/instrumentation/SpaLogProvider.kt
@@ -28,7 +28,6 @@
 import com.android.settingslib.spa.framework.util.SESSION_BROWSE
 import com.android.settingslib.spa.framework.util.SESSION_EXTERNAL
 import com.android.settingslib.spa.framework.util.SESSION_SEARCH
-import com.android.settingslib.spa.framework.util.SESSION_SLICE
 import com.android.settingslib.spa.framework.util.SESSION_UNKNOWN
 
 /**
@@ -74,7 +73,6 @@
         return when(sessionSource) {
             SESSION_BROWSE -> SettingsEnums.SESSION_BROWSE
             SESSION_SEARCH -> SettingsEnums.SESSION_SEARCH
-            SESSION_SLICE -> SettingsEnums.SESSION_SLICE_TYPE
             SESSION_EXTERNAL -> SettingsEnums.SESSION_EXTERNAL
             else -> SettingsEnums.SESSION_UNKNOWN
         }
diff --git a/src/com/android/settings/wifi/WifiConfigInfo.java b/src/com/android/settings/wifi/WifiConfigInfo.java
index 0de3063..16a4446 100644
--- a/src/com/android/settings/wifi/WifiConfigInfo.java
+++ b/src/com/android/settings/wifi/WifiConfigInfo.java
@@ -37,6 +37,7 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        WifiUtils.setupEdgeToEdge(this);
 
         mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
         setContentView(R.layout.wifi_config_info);
diff --git a/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceController.java b/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceController.java
deleted file mode 100644
index ae44b93..0000000
--- a/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceController.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2017 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.wifi;
-
-import android.content.Context;
-
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.widget.GenericSwitchController;
-import com.android.settings.widget.SummaryUpdater;
-import com.android.settingslib.PrimarySwitchPreference;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnPause;
-import com.android.settingslib.core.lifecycle.events.OnResume;
-import com.android.settingslib.core.lifecycle.events.OnStart;
-import com.android.settingslib.core.lifecycle.events.OnStop;
-
-/**
- * PreferenceController to update the wifi state.
- */
-// TODO(b/167474581): Should clean up this controller when Provider Model finished.
-public class WifiPrimarySwitchPreferenceController extends AbstractPreferenceController
-        implements PreferenceControllerMixin, SummaryUpdater.OnSummaryChangeListener,
-        LifecycleObserver, OnResume, OnPause, OnStart, OnStop {
-    //TODO(b/151133650): Replace AbstractPreferenceController with BasePreferenceController.
-
-    public static final String KEY_TOGGLE_WIFI = "main_toggle_wifi";
-
-    private PrimarySwitchPreference mWifiPreference;
-    private WifiEnabler mWifiEnabler;
-    private final WifiSummaryUpdater mSummaryHelper;
-    private final MetricsFeatureProvider mMetricsFeatureProvider;
-
-    public WifiPrimarySwitchPreferenceController(Context context,
-            MetricsFeatureProvider metricsFeatureProvider) {
-        super(context);
-        mMetricsFeatureProvider = metricsFeatureProvider;
-        mSummaryHelper = new WifiSummaryUpdater(mContext, this);
-    }
-
-    @Override
-    public void displayPreference(PreferenceScreen screen) {
-        super.displayPreference(screen);
-        mWifiPreference = screen.findPreference(KEY_TOGGLE_WIFI);
-    }
-
-    @Override
-    public boolean isAvailable() {
-        return mContext.getResources().getBoolean(R.bool.config_show_wifi_settings);
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return KEY_TOGGLE_WIFI;
-    }
-
-    @Override
-    public void onResume() {
-        mSummaryHelper.register(true);
-        if (mWifiEnabler != null) {
-            mWifiEnabler.resume(mContext);
-        }
-    }
-
-    @Override
-    public void onPause() {
-        if (mWifiEnabler != null) {
-            mWifiEnabler.pause();
-        }
-        mSummaryHelper.register(false);
-    }
-
-    @Override
-    public void onStart() {
-        mWifiEnabler = new WifiEnabler(mContext, new GenericSwitchController(mWifiPreference),
-                mMetricsFeatureProvider);
-    }
-
-    @Override
-    public void onStop() {
-        if (mWifiEnabler != null) {
-            mWifiEnabler.teardownSwitchController();
-        }
-    }
-
-    @Override
-    public void onSummaryChanged(String summary) {
-        if (mWifiPreference != null) {
-            mWifiPreference.setSummary(summary);
-        }
-    }
-
-}
diff --git a/src/com/android/settings/wifi/WifiStatusTest.java b/src/com/android/settings/wifi/WifiStatusTest.java
index b4f3ab6..b9b1d70 100644
--- a/src/com/android/settings/wifi/WifiStatusTest.java
+++ b/src/com/android/settings/wifi/WifiStatusTest.java
@@ -115,6 +115,7 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        WifiUtils.setupEdgeToEdge(this);
 
         mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
 
diff --git a/src/com/android/settings/wifi/WifiUtils.java b/src/com/android/settings/wifi/WifiUtils.java
index 68d8beb..e307bcf 100644
--- a/src/com/android/settings/wifi/WifiUtils.java
+++ b/src/com/android/settings/wifi/WifiUtils.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.wifi;
 
+import android.app.ActionBar;
+import android.app.Activity;
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -32,8 +34,13 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.Log;
+import android.util.TypedValue;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
 
 import com.android.settings.R;
 import com.android.settings.Utils;
@@ -308,4 +315,34 @@
     public static void setCanShowWifiHotspotCached(Boolean cached) {
         sCanShowWifiHotspotCached = cached;
     }
+
+    /**
+     * Enable new edge to edge feature.
+     *
+     * @param activity the Activity need to setup the edge to edge feature.
+     */
+    public static void setupEdgeToEdge(@NonNull Activity activity) {
+        final ActionBar actionBar = activity.getActionBar();
+        if (actionBar == null) {
+            return;
+        }
+
+        final TypedValue typedValue = new TypedValue();
+        if (activity.getTheme().resolveAttribute(
+                com.android.internal.R.attr.actionBarSize, typedValue, true)) {
+            ViewCompat.setOnApplyWindowInsetsListener(activity.findViewById(android.R.id.content),
+                    (v, windowInsets) -> {
+                        Insets insets = windowInsets.getInsets(
+                                WindowInsetsCompat.Type.systemBars() |
+                                WindowInsetsCompat.Type.ime());
+
+                        // Apply the insets paddings to the view.
+                        v.setPadding(insets.left, insets.top, insets.right, insets.bottom);
+
+                        // Return CONSUMED if you don't want the window insets to keep being
+                        // passed down to descendant views.
+                        return WindowInsetsCompat.CONSUMED;
+                    });
+        }
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
index 8593860..a775731 100644
--- a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
@@ -24,7 +24,9 @@
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
@@ -36,9 +38,12 @@
 import android.content.Context;
 import android.content.Intent;
 import android.hardware.biometrics.BiometricManager;
+import android.hardware.biometrics.Flags;
 import android.hardware.face.FaceManager;
 import android.hardware.fingerprint.FingerprintManager;
 import android.os.Bundle;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
 import android.util.AndroidRuntimeException;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -57,6 +62,7 @@
 import com.android.settings.biometrics.face.FaceStatusPreferenceController;
 import com.android.settings.biometrics.fingerprint.FingerprintStatusPreferenceController;
 import com.android.settings.password.ChooseLockSettingsHelper;
+import com.android.settings.password.ConfirmDeviceCredentialActivity;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.shadow.ShadowFragment;
 import com.android.settings.testutils.shadow.ShadowSettingsPreferenceFragment;
@@ -92,6 +98,8 @@
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+    @Rule
+    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
     @Captor
     private ArgumentCaptor<Preference> mPreferenceCaptor;
     @Mock
@@ -169,6 +177,26 @@
     }
 
     @Test
+    @EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
+    public void testLaunchBiometricPrompt_onCreateFragment() {
+        ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
+        doNothing().when(mFragment).startActivityForResult(any(), anyInt());
+        when(mBiometricManager.canAuthenticate(
+                BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+                .thenReturn(BiometricManager.BIOMETRIC_SUCCESS);
+
+        mFragment.onAttach(mContext);
+        mFragment.onCreate(null);
+
+        verify(mFragment).startActivityForResult(intentArgumentCaptor.capture(),
+                eq(BiometricsSettingsBase.BIOMETRIC_AUTH_REQUEST));
+
+        Intent intent = intentArgumentCaptor.getValue();
+        assertThat(intent.getComponent().getClassName()).isEqualTo(
+                ConfirmDeviceCredentialActivity.class.getName());
+    }
+
+    @Test
     public void testClickFingerprintUnlockWithValidGkPwHandle() {
         doAnswer(invocation -> {
             final FingerprintManager.GenerateChallengeCallback callback =
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
index 58e7e2d..4ef3223 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
@@ -19,6 +19,7 @@
 import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_POWER_BUTTON;
 import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_OPTICAL;
 
+import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST;
 import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment;
 import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.CHOOSE_LOCK_GENERIC_REQUEST;
 import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.KEY_REQUIRE_SCREEN_ON_TO_AUTH;
@@ -34,11 +35,14 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.UserInfo;
+import android.hardware.biometrics.BiometricManager;
 import android.hardware.biometrics.ComponentInfoInternal;
+import android.hardware.biometrics.Flags;
 import android.hardware.biometrics.SensorProperties;
 import android.hardware.fingerprint.FingerprintManager;
 import android.hardware.fingerprint.FingerprintSensorProperties;
@@ -46,6 +50,8 @@
 import android.os.Bundle;
 import android.os.CancellationSignal;
 import android.os.UserHandle;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
 import android.provider.Settings;
 import android.view.LayoutInflater;
 import android.view.ViewGroup;
@@ -56,6 +62,7 @@
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.password.ChooseLockSettingsHelper;
+import com.android.settings.password.ConfirmDeviceCredentialActivity;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.shadow.ShadowFragment;
 import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
@@ -85,6 +92,11 @@
 @Config(shadows = {ShadowSettingsPreferenceFragment.class, ShadowUtils.class, ShadowFragment.class,
         ShadowUserManager.class, ShadowLockPatternUtils.class})
 public class FingerprintSettingsFragmentTest {
+    @Rule
+    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+    @Rule
+    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+
     private static final int PRIMARY_USER_ID = 0;
     private static final int GUEST_USER_ID = 10;
 
@@ -92,12 +104,12 @@
     private Context mContext;
     private FragmentActivity mActivity;
 
-    @Rule
-    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     @Mock
     private FingerprintManager mFingerprintManager;
     @Mock
     private FragmentTransaction mFragmentTransaction;
+    @Mock
+    private BiometricManager mBiometricManager;
 
     @Captor
     private ArgumentCaptor<CancellationSignal> mCancellationSignalArgumentCaptor =
@@ -117,8 +129,11 @@
         mContext = spy(ApplicationProvider.getApplicationContext());
         mFragment = spy(new FingerprintSettingsFragment());
         doReturn(mContext).when(mFragment).getContext();
-
+        doReturn(mBiometricManager).when(mContext).getSystemService(BiometricManager.class);
         doReturn(true).when(mFingerprintManager).isHardwareDetected();
+        when(mBiometricManager.canAuthenticate(
+                BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+                .thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
     }
 
     @After
@@ -139,6 +154,25 @@
                 false)).isTrue();
     }
 
+    @Test
+    @EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
+    public void testLaunchBiometricPromptForFingerprint() {
+        when(mBiometricManager.canAuthenticate(
+                BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+                .thenReturn(BiometricManager.BIOMETRIC_SUCCESS);
+
+        setUpFragment(false);
+        ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(
+                Intent.class);
+
+        verify(mFragment).startActivityForResult(intentArgumentCaptor.capture(),
+                eq(BIOMETRIC_AUTH_REQUEST));
+
+        Intent intent = intentArgumentCaptor.getValue();
+        assertThat(intent.getComponent().getClassName()).isEqualTo(
+                ConfirmDeviceCredentialActivity.class.getName());
+    }
+
     // Test the case when FingerprintAuthenticateSidecar receives an error callback from the
     // framework or from another authentication client. The cancellation signal should not be set
     // to null because there may exist a running authentication client.
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
index e7e0b92..204bfe5 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
@@ -50,9 +50,13 @@
 import android.app.admin.PasswordPolicy;
 import android.content.Context;
 import android.content.Intent;
+import android.hardware.biometrics.BiometricManager;
+import android.hardware.biometrics.Flags;
 import android.hardware.face.FaceManager;
 import android.hardware.fingerprint.FingerprintManager;
 import android.os.Bundle;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
 import android.provider.Settings.Global;
 import android.widget.TextView;
 
@@ -86,9 +90,13 @@
 import org.mockito.junit.MockitoRule;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.Shadows;
 import org.robolectric.android.controller.ActivityController;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowActivity;
 import org.robolectric.shadows.ShadowApplication;
+import org.robolectric.shadows.ShadowBiometricManager;
 
 @RunWith(RobolectricTestRunner.class)
 @Config(
@@ -98,18 +106,23 @@
                 ShadowStorageManager.class,
                 ShadowUserManager.class,
                 ShadowUtils.class,
-                ShadowInteractionJankMonitor.class
+                ShadowInteractionJankMonitor.class,
+                ShadowBiometricManager.class
         })
 @Ignore("b/179136903: Tests failed with collapsing toolbar, plan to figure out root cause later.")
 public class ChooseLockGenericTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+    @Rule
+    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
 
     private ActivityController<ChooseLockGeneric> mActivityController;
     private FakeFeatureFactory mFakeFeatureFactory;
     private ChooseLockGenericFragment mFragment;
     private ChooseLockGeneric mActivity;
+    private ShadowBiometricManager mShadowBiometricManager;
+    private ShadowActivity mShadowActivity;
     @Mock
     private FingerprintManager mFingerprintManager;
     @Mock
@@ -125,6 +138,7 @@
                 .postCreate(null)
                 .resume()
                 .get();
+        mShadowActivity = Shadows.shadowOf(mActivity);
 
         Global.putInt(application.getContentResolver(), Global.DEVICE_PROVISIONED, 1);
         mFragment = new ChooseLockGenericFragment();
@@ -295,6 +309,21 @@
     }
 
     @Test
+    @EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
+    public void onActivityResult_requestcode100_shouldLaunchBiometricPrompt() {
+        initActivity(null);
+        mShadowBiometricManager.setCanAuthenticate(true);
+
+        mFragment.onActivityResult(
+                ChooseLockGenericFragment.CONFIRM_EXISTING_REQUEST,
+                Activity.RESULT_OK, null /* data */);
+
+        assertThat(mActivity.isFinishing()).isFalse();
+        assertThat(mShadowActivity.getNextStartedActivity().getComponent().getClassName())
+                .isEqualTo(ConfirmDeviceCredentialActivity.class.getName());
+    }
+
+    @Test
     public void onActivityResult_requestcode102_shouldFinish() {
         initActivity(null);
 
@@ -337,6 +366,17 @@
     }
 
     @Test
+    public void onActivityResult_requestcode105_shouldNotFinish() {
+        initActivity(null);
+
+        mFragment.onActivityResult(
+                ChooseLockGenericFragment.BIOMETRIC_AUTH_REQUEST, Activity.RESULT_OK,
+                null /* data */);
+
+        assertThat(mActivity.isFinishing()).isFalse();
+    }
+
+    @Test
     public void securedScreenLock_notChangingConfig_notWaitForConfirmation_onStopFinishSelf() {
         Intent intent = new Intent().putExtra(
                 LockPatternUtils.PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_NUMERIC);
@@ -676,6 +716,13 @@
         mActivity = Robolectric.buildActivity(ChooseLockGeneric.InternalActivity.class, intent)
                 .create().start().postCreate(null).resume().get();
         mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commitNow();
+        mShadowBiometricManager = Shadow.extract(mFragment.getContext().getSystemService(
+                BiometricManager.class));
+        //TODO(b/352603684): Should be Authenticators.MANDATORY_BIOMETRICS,
+        // but it is not supported by ShadowBiometricManager
+        mShadowBiometricManager.setAuthenticatorType(
+                BiometricManager.Authenticators.BIOMETRIC_STRONG);
+        mShadowBiometricManager.setCanAuthenticate(false);
     }
 
     private static String capitalize(final String input) {
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceControllerTest.java
deleted file mode 100644
index 9204d43..0000000
--- a/tests/robotests/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceControllerTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2017 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.wifi;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.ConnectivityManager;
-import android.net.NetworkRequest;
-import android.net.NetworkScoreManager;
-import android.net.wifi.WifiManager;
-import android.os.Handler;
-
-import androidx.preference.Preference.OnPreferenceChangeListener;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
-import com.android.settingslib.PrimarySwitchPreference;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-
-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;
-import org.robolectric.annotation.Config;
-
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowRestrictedLockUtilsInternal.class)
-public class WifiPrimarySwitchPreferenceControllerTest {
-
-    @Mock
-    private Intent mIntentReceiver;
-    @Mock
-    private WifiManager mWifiManager;
-    @Mock
-    private PreferenceScreen mScreen;
-    @Mock
-    private PrimarySwitchPreference mPreference;
-    @Mock
-    private ConnectivityManager mConnectivityManager;
-    @Mock
-    private NetworkScoreManager mNetworkScoreManager;
-
-    private Context mContext;
-    private WifiPrimarySwitchPreferenceController mController;
-    private MetricsFeatureProvider mMetricsFeatureProvider;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mMetricsFeatureProvider = FakeFeatureFactory.setupForTest().getMetricsFeatureProvider();
-        mContext = spy(RuntimeEnvironment.application.getApplicationContext());
-        doReturn(mIntentReceiver).when(mContext)
-                .registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class), anyInt());
-        doNothing().when(mContext).unregisterReceiver(any(BroadcastReceiver.class));
-        when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager);
-        when(mContext.getSystemService(NetworkScoreManager.class)).thenReturn(mNetworkScoreManager);
-        mController = new WifiPrimarySwitchPreferenceController(mContext, mMetricsFeatureProvider);
-        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
-        when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
-        when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED);
-    }
-
-    @Test
-    public void testWifiPrimarySwitch_byDefault_shouldBeShown() {
-        assertThat(mController.isAvailable()).isTrue();
-    }
-
-    @Test
-    @Config(qualifiers = "mcc999")
-    public void testWifiPrimarySwitch_ifDisabled_shouldNotBeShown() {
-        assertThat(mController.isAvailable()).isFalse();
-    }
-
-    @Test
-    public void onResume_shouldRegisterCallback() {
-        mController.onResume();
-
-        verify(mContext).registerReceiver(
-                any(BroadcastReceiver.class), any(IntentFilter.class), anyInt());
-        verify(mConnectivityManager).registerNetworkCallback(
-                any(NetworkRequest.class),
-                any(ConnectivityManager.NetworkCallback.class),
-                any(Handler.class));
-    }
-
-    @Test
-    public void onPause_shouldUnregisterCallback() {
-        mController.onResume();
-        mController.onPause();
-
-        verify(mContext).unregisterReceiver(any(BroadcastReceiver.class));
-        verify(mConnectivityManager, times(2)).unregisterNetworkCallback(
-                any(ConnectivityManager.NetworkCallback.class));
-    }
-
-    @Test
-    public void onStart_shouldRegisterPreferenceChangeListener() {
-        mController.displayPreference(mScreen);
-        mController.onStart();
-
-        verify(mPreference).setOnPreferenceChangeListener(any(OnPreferenceChangeListener.class));
-    }
-
-    @Test
-    public void onStop_shouldRegisterPreferenceChangeListener() {
-        mController.displayPreference(mScreen);
-        mController.onStart();
-
-        mController.onStop();
-
-        verify(mPreference).setOnPreferenceChangeListener(null);
-    }
-
-    @Test
-    public void onSummaryChanged_shouldUpdatePreferenceSummary() {
-        mController.displayPreference(mScreen);
-
-        mController.onSummaryChanged("test summary");
-
-        verify(mPreference).setSummary("test summary");
-    }
-}
diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt
index 96e4707..6297c62 100644
--- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt
+++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt
@@ -68,7 +68,6 @@
     @Before
     fun setUp() {
         mockSession = mockitoSession()
-            .initMocks(this)
             .mockStatic(AppStoreUtil::class.java)
             .mockStatic(Utils::class.java)
             .mockStatic(AppUtils::class.java)
@@ -77,8 +76,7 @@
         whenever(AppStoreUtil.getInstallerPackageName(any(), eq(PACKAGE_NAME)))
             .thenReturn(INSTALLER_PACKAGE_NAME)
         whenever(AppStoreUtil.getInstallerPackageNameAndInstallSourceInfo(any(), eq(PACKAGE_NAME)))
-            .thenReturn(
-                    Pair<String, InstallSourceInfo>(INSTALLER_PACKAGE_NAME, INSTALL_SOURCE_INFO))
+            .thenReturn(Pair(INSTALLER_PACKAGE_NAME, INSTALL_SOURCE_INFO))
         whenever(AppStoreUtil.getAppStoreLink(context, INSTALLER_PACKAGE_NAME, PACKAGE_NAME))
             .thenReturn(STORE_LINK)
         whenever(AppStoreUtil.isInitiatedFromDifferentPackage(eq(INSTALL_SOURCE_INFO)))
@@ -97,7 +95,8 @@
 
     @Test
     fun whenNoInstaller_notDisplayed() {
-        whenever(AppStoreUtil.getInstallerPackageName(any(), eq(PACKAGE_NAME))).thenReturn(null)
+        whenever(AppStoreUtil.getInstallerPackageNameAndInstallSourceInfo(any(), eq(PACKAGE_NAME)))
+            .thenReturn(Pair(null, INSTALL_SOURCE_INFO))
 
         setContent()
 
diff --git a/tests/spa_unit/src/com/android/settings/spa/app/backgroundinstall/BackgroundInstalledAppsPageProviderTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/backgroundinstall/BackgroundInstalledAppsPageProviderTest.kt
index 5c65da1..6a6b91b 100644
--- a/tests/spa_unit/src/com/android/settings/spa/app/backgroundinstall/BackgroundInstalledAppsPageProviderTest.kt
+++ b/tests/spa_unit/src/com/android/settings/spa/app/backgroundinstall/BackgroundInstalledAppsPageProviderTest.kt
@@ -23,6 +23,7 @@
 import android.content.pm.PackageManager
 import android.content.pm.ParceledListSlice
 import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.hasText
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithText
 import androidx.compose.ui.test.performClick
@@ -30,6 +31,7 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import com.android.settings.R
 import com.android.settingslib.spa.testutils.FakeNavControllerWrapper
+import com.android.settingslib.spa.testutils.waitUntilExists
 import com.android.settingslib.spaprivileged.template.app.AppListItemModel
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.flow.first
@@ -146,8 +148,9 @@
             BackgroundInstalledAppList()
         }
 
-        composeTestRule.onNodeWithText(
-            context.getString(R.string.background_install_title)).assertIsDisplayed()
+        composeTestRule.waitUntilExists(
+            hasText(context.getString(R.string.background_install_title))
+        )
     }
 
     @Test
diff --git a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
index dc15f0b..d7241b9 100644
--- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
+++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
@@ -40,7 +40,6 @@
 import com.android.settings.notification.syncacrossdevices.SyncAcrossDevicesFeatureProvider
 import com.android.settings.overlay.DockUpdaterFeatureProvider
 import com.android.settings.overlay.FeatureFactory
-import com.android.settings.overlay.SurveyFeatureProvider
 import com.android.settings.panel.PanelFeatureProvider
 import com.android.settings.privatespace.PrivateSpaceLoginFeatureProvider
 import com.android.settings.search.SearchFeatureProvider
@@ -98,9 +97,7 @@
     override val searchFeatureProvider: SearchFeatureProvider
         get() = TODO("Not yet implemented")
 
-    override fun getSurveyFeatureProvider(context: Context): SurveyFeatureProvider? {
-        TODO("Not yet implemented")
-    }
+    override fun getSurveyFeatureProvider(context: Context) = null
 
     override val securityFeatureProvider: SecurityFeatureProvider
         get() = TODO("Not yet implemented")