diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 109cf38..cea4835 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1381,7 +1381,7 @@
         <activity android:name=".accessibility.AccessibilitySettingsForSetupWizardActivity"
                 android:icon="@drawable/ic_accessibility_suggestion"
                 android:label="@string/vision_settings_title"
-                android:theme="@style/SetupWizardAccessibilityTheme">
+                android:theme="@style/GlifTheme.Light">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.ACCESSIBILITY_SETTINGS_FOR_SUW" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/res/layout-land/choose_lock_pattern.xml b/res/layout-land/choose_lock_pattern.xml
index 1cc4352..5b06f0d 100644
--- a/res/layout-land/choose_lock_pattern.xml
+++ b/res/layout-land/choose_lock_pattern.xml
@@ -44,7 +44,7 @@
             android:orientation="vertical">
 
             <ImageView
-                android:id="@+id/suc_layout_icon"
+                android:id="@+id/sud_layout_icon"
                 style="@style/SudGlifIcon"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
diff --git a/res/layout-land/confirm_lock_pattern_normal.xml b/res/layout-land/confirm_lock_pattern_normal.xml
index 21c9b1e..8bb713f 100644
--- a/res/layout-land/confirm_lock_pattern_normal.xml
+++ b/res/layout-land/confirm_lock_pattern_normal.xml
@@ -40,7 +40,7 @@
                 android:paddingBottom="24dp">
 
                 <ImageView
-                    android:id="@+id/suc_layout_icon"
+                    android:id="@+id/sud_layout_icon"
                     style="@style/SudGlifIcon"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
diff --git a/res/layout-land/fingerprint_enroll_enrolling.xml b/res/layout-land/fingerprint_enroll_enrolling.xml
index ba2c420..734f8a3 100644
--- a/res/layout-land/fingerprint_enroll_enrolling.xml
+++ b/res/layout-land/fingerprint_enroll_enrolling.xml
@@ -49,7 +49,7 @@
                 android:orientation="vertical">
 
                 <ImageView
-                    android:id="@+id/suc_layout_icon"
+                    android:id="@+id/sud_layout_icon"
                     style="@style/SudGlifIcon"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
diff --git a/res/layout-land/fingerprint_enroll_find_sensor.xml b/res/layout-land/fingerprint_enroll_find_sensor.xml
index 28d982e..6d8794a 100644
--- a/res/layout-land/fingerprint_enroll_find_sensor.xml
+++ b/res/layout-land/fingerprint_enroll_find_sensor.xml
@@ -55,7 +55,7 @@
                     android:clipToPadding="false">
 
                     <ImageView
-                        android:id="@+id/suc_layout_icon"
+                        android:id="@+id/sud_layout_icon"
                         style="@style/SudGlifIcon"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
diff --git a/res/layout-land/fingerprint_enroll_finish.xml b/res/layout-land/fingerprint_enroll_finish.xml
index 7d292c6..e80176d 100644
--- a/res/layout-land/fingerprint_enroll_finish.xml
+++ b/res/layout-land/fingerprint_enroll_finish.xml
@@ -45,7 +45,7 @@
                 android:orientation="vertical">
 
                 <ImageView
-                    android:id="@+id/suc_layout_icon"
+                    android:id="@+id/sud_layout_icon"
                     style="@style/SudGlifIcon"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
diff --git a/res/layout/choose_lock_pattern_common.xml b/res/layout/choose_lock_pattern_common.xml
index 2ebcd9b..5d3cbca 100644
--- a/res/layout/choose_lock_pattern_common.xml
+++ b/res/layout/choose_lock_pattern_common.xml
@@ -41,7 +41,7 @@
             android:orientation="vertical">
 
             <ImageView
-                android:id="@+id/suc_layout_icon"
+                android:id="@+id/sud_layout_icon"
                 style="@style/SudGlifIcon"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
diff --git a/res/layout/confirm_lock_pattern_normal_base.xml b/res/layout/confirm_lock_pattern_normal_base.xml
index a08d516..03d3367 100644
--- a/res/layout/confirm_lock_pattern_normal_base.xml
+++ b/res/layout/confirm_lock_pattern_normal_base.xml
@@ -33,7 +33,7 @@
             android:orientation="vertical">
 
             <ImageView
-                android:id="@+id/suc_layout_icon"
+                android:id="@+id/sud_layout_icon"
                 style="@style/SudGlifIcon"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
diff --git a/res/layout/encryption_interstitial.xml b/res/layout/encryption_interstitial.xml
index 3e227cb1..a2305f8 100644
--- a/res/layout/encryption_interstitial.xml
+++ b/res/layout/encryption_interstitial.xml
@@ -17,7 +17,6 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:icon="@drawable/ic_lock">
diff --git a/res/layout/face_enroll_enrolling.xml b/res/layout/face_enroll_enrolling.xml
index e7af493..7e1863b 100644
--- a/res/layout/face_enroll_enrolling.xml
+++ b/res/layout/face_enroll_enrolling.xml
@@ -17,7 +17,6 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/res/layout/face_enroll_finish.xml b/res/layout/face_enroll_finish.xml
index 62176a7..d3c0479 100644
--- a/res/layout/face_enroll_finish.xml
+++ b/res/layout/face_enroll_finish.xml
@@ -17,7 +17,6 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/setup_wizard_layout"
     style="?attr/face_layout_theme"
     android:layout_width="match_parent"
