Merge "Fix PanelSlicesAdapterTest" into main
diff --git a/aconfig/settings_connecteddevice_flag_declarations.aconfig b/aconfig/settings_connecteddevice_flag_declarations.aconfig
index 1a3afed..5ba2129 100644
--- a/aconfig/settings_connecteddevice_flag_declarations.aconfig
+++ b/aconfig/settings_connecteddevice_flag_declarations.aconfig
@@ -27,3 +27,10 @@
   description: "Gates whether to require an auth challenge for changing USB preferences"
   bug: "317367746"
 }
+
+flag {
+  name: "enable_saved_devices_order_by_recency"
+  namespace: "pixel_cross_device_control"
+  description: "Order the saved bluetooth devices by most recently connected."
+  bug: "306160434"
+}
\ No newline at end of file
diff --git a/res/values/config.xml b/res/values/config.xml
index f3e2a7a..433620d 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -42,6 +42,10 @@
     <string name="config_avatar_picker_action" translatable="false">
         com.android.avatarpicker.FULL_SCREEN_ACTIVITY
     </string>
+    <!-- User avatar dialog result broadcast explicit package -->
+    <string name="config_avatar_picker_package" translatable="false">
+        com.android.avatarpicker
+    </string>
 
     <!-- Package name and fully-qualified class name for the wallpaper picker activity. -->
     <string name="config_wallpaper_picker_package" translatable="false">com.android.settings</string>
diff --git a/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java b/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
index 7a2ae04..33f8b73 100644
--- a/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
+++ b/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
@@ -17,6 +17,7 @@
 
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -36,13 +37,16 @@
 import com.android.settings.connecteddevice.dock.DockUpdater;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.flags.Flags;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public class PreviouslyConnectedDevicePreferenceController extends BasePreferenceController
         implements LifecycleObserver, OnStart, OnStop, DevicePreferenceCallback {
@@ -56,11 +60,12 @@
 
     private final List<Preference> mDevicesList = new ArrayList<>();
     private final List<Preference> mDockDevicesList = new ArrayList<>();
+    private final Map<BluetoothDevice, Preference> mDevicePreferenceMap = new HashMap<>();
+    private final BluetoothAdapter mBluetoothAdapter;
 
     private PreferenceGroup mPreferenceGroup;
     private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
     private DockUpdater mSavedDockUpdater;
-    private BluetoothAdapter mBluetoothAdapter;
 
     @VisibleForTesting
     Preference mSeeAllPreference;
@@ -81,7 +86,11 @@
         mSavedDockUpdater = FeatureFactory.getFeatureFactory().getDockUpdaterFeatureProvider()
                 .getSavedDockUpdater(context, this);
         mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
-        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        if (Flags.enableSavedDevicesOrderByRecency()) {
+            mBluetoothAdapter = context.getSystemService(BluetoothManager.class).getAdapter();
+        } else {
+            mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        }
     }
 
     @Override
@@ -114,6 +123,9 @@
         mContext.registerReceiver(mReceiver, mIntentFilter,
                 Context.RECEIVER_EXPORTED_UNAUDITED);
         mBluetoothDeviceUpdater.refreshPreference();
+        if (Flags.enableSavedDevicesOrderByRecency()) {
+            updatePreferenceGroup();
+        }
     }
 
     @Override