diff --git a/res/layout/fingerprint_enroll_enrolling_base.xml b/res/layout/fingerprint_enroll_enrolling_base.xml
index 3a476fa..eed6fab 100644
--- a/res/layout/fingerprint_enroll_enrolling_base.xml
+++ b/res/layout/fingerprint_enroll_enrolling_base.xml
@@ -17,7 +17,6 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/res/layout/fingerprint_enroll_find_sensor_base.xml b/res/layout/fingerprint_enroll_find_sensor_base.xml
index c03ac5a..2bef539 100644
--- a/res/layout/fingerprint_enroll_find_sensor_base.xml
+++ b/res/layout/fingerprint_enroll_find_sensor_base.xml
@@ -17,7 +17,6 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/setup_wizard_layout"
     style="?attr/fingerprint_layout_theme"
     android:layout_width="match_parent"
diff --git a/res/layout/fingerprint_enroll_finish_base.xml b/res/layout/fingerprint_enroll_finish_base.xml
index 2fa5da6..d85c56c 100644
--- a/res/layout/fingerprint_enroll_finish_base.xml
+++ b/res/layout/fingerprint_enroll_finish_base.xml
@@ -17,7 +17,6 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/setup_wizard_layout"
     style="?attr/fingerprint_layout_theme"
     android:layout_width="match_parent"
diff --git a/res/layout/fingerprint_enroll_introduction.xml b/res/layout/fingerprint_enroll_introduction.xml
index 4ee7057..47d2f02 100644
--- a/res/layout/fingerprint_enroll_introduction.xml
+++ b/res/layout/fingerprint_enroll_introduction.xml
@@ -17,7 +17,6 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     style="?attr/fingerprint_layout_theme"
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
diff --git a/res/layout/storage_wizard_generic.xml b/res/layout/storage_wizard_generic.xml
index 2b96101..e7881d3 100644
--- a/res/layout/storage_wizard_generic.xml
+++ b/res/layout/storage_wizard_generic.xml
@@ -16,7 +16,6 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/res/layout/storage_wizard_init.xml b/res/layout/storage_wizard_init.xml
index d02e871..8d9870f 100644
--- a/res/layout/storage_wizard_init.xml
+++ b/res/layout/storage_wizard_init.xml
@@ -16,7 +16,6 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/res/layout/storage_wizard_progress.xml b/res/layout/storage_wizard_progress.xml
index cf5bc43..577ec3c 100644
--- a/res/layout/storage_wizard_progress.xml
+++ b/res/layout/storage_wizard_progress.xml
@@ -16,7 +16,6 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index dd6d7a3..11281c2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10955,17 +10955,15 @@
     <string name="permission_bar_chart_empty_text">0 apps used permissions</string>
 
     <!-- Text for permission bar chart title in Privacy page.  [CHAR LIMIT=NONE] -->
-    <string name="permission_bar_chart_title">Most-used permissions in last 24 hours</string>
-    <!-- Text for permission bar chart title in Privacy page.  [CHAR LIMIT=NONE] -->
-    <string name="permission_bar_chart_title_v2">In last 24 hr, apps on this device accessed</string>
+    <string name="permission_bar_chart_title">Permission usage in last 24 hours</string>
 
     <!-- Text for permission bar chart details in Privacy page.  [CHAR LIMIT=NONE] -->
-    <string name="permission_bar_chart_details">View Permissions Dashboard</string>
+    <string name="permission_bar_chart_details">See all in Dashboard</string>
 
-    <!-- Text for permission bar chart details in Privacy page.  [CHAR LIMIT=NONE] -->
-    <string name="permission_bar_chart_details_v2">See all permission usage in Dashboard</string>
-    <!-- Text for permission bar chart details in Privacy page.  [CHAR LIMIT=NONE] -->
-    <string name="permission_bar_chart_details_v3">+ <xliff:g id="permissionCount" example="3">%1$d</xliff:g> other permissions</string>
+    <plurals name="permission_bar_chart_label">
+        <item quantity="one">1 app</item>
+        <item quantity="other"><xliff:g id="number" example="7">%s</xliff:g> apps</item>
+    </plurals>
 
     <!-- Title for the accessibility usage preference in the Privacy page.  [CHAR LIMIT=NONE] -->
     <string name="accessibility_usage_title">Accessibility usage</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 8fde9a0..02db995 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -533,4 +533,9 @@
         <item name="android:paddingEnd">8dp</item>
     </style>
 
+    <style name="SetupWizardPartnerResource">
+        <!-- Disable to use partner overlay theme for outside setupwizard flow. -->
+        <item name="sucUsePartnerResource">false</item>
+    </style>
+
 </resources>
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index a9af2d4..908529e 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -36,6 +36,10 @@
             android:dialogTitle="@*android:string/bugreport_title" />
 
         <Preference
+            android:key="system_server_heap_dump"
+            android:title="@string/capture_system_heap_dump_title" />
+
+        <Preference
             android:key="local_backup_password"
             android:title="@string/local_backup_password_title"
             android:summary="@string/local_backup_password_summary_none"
@@ -151,6 +155,11 @@
             android:title="@string/bugreport_in_power"
             android:summary="@string/bugreport_in_power_summary" />
 
+        <SwitchPreference
+            android:key="automatic_system_server_heap_dumps"
+            android:title="@string/automatic_system_heap_dump_title"
+            android:summary="@string/automatic_system_heap_dump_summary" />
+
         <Preference android:key="mock_location_app"
                     android:title="@string/mock_location_app" />
 
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 001e65b..92a0f73 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -27,6 +27,7 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources.Theme;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.UserHandle;
@@ -334,6 +335,12 @@
     }
 
     @Override
+    protected void onApplyThemeResource(Theme theme, int resid, boolean first) {
+        theme.applyStyle(R.style.SetupWizardPartnerResource, true);
+        super.onApplyThemeResource(theme, resid, first);
+    }
+
+    @Override
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         final List<Fragment> fragments = getSupportFragmentManager().getFragments();
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
index 46a6371..16f5fcd 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
@@ -23,13 +23,19 @@
 import android.content.pm.ServiceInfo;
 import android.os.Bundle;
 import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityManager;
 
 import androidx.preference.Preference;
+import androidx.recyclerview.widget.RecyclerView;
 
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 
+import com.google.android.setupdesign.GlifPreferenceLayout;
+
 import java.util.List;
 
 /**
@@ -64,6 +70,23 @@
     }
 
     @Override
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+
+        GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
+        layout.setDividerInsets(Integer.MAX_VALUE, 0);
+
+        layout.setHeaderText(R.string.vision_settings_title);
+    }
+
+    @Override
+    public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
+        Bundle savedInstanceState) {
+        GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
+        return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
+    }
+
+    @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         addPreferencesFromResource(R.xml.accessibility_settings_for_setup_wizard);
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
index 9512f01..fc68d2c 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -34,14 +34,6 @@
     private static final String SAVE_KEY_TITLE = "activity_title";
 
     @Override
-    protected void onCreate(Bundle savedState) {
-        super.onCreate(savedState);
-
-        // Finish configuring the content view.
-        getActionBar().setDisplayHomeAsUpEnabled(true);
-    }
-
-    @Override
     protected void onSaveInstanceState(Bundle savedState) {
         savedState.putCharSequence(SAVE_KEY_TITLE, getTitle());
         super.onSaveInstanceState(savedState);
diff --git a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
index 4bda99e..55e85f9 100644
--- a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
+++ b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
@@ -145,7 +145,7 @@
                 mContext.getString(R.string.config_settingsintelligence_package_name));
         final LocationManager locationManager =
                 (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
-        final String locationHistoryPackage = locationManager.getLocationControllerExtraPackage();
+        final String locationHistoryPackage = locationManager.getExtraLocationControllerPackage();
         if (locationHistoryPackage != null) {
             keepEnabledPackages.add(locationHistoryPackage);
         }
diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
index 4987286..183d384 100755
--- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
+++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
@@ -187,6 +187,9 @@
         if (!ensurePackageInfoAvailable(activity)) {
             return;
         }
+        if (!ensureDisplayableModule(activity)) {
+            return;
+        }
         startListeningToPackageRemove();
 
         setHasOptionsMenu(true);
@@ -260,8 +263,8 @@
                 new InstantAppButtonsPreferenceController(context, this, packageName, lifecycle);
         controllers.add(mInstantAppButtonPreferenceController);
         mAppButtonsPreferenceController = new AppButtonsPreferenceController(
-            (SettingsActivity) getActivity(), this, lifecycle, packageName, mState,
-            REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
+                (SettingsActivity) getActivity(), this, lifecycle, packageName, mState,
+                REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
         controllers.add(mAppButtonsPreferenceController);
         controllers.add(new AppBatteryPreferenceController(context, this, packageName, lifecycle));
         controllers.add(new AppMemoryPreferenceController(context, this, lifecycle));
@@ -318,6 +321,23 @@
         return true;
     }
 
+    /**
+     * Ensures the package is displayable as directed by {@link AppUtils#isHiddenSystemModule}.
+     * If it's not, the fragment will finish.
+     *
+     * @return true if package is displayable.
+     */
+    @VisibleForTesting
+    boolean ensureDisplayableModule(Activity activity) {
+        if (AppUtils.isHiddenSystemModule(activity.getApplicationContext(), mPackageName)) {
+            mFinishing = true;
+            Log.w(TAG, "Package is hidden module, exiting: " + mPackageName);
+            activity.finishAndRemoveTask();
+            return false;
+        }
+        return true;
+    }
+
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         super.onCreateOptionsMenu(menu, inflater);
diff --git a/src/com/android/settings/biometrics/BiometricEnrollBase.java b/src/com/android/settings/biometrics/BiometricEnrollBase.java
index 9c9f4fa..a961921 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollBase.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollBase.java
@@ -21,6 +21,7 @@
 import android.annotation.Nullable;
 import android.content.Intent;
 import android.content.res.Resources;