@@ -131,19 +143,37 @@
 
     @Override
     public void onDeviceAdded(Preference preference) {
-        final List<BluetoothDevice> bluetoothDevices =
-                mBluetoothAdapter.getMostRecentlyConnectedDevices();
-        final int index = preference instanceof BluetoothDevicePreference
-                ? bluetoothDevices.indexOf(((BluetoothDevicePreference) preference)
-                .getBluetoothDevice().getDevice()) : DOCK_DEVICE_INDEX;
-        if (DEBUG) {
-            Log.d(TAG, "onDeviceAdded() " + preference.getTitle() + ", index of : " + index);
-            for (BluetoothDevice device : bluetoothDevices) {
-                Log.d(TAG, "onDeviceAdded() most recently device : " + device.getName());
+        if (Flags.enableSavedDevicesOrderByRecency()) {
+            if (preference instanceof BluetoothDevicePreference) {
+                mDevicePreferenceMap.put(
+                        ((BluetoothDevicePreference) preference).getBluetoothDevice().getDevice(),
+                        preference);
+            } else {
+                mDockDevicesList.add(preference);
             }
+            if (DEBUG) {
+                Log.d(TAG, "onDeviceAdded() " + preference.getTitle());
+            }
+            updatePreferenceGroup();
+        } else {
+            final List<BluetoothDevice> bluetoothDevices =
+                    mBluetoothAdapter.getMostRecentlyConnectedDevices();
+            final int index =
+                    preference instanceof BluetoothDevicePreference
+                            ? bluetoothDevices.indexOf(
+                                    ((BluetoothDevicePreference) preference)
+                                            .getBluetoothDevice()
+                                            .getDevice())
+                            : DOCK_DEVICE_INDEX;
+            if (DEBUG) {
+                Log.d(TAG, "onDeviceAdded() " + preference.getTitle() + ", index of : " + index);
+                for (BluetoothDevice device : bluetoothDevices) {
+                    Log.d(TAG, "onDeviceAdded() most recently device : " + device.getName());
+                }
+            }
+            addPreference(index, preference);
+            updatePreferenceVisibility();
         }
-        addPreference(index, preference);
-        updatePreferenceVisibility();
     }
 
     private void addPreference(int index, Preference preference) {
@@ -194,13 +224,57 @@
 
     @Override
     public void onDeviceRemoved(Preference preference) {
-        if (preference instanceof BluetoothDevicePreference) {
-            mDevicesList.remove(preference);
+        if (Flags.enableSavedDevicesOrderByRecency()) {
+            if (preference instanceof BluetoothDevicePreference) {
+                mDevicePreferenceMap.remove(
+                        ((BluetoothDevicePreference) preference).getBluetoothDevice().getDevice(),
+                        preference);
+            } else {
+                mDockDevicesList.remove(preference);
+            }
+            if (DEBUG) {
+                Log.d(TAG, "onDeviceRemoved() " + preference.getTitle());
+            }
+            updatePreferenceGroup();
         } else {
-            mDockDevicesList.remove(preference);
-        }
+            if (preference instanceof BluetoothDevicePreference) {
+                mDevicesList.remove(preference);
+            } else {
+                mDockDevicesList.remove(preference);
+            }
 
-        addPreference();
+            addPreference();
+            updatePreferenceVisibility();
+        }
+    }
+
+    /** Sort the preferenceGroup by most recently used. */
+    public void updatePreferenceGroup() {
+        mPreferenceGroup.removeAll();
+        mPreferenceGroup.addPreference(mSeeAllPreference);
+        if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) {
+            // Bluetooth is supported
+            int order = 0;
+            for (BluetoothDevice device : mBluetoothAdapter.getMostRecentlyConnectedDevices()) {
+                Preference preference = mDevicePreferenceMap.getOrDefault(device, null);
+                if (preference != null) {
+                    preference.setOrder(order);
+                    mPreferenceGroup.addPreference(preference);
+                    order += 1;
+                }
+                if (order == MAX_DEVICE_NUM) {
+                    break;
+                }
+            }
+            for (Preference preference : mDockDevicesList) {
+                if (order == MAX_DEVICE_NUM) {
+                    break;
+                }
+                preference.setOrder(order);
+                mPreferenceGroup.addPreference(preference);
+                order += 1;
+            }
+        }
         updatePreferenceVisibility();
     }
 
diff --git a/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java b/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java
index fb35dd9..c73481d 100644
--- a/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java
+++ b/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java
@@ -15,6 +15,9 @@
  */
 package com.android.settings.connecteddevice;
 
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothManager;
 import android.content.Context;
 import android.content.pm.PackageManager;
 
@@ -23,18 +26,25 @@
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.bluetooth.BluetoothDevicePreference;
 import com.android.settings.bluetooth.BluetoothDeviceUpdater;
 import com.android.settings.bluetooth.SavedBluetoothDeviceUpdater;
 import com.android.settings.connecteddevice.dock.DockUpdater;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.flags.Flags;
 import com.android.settings.overlay.DockUpdaterFeatureProvider;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Controller to maintain the {@link PreferenceGroup} for all
  * saved devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference}
@@ -45,6 +55,10 @@
 
     private static final String KEY = "saved_device_list";
 
+    private final Map<BluetoothDevice, Preference> mDevicePreferenceMap = new HashMap<>();
+    private final List<Preference> mDockDevicesList = new ArrayList<>();
+    private final BluetoothAdapter mBluetoothAdapter;
+
     @VisibleForTesting
     PreferenceGroup mPreferenceGroup;
     private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
@@ -57,6 +71,7 @@
                 FeatureFactory.getFeatureFactory().getDockUpdaterFeatureProvider();
         mSavedDockUpdater =
                 dockUpdaterFeatureProvider.getSavedDockUpdater(context, this);
+        mBluetoothAdapter = context.getSystemService(BluetoothManager.class).getAdapter();
     }
 
     @Override
@@ -64,6 +79,9 @@
         mBluetoothDeviceUpdater.registerCallback();
         mSavedDockUpdater.registerCallback();
         mBluetoothDeviceUpdater.refreshPreference();
+        if (Flags.enableSavedDevicesOrderByRecency()) {
+            updatePreferenceGroup();
+        }
     }
 
     @Override
@@ -101,17 +119,63 @@
 
     @Override
     public void onDeviceAdded(Preference preference) {
-        if (mPreferenceGroup.getPreferenceCount() == 0) {
-            mPreferenceGroup.setVisible(true);
+        if (Flags.enableSavedDevicesOrderByRecency()) {
+            mPreferenceGroup.addPreference(preference);
+            if (preference instanceof BluetoothDevicePreference) {
+                mDevicePreferenceMap.put(
+                        ((BluetoothDevicePreference) preference).getBluetoothDevice().getDevice(),
+                        preference);
+            } else {
+                mDockDevicesList.add(preference);
+            }
+            updatePreferenceGroup();
+        } else {
+            if (mPreferenceGroup.getPreferenceCount() == 0) {
+                mPreferenceGroup.setVisible(true);
+            }
+            mPreferenceGroup.addPreference(preference);
         }
-        mPreferenceGroup.addPreference(preference);
     }
 
     @Override
     public void onDeviceRemoved(Preference preference) {
-        mPreferenceGroup.removePreference(preference);
-        if (mPreferenceGroup.getPreferenceCount() == 0) {
+        if (Flags.enableSavedDevicesOrderByRecency()) {
+            mPreferenceGroup.removePreference(preference);
+            if (preference instanceof BluetoothDevicePreference) {
+                mDevicePreferenceMap.remove(
+                        ((BluetoothDevicePreference) preference).getBluetoothDevice().getDevice(),
+                        preference);
+            } else {
+                mDockDevicesList.remove(preference);
+            }
+            updatePreferenceGroup();
+        } else {
+            mPreferenceGroup.removePreference(preference);
+            if (mPreferenceGroup.getPreferenceCount() == 0) {
+                mPreferenceGroup.setVisible(false);
+            }
+        }
+    }
+
+    /** Sort the preferenceGroup by most recently used. */
+    public void updatePreferenceGroup() {
+        if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
+            // Bluetooth is unsupported or disabled
             mPreferenceGroup.setVisible(false);
+        } else {
+            mPreferenceGroup.setVisible(true);
+            int order = 0;
+            for (BluetoothDevice device : mBluetoothAdapter.getMostRecentlyConnectedDevices()) {
+                Preference preference = mDevicePreferenceMap.getOrDefault(device, null);
+                if (preference != null) {
+                    preference.setOrder(order);
+                    order += 1;
+                }
+            }
+            for (Preference preference : mDockDevicesList) {
+                preference.setOrder(order);
+                order += 1;
+            }
         }
     }
 
@@ -130,4 +194,9 @@
     public void setSavedDockUpdater(DockUpdater savedDockUpdater) {
         mSavedDockUpdater = savedDockUpdater;
     }
+
+    @VisibleForTesting
+    void setPreferenceGroup(PreferenceGroup preferenceGroup) {
+        mPreferenceGroup = preferenceGroup;
+    }
 }