+import android.content.res.Resources.Theme;
 import android.graphics.Color;
 import android.os.Bundle;
 import android.os.UserHandle;
@@ -97,6 +98,7 @@
     @Override
     protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
         resid = SetupWizardUtils.getTheme(getIntent());
+        theme.applyStyle(R.style.SetupWizardPartnerResource, true);
         super.onApplyThemeResource(theme, resid, first);
     }
 
diff --git a/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java b/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java
index 2c4db1f..1d2d793 100644
--- a/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java
+++ b/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java
@@ -62,6 +62,7 @@
     @VisibleForTesting
     final Map<String, Bitmap> mIconCache;
     private CachedBluetoothDevice mCachedDevice;
+    private BluetoothDevice mBluetoothDevice;
     @VisibleForTesting
     BluetoothAdapter mBluetoothAdapter;
     @VisibleForTesting
@@ -102,6 +103,9 @@
 
     @Override
     public void onStart() {
+        if (!isAvailable()) {
+            return;
+        }
         mCachedDevice.registerCallback(this::onDeviceAttributesChanged);
         mBluetoothAdapter.registerMetadataListener(mCachedDevice.getDevice(), mMetadataListener,
                 mHandler);
@@ -109,6 +113,9 @@
 
     @Override
     public void onStop() {
+        if (!isAvailable()) {
+            return;
+        }
         mCachedDevice.unregisterCallback(this::onDeviceAttributesChanged);
         mBluetoothAdapter.unregisterMetadataListener(mCachedDevice.getDevice());
 
@@ -123,6 +130,7 @@
 
     public void init(CachedBluetoothDevice cachedBluetoothDevice) {
         mCachedDevice = cachedBluetoothDevice;
+        mBluetoothDevice = mCachedDevice.getDevice();
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/development/AutomaticSystemServerHeapDumpPreferenceController.java b/src/com/android/settings/development/AutomaticSystemServerHeapDumpPreferenceController.java
new file mode 100644
index 0000000..aa76bb8
--- /dev/null
+++ b/src/com/android/settings/development/AutomaticSystemServerHeapDumpPreferenceController.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2019 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.development;
+
+import android.content.Context;
+import android.os.Build;
+import android.os.UserManager;
+import android.provider.Settings;
+
+import androidx.preference.Preference;
+import androidx.preference.SwitchPreference;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class AutomaticSystemServerHeapDumpPreferenceController extends
+        DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+        PreferenceControllerMixin {
+
+    private static final String KEY_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS =
+            "automatic_system_server_heap_dumps";
+
+    private static final int SETTING_VALUE_OFF = 0;
+    private static final int SETTING_VALUE_ON = 1;
+
+    private final UserManager mUserManager;
+    private final boolean mIsConfigEnabled;
+
+    public AutomaticSystemServerHeapDumpPreferenceController(Context context) {
+        super(context);
+        mIsConfigEnabled = context.getResources().getBoolean(
+                com.android.internal.R.bool.config_debugEnableAutomaticSystemServerHeapDumps);
+        mUserManager = context.getSystemService(UserManager.class);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return Build.IS_DEBUGGABLE && mIsConfigEnabled
+                && !mUserManager.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        final boolean isEnabled = (Boolean) newValue;
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Global.ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS,
+                isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
+        return true;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        final int mode = Settings.Secure.getInt(mContext.getContentResolver(),
+                Settings.Global.ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS, SETTING_VALUE_ON);
+        ((SwitchPreference) mPreference).setChecked(mode != SETTING_VALUE_OFF);
+    }
+
+    @Override
+    protected void onDeveloperOptionsSwitchDisabled() {
+        super.onDeveloperOptionsSwitchDisabled();
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Global.ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS, SETTING_VALUE_OFF);
+        ((SwitchPreference) mPreference).setChecked(false);
+    }
+}
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index adc23a8..e9fc759 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -404,6 +404,7 @@
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new MemoryUsagePreferenceController(context));
         controllers.add(new BugReportPreferenceController(context));
+        controllers.add(new SystemServerHeapDumpPreferenceController(context));
         controllers.add(new LocalBackupPasswordPreferenceController(context));
         controllers.add(new StayAwakePreferenceController(context, lifecycle));
         controllers.add(new HdcpCheckingPreferenceController(context));
@@ -418,6 +419,7 @@
         controllers.add(new ClearAdbKeysPreferenceController(context, fragment));
         controllers.add(new LocalTerminalPreferenceController(context));
         controllers.add(new BugReportInPowerPreferenceController(context));
+        controllers.add(new AutomaticSystemServerHeapDumpPreferenceController(context));
         controllers.add(new MockLocationAppPreferenceController(context, fragment));
         controllers.add(new DebugViewAttributesPreferenceController(context));
         controllers.add(new SelectDebugAppPreferenceController(context, fragment));
diff --git a/src/com/android/settings/development/SystemServerHeapDumpPreferenceController.java b/src/com/android/settings/development/SystemServerHeapDumpPreferenceController.java
new file mode 100644
index 0000000..599162e
--- /dev/null
+++ b/src/com/android/settings/development/SystemServerHeapDumpPreferenceController.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2019 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.development;
+
+import android.app.ActivityManager;
+import android.content.Context;
+import android.os.Build;
+import android.os.Handler;
+import android.os.RemoteException;
+import android.os.UserManager;
+import android.util.Log;
+import android.widget.Toast;
+
+import androidx.preference.Preference;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class SystemServerHeapDumpPreferenceController extends DeveloperOptionsPreferenceController
+        implements PreferenceControllerMixin {
+
+    private static final String KEY_SYSTEM_SERVER_HEAP_DUMP = "system_server_heap_dump";
+
+    /** How long to keep the preference disabled before re-enabling. */
+    private static final long ENABLE_TIMEOUT_MILLIS = 5000L;
+
+    private final UserManager mUserManager;
+
+    private Handler mHandler;
+
+    public SystemServerHeapDumpPreferenceController(Context context) {
+        super(context);
+
+        mUserManager = context.getSystemService(UserManager.class);
+        mHandler = new Handler();
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return Build.IS_DEBUGGABLE
+                && !mUserManager.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_SYSTEM_SERVER_HEAP_DUMP;
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (!KEY_SYSTEM_SERVER_HEAP_DUMP.equals(preference.getKey())) {
+            return false;
+        }
+        try {
+            // Temporarily disable the preference so the user doesn't start two dumps in a row.
+            preference.setEnabled(false);
+            Toast.makeText(mContext, R.string.capturing_system_heap_dump_message,
+                    Toast.LENGTH_SHORT).show();
+            ActivityManager.getService().requestSystemServerHeapDump();
+            mHandler.postDelayed(() -> preference.setEnabled(true), ENABLE_TIMEOUT_MILLIS);
+            return true;
+        } catch (RemoteException e) {
+            Log.e(TAG, "error taking system heap dump", e);
+            Toast.makeText(mContext, R.string.error_capturing_system_heap_dump_message,
+                    Toast.LENGTH_SHORT).show();
+        }
+        return false;
+    }
+}
diff --git a/src/com/android/settings/deviceinfo/StorageWizardBase.java b/src/com/android/settings/deviceinfo/StorageWizardBase.java
index 48cdeeb..3873389 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardBase.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardBase.java
@@ -24,6 +24,7 @@
 import android.annotation.LayoutRes;
 import android.annotation.NonNull;
 import android.content.Intent;
+import android.content.res.Resources.Theme;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.SystemClock;
@@ -123,6 +124,12 @@
         super.onDestroy();
     }
 
+    @Override
+    protected void onApplyThemeResource(Theme theme, int resid, boolean first) {
+        theme.applyStyle(R.style.SetupWizardPartnerResource, true);
+        super.onApplyThemeResource(theme, resid, first);
+    }
+
     protected FooterButton getBackButton() {
         return mBack;
     }
diff --git a/src/com/android/settings/inputmethod/UserDictionaryListPreferenceController.java b/src/com/android/settings/inputmethod/UserDictionaryListPreferenceController.java
index 4a409e1..9343493 100644
--- a/src/com/android/settings/inputmethod/UserDictionaryListPreferenceController.java
+++ b/src/com/android/settings/inputmethod/UserDictionaryListPreferenceController.java
@@ -174,7 +174,10 @@
             mScreen.addPreference(createUserDictionaryPreference(null));
         } else {
             for (String locale : localeSet) {
-                mScreen.addPreference(createUserDictionaryPreference(locale));
+                final Preference pref = createUserDictionaryPreference(locale);
+                if (mScreen.findPreference(pref.getKey()) == null) {
+                    mScreen.addPreference(pref);
+                }
             }
         }
     }
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index d89ad30..e0974fe 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -479,7 +479,7 @@
                     R.layout.choose_lock_pattern, container, false);
             layout.setHeaderText(getActivity().getTitle());
             if (getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui)) {
-                View iconView = layout.findViewById(R.id.suc_layout_icon);
+                View iconView = layout.findViewById(R.id.sud_layout_icon);
                 if (iconView != null) {
                     iconView.setVisibility(View.GONE);
                 }
diff --git a/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java b/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java
index 7c55b51..b47ad9c 100644
--- a/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java
+++ b/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java
@@ -163,12 +163,13 @@
 
         for (int index = 0; index < barViewInfos.length; index++) {
             final RuntimePermissionUsageInfo permissionGroupInfo = usageInfos.get(index);
+            final int count = permissionGroupInfo.getAppAccessCount();
+            final CharSequence permLabel = getPermissionGroupLabel(permissionGroupInfo.getName());
 
             barViewInfos[index] = new BarViewInfo(
-                    getPermissionGroupIcon(permissionGroupInfo.getName()),
-                    permissionGroupInfo.getAppAccessCount(),
-                    R.string.storage_detail_apps,
-                    getPermissionGroupLabel(permissionGroupInfo.getName()));
+                    getPermissionGroupIcon(permissionGroupInfo.getName()), count, permLabel,
+                    mContext.getResources().getQuantityString(R.plurals.permission_bar_chart_label,
+                            count, count), permLabel);
 
             // Set the click listener for each bar view.
             // The listener will navigate user to permission usage app.
diff --git a/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java b/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
index 84f1c36..2bf411a 100644
--- a/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
@@ -34,7 +34,6 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.wifi.AddNetworkFragment;
-import com.android.settings.wifi.savedaccesspoints.SavedNetworkComparator;
 import com.android.settingslib.wifi.AccessPoint;
 import com.android.settingslib.wifi.AccessPointPreference;
 import com.android.settingslib.wifi.WifiSavedConfigUtils;
@@ -43,6 +42,7 @@
 
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 public class WifiNetworkListFragment extends SettingsPreferenceFragment implements
         WifiTracker.WifiListener, AccessPoint.AccessPointListener {
@@ -282,27 +282,38 @@
             return;
         }
 
-        // TODO(b/128942314): Lists reachable AccessPoints on top of the list
-        final List<AccessPoint> savedAccessPoints =
+        List<AccessPoint> savedAccessPoints =
                 WifiSavedConfigUtils.getAllConfigs(getContext(), mWifiManager);
-        Collections.sort(savedAccessPoints, SavedNetworkComparator.INSTANCE);
+
+        savedAccessPoints = savedAccessPoints.stream()
+                .filter(accessPoint -> isValidForDppConfiguration(accessPoint))
+                .map(accessPoint -> getScannedAccessPointIfAvailable(accessPoint))
+                .sorted((ap1, ap2) -> {
+                    // orders reachable Wi-Fi networks on top
+                    if (ap1.isReachable() && !ap2.isReachable()) {
+                        return -1;
+                    } else if (!ap1.isReachable() && ap2.isReachable()) {
+                        return 1;
+                    }
+
+                    String ap1Title = nullToEmpty(ap1.getTitle());
+                    String ap2Title = nullToEmpty(ap2.getTitle());
+
+                    return ap1Title.compareToIgnoreCase(ap2Title);
+                }).collect(Collectors.toList());
 
         int index = 0;
         mAccessPointsPreferenceCategory.removeAll();
         for (AccessPoint savedAccessPoint : savedAccessPoints) {
-            if (isValidForDppConfiguration(savedAccessPoint)) {
-                // Replaces with an AccessPoint from scanned result for signal information
-                savedAccessPoint = getScannedAccessPointIfAvailable(savedAccessPoint);
-                final AccessPointPreference preference =
-                        createAccessPointPreference(savedAccessPoint);
+            final AccessPointPreference preference =
+                    createAccessPointPreference(savedAccessPoint);
 
-                preference.setOrder(index++);
-                preference.setEnabled(savedAccessPoint.isReachable());
-                savedAccessPoint.setListener(this);
+            preference.setOrder(index++);
+            preference.setEnabled(savedAccessPoint.isReachable());
+            savedAccessPoint.setListener(this);
 
-                preference.refresh();
-                mAccessPointsPreferenceCategory.addPreference(preference);
-            }
+            preference.refresh();
+            mAccessPointsPreferenceCategory.addPreference(preference);
         }
         mAddPreference.setOrder(index);
         mAccessPointsPreferenceCategory.addPreference(mAddPreference);
@@ -312,6 +323,11 @@
         }
     }
 