diff --git a/src/com/android/settings/network/NetworkProviderCallsSmsController.kt b/src/com/android/settings/network/NetworkProviderCallsSmsController.kt
index 7346e23..67247c1 100644
--- a/src/com/android/settings/network/NetworkProviderCallsSmsController.kt
+++ b/src/com/android/settings/network/NetworkProviderCallsSmsController.kt
@@ -28,6 +28,7 @@
 import androidx.preference.PreferenceScreen
 import com.android.settings.R
 import com.android.settings.core.BasePreferenceController
+import com.android.settings.flags.Flags
 import com.android.settingslib.RestrictedPreference
 import com.android.settingslib.Utils
 import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
@@ -62,6 +63,7 @@
     }
 
     override fun getAvailabilityStatus() = when {
+        Flags.isDualSimOnboardingEnabled() -> UNSUPPORTED_ON_DEVICE
         !SubscriptionUtil.isSimHardwareVisible(mContext) -> UNSUPPORTED_ON_DEVICE
         !mContext.userManager.isAdminUser -> DISABLED_FOR_USER
         else -> AVAILABLE
diff --git a/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java b/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java
index b5ad65a..ffe5b05 100644
--- a/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java
+++ b/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java
@@ -24,6 +24,7 @@
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.flags.Flags;
 import com.android.settings.network.telephony.CallsDefaultSubscriptionController;
 import com.android.settings.network.telephony.NetworkProviderWifiCallingPreferenceController;
 import com.android.settings.network.telephony.SmsDefaultSubscriptionController;
@@ -91,8 +92,9 @@
 
                 @Override
                 protected boolean isPageSearchEnabled(Context context) {
-                    return SubscriptionUtil.isSimHardwareVisible(context) &&
-                            context.getSystemService(UserManager.class).isAdminUser();
+                    return !Flags.isDualSimOnboardingEnabled()
+                            && SubscriptionUtil.isSimHardwareVisible(context)
+                            && context.getSystemService(UserManager.class).isAdminUser();
                 }
             };
 }
diff --git a/src/com/android/settings/network/WepNetworkDialogActivity.kt b/src/com/android/settings/network/WepNetworkDialogActivity.kt
index 2fa8784..d69630f 100644
--- a/src/com/android/settings/network/WepNetworkDialogActivity.kt
+++ b/src/com/android/settings/network/WepNetworkDialogActivity.kt
@@ -51,23 +51,24 @@
             confirmButton = AlertDialogButton(
                 getString(R.string.wifi_settings_ssid_block_button_close)
             ) { finish() },
-            dismissButton = AlertDialogButton(
-                getString(R.string.wifi_settings_wep_networks_button_allow)
-            ) {
-                SubSettingLauncher(context)
-                    .setTitleText(context.getText(R.string.network_and_internet_preferences_title))
-                    .setSourceMetricsCategory(SettingsEnums.CONFIGURE_WIFI)
-                    .setDestination(ConfigureWifiSettings::class.java.getName())
-                    .launch()
-                finish()
-            },
+            dismissButton = if (wifiManager?.isWepSupported == true)
+                AlertDialogButton(
+                    getString(R.string.wifi_settings_wep_networks_button_allow)
+                ) {
+                    SubSettingLauncher(context)
+                        .setTitleText(context.getText(R.string.network_and_internet_preferences_title))
+                        .setSourceMetricsCategory(SettingsEnums.CONFIGURE_WIFI)
+                        .setDestination(ConfigureWifiSettings::class.java.getName())
+                        .launch()
+                    finish()
+                } else null,
             title = String.format(
                 getString(R.string.wifi_settings_wep_networks_blocked_title),
                 intent.getStringExtra(SSID) ?: SSID
             ),
             text = {
                 Text(
-                    if (wifiManager?.isWepSupported == false)
+                    if (wifiManager?.isWepSupported == true)
                         getString(R.string.wifi_settings_wep_networks_summary_toggle_off)
                     else getString(R.string.wifi_settings_wep_networks_summary_blocked_by_carrier),
                     modifier = Modifier.fillMaxWidth(),
diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
index cce12ec..47515d8 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
@@ -358,7 +358,8 @@
                 .createForSubscriptionId(subId);
         final SubscriptionManager subscriptionManager = context.getSystemService(
                 SubscriptionManager.class).createForAllUserProfiles();
-        telephonyManager.setDataEnabled(enabled);
+        telephonyManager.setDataEnabledForReason(TelephonyManager.DATA_ENABLED_REASON_USER,
+                enabled);
 
         if (disableOtherSubscriptions) {
             final List<SubscriptionInfo> subInfoList =
@@ -367,8 +368,10 @@
                 for (SubscriptionInfo subInfo : subInfoList) {
                     // We never disable mobile data for opportunistic subscriptions.
                     if (subInfo.getSubscriptionId() != subId && !subInfo.isOpportunistic()) {
-                        context.getSystemService(TelephonyManager.class).createForSubscriptionId(
-                                subInfo.getSubscriptionId()).setDataEnabled(false);
+                        context.getSystemService(TelephonyManager.class)
+                                .createForSubscriptionId(subInfo.getSubscriptionId())
+                                .setDataEnabledForReason(TelephonyManager.DATA_ENABLED_REASON_USER,
+                                        false);
                     }
                 }
             }
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 29d136f..d39d980 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -35,6 +35,7 @@
 import android.graphics.BlendMode;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
+import android.multiuser.Flags;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
@@ -892,13 +893,24 @@
                                         UserIcons.convertToBitmapAtUserIconSize(
                                                 activity.getResources(), newUserIcon)));
                         mMePreference.setIcon(newUserIcon);