+    private String nullToEmpty(String string) {
+        return (string == null) ? "" : string;
+    }
+
+    // Replaces with an AccessPoint from scanned result for signal information
     private AccessPoint getScannedAccessPointIfAvailable(AccessPoint savedAccessPoint) {
         final List<AccessPoint> scannedAccessPoints = mWifiTracker.getAccessPoints();
         final WifiConfiguration savedWifiConfiguration = savedAccessPoint.getConfig();
diff --git a/tests/robotests/assets/grandfather_invalid_base_preference_controller_constructor b/tests/robotests/assets/grandfather_invalid_base_preference_controller_constructor
index a723842..675108d 100644
--- a/tests/robotests/assets/grandfather_invalid_base_preference_controller_constructor
+++ b/tests/robotests/assets/grandfather_invalid_base_preference_controller_constructor
@@ -10,8 +10,5 @@
 com.android.settings.fuelgauge.RestrictAppPreferenceController
 com.android.settings.fuelgauge.batterysaver.BatterySaverButtonPreferenceController
 com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController
-com.android.settings.gestures.SystemNavigationEdgeToEdgePreferenceController
-com.android.settings.gestures.SystemNavigationLegacyPreferenceController
-com.android.settings.gestures.SystemNavigationSwipeUpPreferenceController
 com.android.settings.security.VisiblePatternProfilePreferenceController
 com.android.settings.wifi.details.WifiMeteredPreferenceController
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java
new file mode 100644
index 0000000..d6b12c3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2019 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Intent;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.settings.R;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+@SmallTest
+public class AccessibilitySettingsForSetupWizardActivityTest {
+
+  @Test
+  public void createSetupAccessibilityActivity_shouldBeSUWTheme() {
+    final Intent intent = new Intent();
+    AccessibilitySettingsForSetupWizardActivity activity =
+        Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, intent).get();
+
+    assertThat(activity.getThemeResId()).isEqualTo(R.style.GlifTheme_Light);
+  }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
index ebbf5e0..e22b29b 100644
--- a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
@@ -272,7 +272,7 @@
 
         // Spy the real context to mock LocationManager.
         Context spyContext = spy(RuntimeEnvironment.application);
-        when(mLocationManager.getLocationControllerExtraPackage()).thenReturn(testLocationHistory);
+        when(mLocationManager.getExtraLocationControllerPackage()).thenReturn(testLocationHistory);
         when(spyContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager);
 
         ReflectionHelpers.setField(mProvider, "mContext", spyContext);
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
index 9e44c95..56e59f7 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
@@ -17,8 +17,7 @@
 package com.android.settings.applications.appinfo;
 
 import static com.android.settings.applications.appinfo.AppInfoDashboardFragment.ARG_PACKAGE_NAME;
-import static com.android.settings.applications.appinfo.AppInfoDashboardFragment
-        .UNINSTALL_ALL_USERS_MENU;
+import static com.android.settings.applications.appinfo.AppInfoDashboardFragment.UNINSTALL_ALL_USERS_MENU;
 import static com.android.settings.applications.appinfo.AppInfoDashboardFragment.UNINSTALL_UPDATES;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -43,6 +42,7 @@
 import android.content.pm.UserInfo;
 import android.os.Bundle;
 import android.os.UserManager;
+import android.util.ArraySet;
 import android.view.Menu;
 import android.view.MenuItem;
 
@@ -53,6 +53,7 @@
 import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -63,10 +64,14 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.annotation.Resetter;
 import org.robolectric.util.ReflectionHelpers;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 @RunWith(RobolectricTestRunner.class)
 public final class AppInfoDashboardFragmentTest {
@@ -101,6 +106,11 @@
                 (InstantAppDataProvider) (i -> false));
     }
 
+    @After
+    public void tearDown() {
+        ShadowAppUtils.reset();
+    }
+
     @Test
     public void shouldShowUninstallForAll_installForOneOtherUserOnly_shouldReturnTrue() {
         when(mDevicePolicyManager.packageHasActiveAdmins(nullable(String.class))).thenReturn(false);
@@ -187,6 +197,24 @@
     }
 
     @Test
+    @Config(shadows = ShadowAppUtils.class)
+    public void ensureDisplayableModule_hiddenModule_shouldReturnFalse() {
+        ShadowAppUtils.addHiddenModule(PACKAGE_NAME);
+        ReflectionHelpers.setField(mFragment, "mPackageName", PACKAGE_NAME);
+
+
+        assertThat(mFragment.ensureDisplayableModule(mActivity)).isFalse();
+    }
+
+    @Test
+    @Config(shadows = ShadowAppUtils.class)
+    public void ensureDisplayableModule_regularApp_shouldReturnTrue() {
+        ReflectionHelpers.setField(mFragment, "mPackageName", PACKAGE_NAME);
+
+        assertThat(mFragment.ensureDisplayableModule(mActivity)).isTrue();
+    }
+
+    @Test
     public void createPreference_hasNoPackageInfo_shouldSkip() {
         ReflectionHelpers.setField(mFragment, "mPackageInfo", null);
 
@@ -240,7 +268,8 @@
         doReturn(true).when(mFragment).refreshUi();
 
         mFragment
-            .onActivityResult(AppInfoDashboardFragment.REQUEST_UNINSTALL, 0, mock(Intent.class));
+                .onActivityResult(AppInfoDashboardFragment.REQUEST_UNINSTALL, 0,
+                        mock(Intent.class));
 
         verify(mActivity).invalidateOptionsMenu();
     }
@@ -347,4 +376,24 @@
                 .containsKey(ARG_PACKAGE_NAME))
                 .isTrue();
     }
+
+    @Implements(AppUtils.class)
+    public static class ShadowAppUtils {
+
+        public static Set<String> sHiddenModules = new ArraySet<>();
+
+        @Resetter
+        public static void reset() {
+            sHiddenModules.clear();
+        }
+
+        public static void addHiddenModule(String pkg) {
+            sHiddenModules.add(pkg);
+        }
+
+        @Implementation
+        protected static boolean isHiddenSystemModule(Context context, String packageName) {
+            return sHiddenModules.contains(packageName);
+        }
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
index 5538155..b961669 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
@@ -18,6 +18,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -78,6 +79,7 @@
 
         mContext = RuntimeEnvironment.application;
         mController = new AdvancedBluetoothDetailsHeaderController(mContext, "pref_Key");
+        when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice);
         mController.init(mCachedDevice);
         mLayoutPreference = new LayoutPreference(mContext,
                 LayoutInflater.from(mContext).inflate(R.layout.advanced_bt_entity_header, null));
@@ -166,7 +168,10 @@
     }
 
     @Test
-    public void onStart_registerCallback() {
+    public void onStart_isAvailable_registerCallback() {
+        when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET))
+                .thenReturn("true");
+
         mController.onStart();
 
         verify(mBluetoothAdapter).registerMetadataListener(mBluetoothDevice,
@@ -174,12 +179,36 @@
     }
 
     @Test