+                        if (Flags.avatarSync()) {
+                            final String pkg = getString(R.string.config_avatar_picker_package);
+                            final String action = pkg + ".set.confirm";
+                            activity.sendBroadcast(new Intent(action).setPackage(pkg));
+                        }
                     }
 
                     if (!TextUtils.isEmpty(newUserName) && !newUserName.equals(user.name)) {
                         mMePreference.setTitle(newUserName);
                         mUserManager.setUserName(user.id, newUserName);
                     }
-                }, null);
+                }, () -> {
+                    if (Flags.avatarSync()) {
+                        final String pkg = getString(R.string.config_avatar_picker_package);
+                        final String action = pkg + ".set.cancel";
+                        activity.sendBroadcast(new Intent(action).setPackage(pkg));
+                    }
+                });
     }
 
     private Dialog buildAddUserDialog(int userType) {
diff --git a/tests/robotests/src/com/android/settings/accounts/ChooseAccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/ChooseAccountPreferenceControllerTest.java
index 783eebe..59e656c 100644
--- a/tests/robotests/src/com/android/settings/accounts/ChooseAccountPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/ChooseAccountPreferenceControllerTest.java
@@ -23,6 +23,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 
+import android.accounts.AccountManager;
 import android.accounts.AuthenticatorDescription;
 import android.app.Activity;
 import android.app.admin.DevicePolicyManager;
@@ -35,6 +36,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceManager;
 import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
@@ -44,33 +46,38 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class,
         ShadowRestrictedLockUtilsInternal.class})
 public class ChooseAccountPreferenceControllerTest {
+    @Rule
+    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
 
     private Context mContext;
     private ChooseAccountPreferenceController mController;
     private Activity mActivity;
     private PreferenceManager mPreferenceManager;
     private PreferenceScreen mPreferenceScreen;
+    private ShadowAccountManager mAccountManager;
 
     @Before
     public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
+        mContext = ApplicationProvider.getApplicationContext();
         mController = spy(new ChooseAccountPreferenceController(mContext, "controller_key"));
         mActivity = Robolectric.setupActivity(FragmentActivity.class);
         mPreferenceManager = new PreferenceManager(mContext);
         mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
+        mAccountManager = (ShadowAccountManager) Shadows.shadowOf(AccountManager.get(mContext));
     }
 
     @After
@@ -108,7 +115,7 @@
         final AuthenticatorDescription authDesc = new AuthenticatorDescription("com.acct1",
                 "com.android.settings",
                 R.string.header_add_an_account, 0, 0, 0, false);