-    public void onStop_unregisterCallback() {
+    public void onStop_isAvailable_unregisterCallback() {
+        when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET))
+                .thenReturn("true");
+
         mController.onStop();
 
         verify(mBluetoothAdapter).unregisterMetadataListener(mBluetoothDevice);
     }
 
+    @Test
+    public void onStart_notAvailable_registerCallback() {
+        when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET))
+                .thenReturn("false");
+
+        mController.onStart();
+
+        verify(mBluetoothAdapter, never()).registerMetadataListener(mBluetoothDevice,
+                mController.mMetadataListener, mController.mHandler);
+    }
+
+    @Test
+    public void onStop_notAvailable_unregisterCallback() {
+        when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET))
+                .thenReturn("false");
+
+        mController.onStop();
+
+        verify(mBluetoothAdapter, never()).unregisterMetadataListener(mBluetoothDevice);
+    }
+
     private void assertBatteryLevel(LinearLayout linearLayout, int batteryLevel) {
         final TextView textView = linearLayout.findViewById(R.id.bt_battery_summary);
         assertThat(textView.getText().toString()).isEqualTo(
diff --git a/tests/robotests/src/com/android/settings/core/BasePreferenceControllerSignatureInspector.java b/tests/robotests/src/com/android/settings/core/BasePreferenceControllerSignatureInspector.java
index 28e394f..2d1dc5c 100644
--- a/tests/robotests/src/com/android/settings/core/BasePreferenceControllerSignatureInspector.java
+++ b/tests/robotests/src/com/android/settings/core/BasePreferenceControllerSignatureInspector.java
@@ -58,12 +58,17 @@
             if (constructors == null || constructors.length == 0) {
                 badClasses.append(c.getName()).append(",");
             }
+
+            boolean hasValidConstructor = false;
             for (Constructor constructor : constructors) {
-                if (!hasValidConstructorSignature(constructor)) {
-                    badClasses.append(className).append(",");
-                    continue;
+                if (hasValidConstructorSignature(constructor)) {
+                    hasValidConstructor = true;
+                    break;
                 }
             }
+            if (!hasValidConstructor) {
+                badClasses.append(className).append(",");
+            }
         }
 
         assertWithMessage("All BasePreferenceController (and subclasses) constructor must either"
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
index 4bc8374..48ebbec 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
@@ -32,7 +32,6 @@
 
 import com.google.android.setupdesign.GlifLayout;
 
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.Robolectric;
@@ -93,7 +92,6 @@
 
     @Config(qualifiers = "sw400dp")
     @Test
-    @Ignore("b/129342100")
     public void fingerprintExtraSet_shouldDisplayFingerprintIcon() {
         ChooseLockPattern activity = createActivity(true);
         ChooseLockPatternFragment fragment = (ChooseLockPatternFragment)
@@ -109,7 +107,7 @@
         ChooseLockPatternFragment fragment = (ChooseLockPatternFragment)
                 activity.getSupportFragmentManager().findFragmentById(R.id.main_content);
 
-        View iconView = fragment.getView().findViewById(R.id.suc_layout_icon);
+        View iconView = fragment.getView().findViewById(R.id.sud_layout_icon);
         assertThat(iconView.getVisibility()).isEqualTo(View.GONE);
     }
 
diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
index 947d618..0a565cd 100644
--- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
@@ -53,6 +53,7 @@
 import android.net.wifi.WifiManager;
 import android.os.Handler;
 import android.provider.Settings;
+import android.util.FeatureFlagUtils;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.ImageView;
@@ -77,7 +78,6 @@
 import com.android.settingslib.wifi.AccessPoint;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
@@ -99,7 +99,6 @@
 
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowDevicePolicyManager.class, ShadowEntityHeaderController.class})
-@Ignore("b/129292549")
 public class WifiDetailPreferenceControllerTest {
 
     private static final int LEVEL = 1;
@@ -274,6 +273,11 @@
         when(mockIconInjector.getIcon(anyInt())).thenReturn(new ColorDrawable());
 
         setupMockedPreferenceScreen();
+
+        // Disable saved network detail page feature for this test
+        FeatureFlagUtils.setEnabled(mContext, FeatureFlags.WIFI_DETAILS_SAVED_SCREEN, false);
+        when(mockAccessPoint.isActive()).thenReturn(true);
+
         mController = newWifiDetailPreferenceController();
     }
 
@@ -948,6 +952,12 @@
         when(pref.setButton3Visible(anyBoolean())).thenReturn(pref);
         when(pref.setButton3OnClickListener(any(View.OnClickListener.class))).thenReturn(pref);
 
+        when(pref.setButton4Text(anyInt())).thenReturn(pref);
+        when(pref.setButton4Icon(anyInt())).thenReturn(pref);
+        when(pref.setButton4Enabled(anyBoolean())).thenReturn(pref);
+        when(pref.setButton4Visible(anyBoolean())).thenReturn(pref);
+        when(pref.setButton4OnClickListener(any(View.OnClickListener.class))).thenReturn(pref);
+
         return pref;
     }
 }