-        ShadowAccountManager.addAuthenticator(authDesc);
+        mAccountManager.addAuthenticator(authDesc);
 
         final SyncAdapterType[] syncAdapters = {new SyncAdapterType("authority" /* authority */,
                 "com.acct1" /* accountType */, false /* userVisible */,
@@ -133,7 +140,7 @@
         final AuthenticatorDescription authDesc = new AuthenticatorDescription("com.acct1",
                 "com.android.settings",
                 R.string.header_add_an_account, 0, 0, 0, false);
-        ShadowAccountManager.addAuthenticator(authDesc);
+        mAccountManager.addAuthenticator(authDesc);
 
         final SyncAdapterType[] syncAdapters = {new SyncAdapterType("authority" /* authority */,
                 "com.acct1" /* accountType */, false /* userVisible */,
@@ -158,7 +165,7 @@
         final AuthenticatorDescription authDesc = new AuthenticatorDescription("com.acct1",
                 "com.android.settings",
                 R.string.header_add_an_account, 0, 0, 0, false);
-        ShadowAccountManager.addAuthenticator(authDesc);
+        mAccountManager.addAuthenticator(authDesc);
 
         final SyncAdapterType[] syncAdapters = {new SyncAdapterType("authority" /* authority */,
                 "com.acct1" /* accountType */, false /* userVisible */,
@@ -184,8 +191,8 @@
         final AuthenticatorDescription authDesc2 = new AuthenticatorDescription("com.acct2",
                 "com.android.settings",
                 R.string.header_add_an_account, 0, 0, 0, false);
-        ShadowAccountManager.addAuthenticator(authDesc);
-        ShadowAccountManager.addAuthenticator(authDesc2);
+        mAccountManager.addAuthenticator(authDesc);
+        mAccountManager.addAuthenticator(authDesc2);
 
         final SyncAdapterType[] syncAdapters = {new SyncAdapterType("authority" /* authority */,
                 "com.acct1" /* accountType */, false /* userVisible */,
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java
index e351b71..005c131 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java
@@ -27,9 +27,14 @@
 
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothManager;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
+import android.platform.test.annotations.RequiresFlagsDisabled;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
 import android.util.Pair;
 
 import androidx.preference.Preference;
@@ -42,11 +47,13 @@
 import com.android.settings.bluetooth.BluetoothDeviceUpdater;
 import com.android.settings.connecteddevice.dock.DockUpdater;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.flags.Flags;
 import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
 import com.android.settings.widget.SingleTargetGearPreference;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -70,6 +77,9 @@
     private static final String FAKE_ADDRESS_4 = "AA:AA:AA:AA:AA:04";
     private static final String FAKE_ADDRESS_5 = "AA:AA:AA:AA:AA:05";
 
+    @Rule
+    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
+
     @Mock
     private DashboardFragment mDashboardFragment;
     @Mock
@@ -105,6 +115,9 @@
     @Mock
     private Drawable mDrawable;
 
+    @Mock private BluetoothManager mBluetoothManager;
+    @Mock private BluetoothAdapter mBluetoothAdapter;
+
     private Context mContext;
     private PreviouslyConnectedDevicePreferenceController mPreConnectedDeviceController;
     private PreferenceGroup mPreferenceGroup;
@@ -117,10 +130,8 @@
         mContext = spy(RuntimeEnvironment.application);
         doReturn(mContext).when(mDashboardFragment).getContext();
         doReturn(mPackageManager).when(mContext).getPackageManager();
-        mPreConnectedDeviceController =
-                new PreviouslyConnectedDevicePreferenceController(mContext, KEY);
-        mPreConnectedDeviceController.setBluetoothDeviceUpdater(mBluetoothDeviceUpdater);
-        mPreConnectedDeviceController.setSavedDockUpdater(mDockUpdater);
+        when(mContext.getSystemService(BluetoothManager.class)).thenReturn(mBluetoothManager);
+        when(mBluetoothManager.getAdapter()).thenReturn(mBluetoothAdapter);
         mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
 
         when(mCachedDevice1.getDevice()).thenReturn(mBluetoothDevice1);
@@ -145,7 +156,13 @@
         mMostRecentlyConnectedDevices.add(mBluetoothDevice4);
         mMostRecentlyConnectedDevices.add(mBluetoothDevice3);
         mShadowBluetoothAdapter.setMostRecentlyConnectedDevices(mMostRecentlyConnectedDevices);
+        when(mBluetoothAdapter.getMostRecentlyConnectedDevices())
+                .thenReturn(mMostRecentlyConnectedDevices);
 
+        mPreConnectedDeviceController =
+                new PreviouslyConnectedDevicePreferenceController(mContext, KEY);
+        mPreConnectedDeviceController.setBluetoothDeviceUpdater(mBluetoothDeviceUpdater);
+        mPreConnectedDeviceController.setSavedDockUpdater(mDockUpdater);
         mPreferenceGroup = spy(new PreferenceCategory(mContext));
         doReturn(mPreferenceManager).when(mPreferenceGroup).getPreferenceManager();
         mPreferenceGroup.setVisible(false);
@@ -249,6 +266,7 @@
     }
 
     @Test
+    @RequiresFlagsDisabled(Flags.FLAG_ENABLE_SAVED_DEVICES_ORDER_BY_RECENCY)
     public void onDeviceAdded_addPreferenceNotExistInRecentlyDevices_noCrash() {
         final BluetoothDevicePreference preference = new BluetoothDevicePreference(
                 mContext, mCachedDevice5, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
@@ -260,6 +278,18 @@
     }
 
     @Test
+    @RequiresFlagsEnabled(Flags.FLAG_ENABLE_SAVED_DEVICES_ORDER_BY_RECENCY)
+    public void onDeviceAdded_addPreferenceNotExistInRecentlyDevices_doNothing() {
+        final BluetoothDevicePreference preference = new BluetoothDevicePreference(
+                mContext, mCachedDevice5, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+
+        mPreConnectedDeviceController.onDeviceAdded(preference);
+
+        // 1 see all preference
+        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);
+    }
+
+    @Test
     public void onDeviceRemoved_removeLastDevice_showSeeAllPreference() {
         final BluetoothDevicePreference preference1 = new BluetoothDevicePreference(
                 mContext, mCachedDevice1, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
@@ -277,6 +307,7 @@
     @Test
     public void updatePreferenceVisibility_bluetoothIsEnable_shouldShowCorrectText() {
         mShadowBluetoothAdapter.setEnabled(true);
+        when(mBluetoothAdapter.isEnabled()).thenReturn(true);
         mPreConnectedDeviceController.updatePreferenceVisibility();
 
         verify(mSeeAllPreference).setSummary("");
@@ -285,9 +316,78 @@
     @Test
     public void updatePreferenceVisibility_bluetoothIsDisable_shouldShowCorrectText() {
         mShadowBluetoothAdapter.setEnabled(false);
+        when(mBluetoothAdapter.isEnabled()).thenReturn(false);
         mPreConnectedDeviceController.updatePreferenceVisibility();
 
         verify(mSeeAllPreference).setSummary(
                 mContext.getString(R.string.connected_device_see_all_summary));
     }
+
+    @Test
+    @RequiresFlagsEnabled(Flags.FLAG_ENABLE_SAVED_DEVICES_ORDER_BY_RECENCY)
+    public void updatePreferenceGroup_bluetoothIsEnable_shouldOrderByMostRecentlyConnected() {
+        when(mBluetoothAdapter.isEnabled()).thenReturn(true);
+        final BluetoothDevicePreference preference4 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice4,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        final BluetoothDevicePreference preference3 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice3,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        final BluetoothDevicePreference preference2 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice2,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        mPreConnectedDeviceController.onDeviceAdded(preference4);
+        mPreConnectedDeviceController.onDeviceAdded(preference3);
+        mPreConnectedDeviceController.onDeviceAdded(preference2);
+
+        mPreConnectedDeviceController.updatePreferenceGroup();
+
+        // Refer to the order of {@link #mMostRecentlyConnectedDevices}, the first one is see all
+        // preference
+        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(4);
+        assertThat(preference2.getOrder()).isEqualTo(0);
+        assertThat(preference4.getOrder()).isEqualTo(1);
+        assertThat(preference3.getOrder()).isEqualTo(2);
+    }
+
+    @Test
+    @RequiresFlagsEnabled(Flags.FLAG_ENABLE_SAVED_DEVICES_ORDER_BY_RECENCY)
+    public void updatePreferenceGroup_bluetoothIsDisable_shouldShowOnlySeeAllPreference() {
+        when(mBluetoothAdapter.isEnabled()).thenReturn(false);
+        final BluetoothDevicePreference preference4 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice4,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        final BluetoothDevicePreference preference3 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice3,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        final BluetoothDevicePreference preference2 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice2,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        mPreConnectedDeviceController.onDeviceAdded(preference4);
+        mPreConnectedDeviceController.onDeviceAdded(preference3);
+        mPreConnectedDeviceController.onDeviceAdded(preference2);
+
+        mPreConnectedDeviceController.updatePreferenceGroup();
+
+        // 1 see all preference
+        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/SavedDeviceGroupControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/SavedDeviceGroupControllerTest.java
index d2c44f9..81c0c35 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/SavedDeviceGroupControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/SavedDeviceGroupControllerTest.java
@@ -25,29 +25,52 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothManager;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
+import android.util.Pair;
 
 import androidx.lifecycle.LifecycleOwner;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceManager;
 
+import com.android.settings.bluetooth.BluetoothDevicePreference;
 import com.android.settings.bluetooth.BluetoothDeviceUpdater;
 import com.android.settings.connecteddevice.dock.DockUpdater;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.flags.Flags;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @RunWith(RobolectricTestRunner.class)
 public class SavedDeviceGroupControllerTest {
 
+    private static final String FAKE_ADDRESS_1 = "AA:AA:AA:AA:AA:01";
+    private static final String FAKE_ADDRESS_2 = "AA:AA:AA:AA:AA:02";
+    private static final String FAKE_ADDRESS_3 = "AA:AA:AA:AA:AA:03";
+
+    @Rule
+    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
+
     @Mock
     private DashboardFragment mDashboardFragment;
     @Mock
@@ -56,23 +79,57 @@
     private DockUpdater mSavedDockUpdater;
     @Mock
     private PackageManager mPackageManager;
+    @Mock private BluetoothManager mBluetoothManager;
+    @Mock private BluetoothAdapter mBluetoothAdapter;
+    @Mock private CachedBluetoothDevice mCachedDevice1;
+    @Mock private CachedBluetoothDevice mCachedDevice2;
+    @Mock private CachedBluetoothDevice mCachedDevice3;
+    @Mock private BluetoothDevice mBluetoothDevice1;
+    @Mock private BluetoothDevice mBluetoothDevice2;
+    @Mock private BluetoothDevice mBluetoothDevice3;
+    @Mock private Drawable mDrawable;
+    @Mock private PreferenceManager mPreferenceManager;
 
     private Context mContext;
     private SavedDeviceGroupController mSavedDeviceGroupController;
     private LifecycleOwner mLifecycleOwner;
     private Lifecycle mLifecycle;
+    private PreferenceGroup mPreferenceGroup;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        Pair<Drawable, String> pairs = new Pair<>(mDrawable, "fake_device");
         mContext = spy(RuntimeEnvironment.application);
         mLifecycleOwner = () -> mLifecycle;
         mLifecycle = new Lifecycle(mLifecycleOwner);
         doReturn(mContext).when(mDashboardFragment).getContext();
         doReturn(mPackageManager).when(mContext).getPackageManager();
+
+        when(mCachedDevice1.getDevice()).thenReturn(mBluetoothDevice1);
+        when(mCachedDevice1.getAddress()).thenReturn(FAKE_ADDRESS_1);
+        when(mCachedDevice1.getDrawableWithDescription()).thenReturn(pairs);
+        when(mCachedDevice2.getDevice()).thenReturn(mBluetoothDevice2);
+        when(mCachedDevice2.getAddress()).thenReturn(FAKE_ADDRESS_2);
+        when(mCachedDevice2.getDrawableWithDescription()).thenReturn(pairs);
+        when(mCachedDevice3.getDevice()).thenReturn(mBluetoothDevice3);
+        when(mCachedDevice3.getAddress()).thenReturn(FAKE_ADDRESS_3);
+        when(mCachedDevice3.getDrawableWithDescription()).thenReturn(pairs);
+        final List<BluetoothDevice> mMostRecentlyConnectedDevices = new ArrayList<>();
+        mMostRecentlyConnectedDevices.add(mBluetoothDevice1);
+        mMostRecentlyConnectedDevices.add(mBluetoothDevice2);
+        mMostRecentlyConnectedDevices.add(mBluetoothDevice3);
+        when(mContext.getSystemService(BluetoothManager.class)).thenReturn(mBluetoothManager);
+        when(mBluetoothManager.getAdapter()).thenReturn(mBluetoothAdapter);
+        when(mBluetoothAdapter.getMostRecentlyConnectedDevices())
+                .thenReturn(mMostRecentlyConnectedDevices);
+
+        mPreferenceGroup = spy(new PreferenceCategory(mContext));
+        when(mPreferenceGroup.getPreferenceManager()).thenReturn(mPreferenceManager);
         mSavedDeviceGroupController = new SavedDeviceGroupController(mContext);
         mSavedDeviceGroupController.setBluetoothDeviceUpdater(mBluetoothDeviceUpdater);
         mSavedDeviceGroupController.setSavedDockUpdater(mSavedDockUpdater);
+        mSavedDeviceGroupController.setPreferenceGroup(mPreferenceGroup);
     }
 
     @Test
@@ -118,4 +175,71 @@
         assertThat(mSavedDeviceGroupController.getAvailabilityStatus()).isEqualTo(
             AVAILABLE);
     }
+
+    @Test
+    @RequiresFlagsEnabled(Flags.FLAG_ENABLE_SAVED_DEVICES_ORDER_BY_RECENCY)
+    public void updatePreferenceGroup_bluetoothIsEnable_shouldOrderByMostRecentlyConnected() {
+        when(mBluetoothAdapter.isEnabled()).thenReturn(true);
+        final BluetoothDevicePreference preference3 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice3,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        final BluetoothDevicePreference preference2 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice2,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        final BluetoothDevicePreference preference1 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice1,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        mSavedDeviceGroupController.onDeviceAdded(preference3);
+        mSavedDeviceGroupController.onDeviceAdded(preference2);
+        mSavedDeviceGroupController.onDeviceAdded(preference1);
+
+        mSavedDeviceGroupController.updatePreferenceGroup();
+
+        // Refer to the order of {@link #mMostRecentlyConnectedDevices}
+        assertThat(mPreferenceGroup.isVisible()).isTrue();
+        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(3);
+        assertThat(preference1.getOrder()).isEqualTo(0);
+        assertThat(preference2.getOrder()).isEqualTo(1);
+        assertThat(preference3.getOrder()).isEqualTo(2);
+    }
+
+    @Test
+    @RequiresFlagsEnabled(Flags.FLAG_ENABLE_SAVED_DEVICES_ORDER_BY_RECENCY)
+    public void updatePreferenceGroup_bluetoothIsDisable_shouldShowNoPreference() {
+        when(mBluetoothAdapter.isEnabled()).thenReturn(false);
+        final BluetoothDevicePreference preference3 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice3,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        final BluetoothDevicePreference preference2 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice2,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        final BluetoothDevicePreference preference1 =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedDevice2,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        mSavedDeviceGroupController.onDeviceAdded(preference3);
+        mSavedDeviceGroupController.onDeviceAdded(preference2);
+        mSavedDeviceGroupController.onDeviceAdded(preference1);
+
+        mSavedDeviceGroupController.updatePreferenceGroup();
+
+        assertThat(mPreferenceGroup.isVisible()).isFalse();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/development/compat/PlatformCompatDashboardTest.java b/tests/robotests/src/com/android/settings/development/compat/PlatformCompatDashboardTest.java
index 5a679ad..86ceadc 100644
--- a/tests/robotests/src/com/android/settings/development/compat/PlatformCompatDashboardTest.java
+++ b/tests/robotests/src/com/android/settings/development/compat/PlatformCompatDashboardTest.java
@@ -41,7 +41,8 @@
 import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceManager;
 import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
+import androidx.preference.SwitchPreferenceCompat;
+import androidx.test.core.app.ApplicationProvider;
 
 import com.android.internal.compat.CompatibilityChangeConfig;
 import com.android.internal.compat.CompatibilityChangeInfo;
@@ -51,13 +52,13 @@
 import com.android.settings.R;
 
 import org.junit.Before;
-import org.junit.Ignore;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -67,6 +68,8 @@
 
 @RunWith(RobolectricTestRunner.class)
 public class PlatformCompatDashboardTest {
+    @Rule
+    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
     private PlatformCompatDashboard mDashboard;
 
     @Mock
@@ -87,7 +90,6 @@
 
     @Before
     public void setUp() throws RemoteException, NameNotFoundException {
-        MockitoAnnotations.initMocks(this);
         mChanges = new CompatibilityChangeInfo[5];
         mChanges[0] = new CompatibilityChangeInfo(
                 1L, "Default_Enabled", 0, 0, false, false, "", false);
@@ -104,7 +106,7 @@
         // By default, allow any change
         when(mOverrideValidator.getOverrideAllowedState(anyLong(),anyString()))
             .thenReturn(new OverrideAllowedState(ALLOWED, -1, -1));
-        mContext = spy(RuntimeEnvironment.application);
+        mContext = spy(ApplicationProvider.getApplicationContext());
         mPreferenceManager = new PreferenceManager(mContext);
         mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
         mApplicationInfo.packageName = APP_NAME;
@@ -141,7 +143,6 @@
                 R.string.platform_compat_selected_app_summary, APP_NAME, 1));
     }
 
-    @Ignore("b/313591873")
     @Test
     public void createPreferenceForChange_defaultEnabledChange_createCheckedEntry() {
         CompatibilityChangeInfo enabledChange = mChanges[0];
@@ -152,15 +153,14 @@
         Preference enabledPreference = mDashboard.createPreferenceForChange(mContext, enabledChange,
                 config);
 
-        SwitchPreference enabledSwitchPreference = (SwitchPreference) enabledPreference;
+        SwitchPreferenceCompat enabledSwitchPreference = (SwitchPreferenceCompat) enabledPreference;
 
         assertThat(enabledPreference.getSummary()).isEqualTo(mChanges[0].getName());
-        assertThat(enabledPreference instanceof SwitchPreference).isTrue();
+        assertThat(enabledPreference instanceof SwitchPreferenceCompat).isTrue();
         assertThat(enabledSwitchPreference.isChecked()).isTrue();
         assertThat(enabledSwitchPreference.isEnabled()).isTrue();
     }
 
-    @Ignore("b/313591873")
     @Test
     public void createPreferenceForChange_defaultDisabledChange_createUncheckedEntry() {
         CompatibilityChangeInfo disabledChange = mChanges[1];
@@ -172,12 +172,12 @@
                 disabledChange, config);
 
         assertThat(disabledPreference.getSummary()).isEqualTo(mChanges[1].getName());
-        SwitchPreference disabledSwitchPreference = (SwitchPreference) disabledPreference;
+        SwitchPreferenceCompat disabledSwitchPreference =
+                (SwitchPreferenceCompat) disabledPreference;
         assertThat(disabledSwitchPreference.isChecked()).isFalse();
         assertThat(disabledSwitchPreference.isEnabled()).isTrue();
     }
 
-    @Ignore("b/313591873")
     @Test
     public void createPreferenceForChange_cannotOverride_createDisabledEntry()
                     throws RemoteException {
@@ -191,15 +191,14 @@
         Preference preference = mDashboard.createPreferenceForChange(mContext, enabledChange,
                 config);
 
-        SwitchPreference switchPreference = (SwitchPreference) preference;
+        SwitchPreferenceCompat switchPreference = (SwitchPreferenceCompat) preference;
 
         assertThat(preference.getSummary()).isEqualTo(mChanges[0].getName());
-        assertThat(preference instanceof SwitchPreference).isTrue();
+        assertThat(preference instanceof SwitchPreferenceCompat).isTrue();
         assertThat(switchPreference.isChecked()).isTrue();
         assertThat(switchPreference.isEnabled()).isFalse();
     }
 
-    @Ignore("b/313591873")
     @Test
     public void createChangeCategoryPreference_enabledAndDisabled_hasTitleAndEntries() {
         Set<Long> enabledChanges = new HashSet<>();
@@ -226,7 +225,7 @@
         assertThat(category.getPreferenceCount()).isEqualTo(mChanges.length);
         for (int i = 0; i < mChanges.length; ++i) {
             Preference childPreference = category.getPreference(i);
-            assertThat(childPreference instanceof SwitchPreference).isTrue();
+            assertThat(childPreference instanceof SwitchPreferenceCompat).isTrue();
         }
     }
 }
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenModeBackendTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenModeBackendTest.java
index 247d68e..5c3b5b8 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenModeBackendTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenModeBackendTest.java
@@ -30,9 +30,8 @@
 import android.provider.Settings;
 import android.service.notification.ZenModeConfig;
 
-import com.android.settings.R;
-
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -190,6 +189,7 @@
         }
     }
 
+    @Ignore
     @Test
     public void saveConversationSenders_importantToNone() {
         when(mNotificationManager.getNotificationPolicy()).thenReturn(
@@ -215,6 +215,7 @@
         assertEquals(expected, captor.getValue());
     }
 
+    @Ignore
     @Test
     public void saveConversationSenders_noneToAll() {
         when(mNotificationManager.getNotificationPolicy()).thenReturn(new Policy(
@@ -239,6 +240,7 @@
         assertEquals(expected, captor.getValue());
     }
 
+    @Ignore
     @Test
     public void saveSenders_doesNotChangeConversations() {
         when(mNotificationManager.getNotificationPolicy()).thenReturn(
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenModeSliceBuilderTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenModeSliceBuilderTest.java
index 71f896d..8b76004 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenModeSliceBuilderTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenModeSliceBuilderTest.java
@@ -37,6 +37,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -95,6 +96,7 @@
         assertThat(primaryAction.getIcon()).isNull();
     }
 
+    @Ignore
     @Test
     public void handleUriChange_turnOn_zenModeTurnsOn() {
         final Intent intent = new Intent();
@@ -107,6 +109,7 @@
         assertThat(zenMode).isEqualTo(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
     }
 
+    @Ignore
     @Test
     public void handleUriChange_turnOff_zenModeTurnsOff() {
         final Intent intent = new Intent();
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenOnboardingActivityTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenOnboardingActivityTest.java
index 257eaaf..6063efb 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenOnboardingActivityTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenOnboardingActivityTest.java
@@ -21,8 +21,7 @@
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_ON;
 
 import static com.android.settings.notification.zen.ZenOnboardingActivity.ALWAYS_SHOW_THRESHOLD;
-import static com.android.settings.notification.zen.ZenOnboardingActivity
-        .PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME;
+import static com.android.settings.notification.zen.ZenOnboardingActivity.PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME;
 import static com.android.settings.notification.zen.ZenOnboardingActivity.isSuggestionComplete;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -40,10 +39,10 @@
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.notification.zen.ZenOnboardingActivity;
 import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -92,6 +91,7 @@
         verify(mMetricsLogger).visible(MetricsEvent.SETTINGS_ZEN_ONBOARDING);
     }
 
+    @Ignore
     @Test
     public void saveNewSetting() {
         Policy policy = new Policy(PRIORITY_CATEGORY_ALARMS, 0, 0, SUPPRESSED_EFFECT_SCREEN_ON);
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccountManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccountManager.java
index dae17bc..aa2961c 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccountManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccountManager.java
@@ -31,7 +31,7 @@
 import java.util.Map;
 
 @Implements(AccountManager.class)
-public class ShadowAccountManager {
+public class ShadowAccountManager extends org.robolectric.shadows.ShadowAccountManager {
 
     private static final Map<String, AuthenticatorDescription> sAuthenticators = new HashMap<>();
     private static final Map<Integer, List<Account>> sAccountsByUserId = new HashMap<>();
@@ -41,7 +41,8 @@
         return sAuthenticators.values().toArray(new AuthenticatorDescription[sAuthenticators.size()]);
     }
 
-    public static void addAuthenticator(AuthenticatorDescription authenticator) {
+    @Override
+    public void addAuthenticator(AuthenticatorDescription authenticator) {
         sAuthenticators.put(authenticator.type, authenticator);
     }
 
diff --git a/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java b/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
index c23b53e..947ba75 100644
--- a/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
@@ -148,24 +148,30 @@
     public void setMobileDataEnabled_setEnabled_enabled() {
         MobileNetworkUtils.setMobileDataEnabled(mContext, SUB_ID_1, true, false);
 
-        verify(mTelephonyManager).setDataEnabled(true);
-        verify(mTelephonyManager2, never()).setDataEnabled(anyBoolean());
+        verify(mTelephonyManager)
+                .setDataEnabledForReason(TelephonyManager.DATA_ENABLED_REASON_USER, true);
+        verify(mTelephonyManager2, never())
+                .setDataEnabledForReason(anyInt(), anyBoolean());
     }
 
     @Test
     public void setMobileDataEnabled_setDisabled_disabled() {
         MobileNetworkUtils.setMobileDataEnabled(mContext, SUB_ID_2, true, false);
 
-        verify(mTelephonyManager2).setDataEnabled(true);
-        verify(mTelephonyManager, never()).setDataEnabled(anyBoolean());
+        verify(mTelephonyManager2)
+                .setDataEnabledForReason(TelephonyManager.DATA_ENABLED_REASON_USER, true);
+        verify(mTelephonyManager, never())
+                .setDataEnabledForReason(anyInt(), anyBoolean());
     }
 
     @Test
     public void setMobileDataEnabled_disableOtherSubscriptions() {
         MobileNetworkUtils.setMobileDataEnabled(mContext, SUB_ID_1, true, true);
 
-        verify(mTelephonyManager).setDataEnabled(true);
-        verify(mTelephonyManager2).setDataEnabled(false);
+        verify(mTelephonyManager)
+                .setDataEnabledForReason(TelephonyManager.DATA_ENABLED_REASON_USER, true);
+        verify(mTelephonyManager2)
+                .setDataEnabledForReason(TelephonyManager.DATA_ENABLED_REASON_USER, false);
     }
 
     @Test