diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4fa3964..eae5eaa 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2362,7 +2362,6 @@
             android:name="Settings$DataUsageSummaryActivity"
             android:label="@string/data_usage_summary_title"
             android:icon="@drawable/ic_settings_data_usage"
-            android:enabled="false"
             android:taskAffinity="com.android.settings"
             android:parentActivityName="Settings">
             <intent-filter android:priority="1">
diff --git a/res/layout/screen_zoom_preview_2.xml b/res/layout/screen_zoom_preview_2.xml
index b61f92a..2cfd9b7 100644
--- a/res/layout/screen_zoom_preview_2.xml
+++ b/res/layout/screen_zoom_preview_2.xml
@@ -17,4 +17,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:padding="32dp"
+    android:numColumns="3"
+    android:gravity="center"
     android:importantForAccessibility="noHideDescendants" />
diff --git a/res/layout/screen_zoom_preview_app_icon.xml b/res/layout/screen_zoom_preview_app_icon.xml
index 7d7d983..087afb8 100644
--- a/res/layout/screen_zoom_preview_app_icon.xml
+++ b/res/layout/screen_zoom_preview_app_icon.xml
@@ -14,33 +14,28 @@
      limitations under the License.
 -->
 
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             android:layout_width="match_parent"
-             android:layout_height="wrap_content"
-             android:importantForAccessibility="noHideDescendants">
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center_horizontal|top"
+    android:gravity="center_horizontal"
+    android:orientation="vertical"
+    android:paddingTop="8dp">
 
-    <LinearLayout
-        android:layout_width="@dimen/screen_zoom_preview_app_icon_width"
+    <ImageView
+        android:id="@android:id/icon1"
+        android:layout_width="64dp"
+        android:layout_height="64dp"
+        android:layout_marginBottom="4dp"
+        android:scaleType="fitCenter" />
+
+    <TextView
+        android:id="@android:id/text1"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_gravity="center_horizontal|top"
-        android:gravity="center_horizontal"
-        android:orientation="vertical"
-        android:padding="8dp">
-
-        <ImageView
-            android:id="@android:id/icon1"
-            android:layout_width="64dp"
-            android:layout_height="64dp"
-            android:layout_marginBottom="4dp"
-            android:scaleType="fitCenter" />
-
-        <TextView
-            android:id="@android:id/text1"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:ellipsize="end"
-            android:gravity="center_horizontal|top"
-            android:singleLine="true"
-            android:textAppearance="@android:style/TextAppearance.Material.Caption" />
-    </LinearLayout>
-</FrameLayout>
\ No newline at end of file
+        android:ellipsize="end"
+        android:gravity="center_horizontal|top"
+        android:singleLine="true"
+        android:textAppearance="@android:style/TextAppearance.Material.Caption" />
+</LinearLayout>
\ No newline at end of file
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 08160ba..30d1e6c 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -251,7 +251,6 @@
     <dimen name="unmount_button_padding">8dp</dimen>
 
     <!-- Display, Screen zoom -->
-    <dimen name="screen_zoom_preview_app_icon_width">88dp</dimen>
     <dimen name="conversation_message_list_padding">10dp</dimen>
     <dimen name="conversation_message_contact_icon_text_size">32sp</dimen>
     <dimen name="conversation_message_text_size">16sp</dimen>
diff --git a/res/xml/app_and_notification.xml b/res/xml/app_and_notification.xml
index 53e575f..dd661e0 100644
--- a/res/xml/app_and_notification.xml
+++ b/res/xml/app_and_notification.xml
@@ -69,7 +69,7 @@
 
     <Preference
         android:key="special_access"
-        android:fragment="com.android.settings.applications.SpecialAccessSettings"
+        android:fragment="com.android.settings.applications.specialaccess.SpecialAccessSettings"
         android:title="@string/special_access"
         android:order="20" />
 
diff --git a/res/xml/battery_saver_settings.xml b/res/xml/battery_saver_settings.xml
index 0460459..eb4954f 100644
--- a/res/xml/battery_saver_settings.xml
+++ b/res/xml/battery_saver_settings.xml
@@ -29,8 +29,8 @@
     <com.android.settings.widget.SeekBarPreference
         android:key="battery_saver_seek_bar"
         android:title="@string/battery_saver_seekbar_title_placeholder"
-        android:max="75"
-        android:min="5" />
+        android:max="15"
+        android:min="1" />
 
     <com.android.settings.widget.TwoStateButtonPreference
         android:key="battery_saver"
diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml
index d1eb623..2c80e94 100644
--- a/res/xml/special_access.xml
+++ b/res/xml/special_access.xml
@@ -15,16 +15,17 @@
 -->
 
 <PreferenceScreen
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:settings="http://schemas.android.com/apk/res-auto"
-        android:key="special_app_access_screen"
-        android:title="@string/special_access">
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:key="special_app_access_screen"
+    android:title="@string/special_access">
 
     <Preference
         android:key="high_power_apps"
         android:title="@string/high_power_apps"
         android:fragment="com.android.settings.applications.manageapplications.ManageApplications"
-        settings:keywords="@string/keywords_ignore_optimizations">
+        settings:keywords="@string/keywords_ignore_optimizations"
+        settings:controller="com.android.settings.applications.specialaccess.HighPowerAppsController">
         <extra
             android:name="classname"
             android:value="com.android.settings.Settings$HighPowerApplicationsActivity" />
@@ -33,7 +34,8 @@
     <Preference
         android:key="device_administrators"
         android:title="@string/manage_device_admin"
-        android:fragment="com.android.settings.DeviceAdminSettings" />
+        android:fragment="com.android.settings.DeviceAdminSettings"
+        settings:controller="com.android.settings.applications.specialaccess.DeviceAdministratorsController" />
 
     <Preference
         android:key="system_alert_window"
@@ -48,7 +50,8 @@
     <Preference
         android:key="zen_access"
         android:title="@string/manage_zen_access_title"
-        android:fragment="com.android.settings.notification.ZenAccessSettings" />
+        android:fragment="com.android.settings.notification.ZenAccessSettings"
+        settings:controller="com.android.settings.applications.specialaccess.ZenAccessController" />
 
     <Preference
         android:key="write_settings_apps"
@@ -63,23 +66,27 @@
     <Preference
         android:key="notification_access"
         android:title="@string/manage_notification_access_title"
-        android:fragment="com.android.settings.notification.NotificationAccessSettings" />
+        android:fragment="com.android.settings.notification.NotificationAccessSettings"
+        settings:controller="com.android.settings.applications.specialaccess.NotificationAccessController" />
 
     <Preference
         android:key="picture_in_picture"
         android:title="@string/picture_in_picture_title"
         android:fragment="com.android.settings.applications.appinfo.PictureInPictureSettings"
-        settings:keywords="@string/picture_in_picture_keywords" />
+        settings:keywords="@string/picture_in_picture_keywords"
+        settings:controller="com.android.settings.applications.specialaccess.PictureInPictureController" />
 
     <Preference
         android:key="premium_sms"
         android:title="@string/premium_sms_access"
-        android:fragment="com.android.settings.applications.PremiumSmsAccess" />
+        android:fragment="com.android.settings.applications.PremiumSmsAccess"
+        settings:controller="com.android.settings.applications.specialaccess.PremiumSmsController" />
 
     <Preference
         android:key="data_saver"
         android:title="@string/unrestricted_data_saver"
-        android:fragment="com.android.settings.datausage.UnrestrictedDataAccess" />
+        android:fragment="com.android.settings.datausage.UnrestrictedDataAccess"
+        settings:controller="com.android.settings.applications.specialaccess.DataSaverController" />
 
     <Preference
         android:key="manage_external_sources"
@@ -105,7 +112,8 @@
         android:key="enabled_vr_listeners"
         android:title="@string/vr_listeners_title"
         android:fragment="com.android.settings.applications.VrListenerSettings"
-        settings:keywords="@string/keywords_vr_listener">
+        settings:keywords="@string/keywords_vr_listener"
+        settings:controller="com.android.settings.applications.specialaccess.EnabledVrListenersController">
         <extra
             android:name="classname"
             android:value="com.android.settings.Settings$VrListenersSettingsActivity" />
diff --git a/src/com/android/settings/applications/SpecialAccessSettings.java b/src/com/android/settings/applications/SpecialAccessSettings.java
deleted file mode 100644
index 7679b1f..0000000
--- a/src/com/android/settings/applications/SpecialAccessSettings.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2016 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.applications;
-
-import android.app.ActivityManager;
-import android.content.Context;
-import android.os.Bundle;
-import androidx.annotation.NonNull;
-import android.provider.SearchIndexableResource;
-import androidx.preference.Preference;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.search.SearchIndexable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@SearchIndexable
-public class SpecialAccessSettings extends DashboardFragment {
-
-    private static final String TAG = "SpecialAccessSettings";
-    private static final String[] DISABLED_FEATURES_LOW_RAM =
-            new String[]{"notification_access", "zen_access", "enabled_vr_listeners",
-                    "picture_in_picture"};
-
-    @Override
-    protected String getLogTag() {
-        return TAG;
-    }
-
-    @Override
-    protected int getPreferenceScreenResId() {
-        return R.xml.special_access;
-    }
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        if (ActivityManager.isLowRamDeviceStatic()) {
-            for (String disabledFeature : DISABLED_FEATURES_LOW_RAM) {
-                Preference pref = findPreference(disabledFeature);
-                if (pref != null) {
-                    removePreference(disabledFeature);
-                }
-            }
-        }
-    }
-
-    @Override
-    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
-        return buildPreferenceControllers(context);
-    }
-
-    private static List<AbstractPreferenceController> buildPreferenceControllers(
-            @NonNull Context context) {
-        final List<AbstractPreferenceController> controllers = new ArrayList<>();
-        controllers.add(new HighPowerAppsController(context));
-        controllers.add(new DeviceAdministratorsController(context));
-        controllers.add(new PremiumSmsController(context));
-        controllers.add(new DataSaverController(context));
-        controllers.add(new EnabledVrListenersController(context));
-        return controllers;
-    }
-
-    @Override
-    public int getMetricsCategory() {
-        return MetricsEvent.SPECIAL_ACCESS;
-    }
-
-    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider() {
-                @Override
-                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
-                        boolean enabled) {
-                    final ArrayList<SearchIndexableResource> result = new ArrayList<>();
-
-                    final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.special_access;
-                    result.add(sir);
-                    return result;
-                }
-
-                @Override
-                public List<AbstractPreferenceController> createPreferenceControllers(
-                        Context context) {
-                    return buildPreferenceControllers(context);
-                }
-            };
-}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
index c243970..1cb7985 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
@@ -17,11 +17,9 @@
 package com.android.settings.applications.defaultapps;
 
 import android.content.Context;
-import android.content.pm.ComponentInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 
-import android.util.ArraySet;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 
@@ -29,7 +27,6 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 
 /**
  * Fragment for choosing default browser.
@@ -61,24 +58,13 @@
         final List<DefaultAppInfo> candidates = new ArrayList<>();
         final Context context = getContext();
         // Resolve that intent and check that the handleAllWebDataURI boolean is set
-        final List<ResolveInfo> list = mPm.queryIntentActivitiesAsUser(
-                DefaultBrowserPreferenceController.BROWSE_PROBE, PackageManager.MATCH_ALL, mUserId);
+        final List<ResolveInfo> list =
+            DefaultBrowserPreferenceController.getCandidates(mPm, mUserId);
 
-        final int count = list.size();
-        final Set<String> addedPackages = new ArraySet<>();
-        for (int i = 0; i < count; i++) {
-            ResolveInfo info = list.get(i);
-            if (info.activityInfo == null || !info.handleAllWebDataURI) {
-                continue;
-            }
-            final String packageName = info.activityInfo.packageName;
-            if (addedPackages.contains(packageName)) {
-                continue;
-            }
+        for (ResolveInfo info : list) {
             try {
                 candidates.add(new DefaultAppInfo(context, mPm,
-                        mPm.getApplicationInfoAsUser(packageName, 0, mUserId)));
-                addedPackages.add(packageName);
+                        mPm.getApplicationInfoAsUser(info.activityInfo.packageName, 0, mUserId)));
             } catch (PackageManager.NameNotFoundException e) {
                 // Skip unknown packages.
             }
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
index 5395be9..d4e86ff 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
@@ -26,12 +26,15 @@
 import android.net.Uri;
 import androidx.preference.Preference;
 import android.text.TextUtils;
+import android.util.ArraySet;
 import android.util.IconDrawableFactory;
 import android.util.Log;
 
 import com.android.settingslib.applications.DefaultAppInfo;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 public class DefaultBrowserPreferenceController extends DefaultAppPreferenceController {
 
@@ -48,7 +51,7 @@
 
     @Override
     public boolean isAvailable() {
-        final List<ResolveInfo> candidates = getCandidates();
+        final List<ResolveInfo> candidates = getCandidates(mPackageManager, mUserId);
         return candidates != null && !candidates.isEmpty();
     }
 
@@ -103,14 +106,31 @@
         return getOnlyAppIcon();
     }
 
-    private List<ResolveInfo> getCandidates() {
-        return mPackageManager.queryIntentActivitiesAsUser(BROWSE_PROBE, PackageManager.MATCH_ALL,
-                mUserId);
+    static List<ResolveInfo> getCandidates(PackageManager packageManager, int userId) {
+        final List<ResolveInfo> candidates = new ArrayList<>();
+        // Resolve that intent and check that the handleAllWebDataURI boolean is set
+        final List<ResolveInfo> list = packageManager.queryIntentActivitiesAsUser(
+            BROWSE_PROBE, PackageManager.MATCH_ALL, userId);
+        if (list != null) {
+            final Set<String> addedPackages = new ArraySet<>();
+            for (ResolveInfo info : list) {
+                if (info.activityInfo == null || !info.handleAllWebDataURI) {
+                    continue;
+                }
+                final String packageName = info.activityInfo.packageName;
+                if (addedPackages.contains(packageName)) {
+                    continue;
+                }
+                candidates.add(info);
+                addedPackages.add(packageName);
+            }
+        }
+        return candidates;
     }
 
     private String getOnlyAppLabel() {
         // Resolve that intent and check that the handleAllWebDataURI boolean is set
-        final List<ResolveInfo> list = getCandidates();
+        final List<ResolveInfo> list = getCandidates(mPackageManager, mUserId);
         if (list != null && list.size() == 1) {
             final ResolveInfo info = list.get(0);
             final String label = info.loadLabel(mPackageManager).toString();
@@ -123,7 +143,7 @@
     }
 
     private Drawable getOnlyAppIcon() {
-        final List<ResolveInfo> list = getCandidates();
+        final List<ResolveInfo> list = getCandidates(mPackageManager, mUserId);
         if (list != null && list.size() == 1) {
             final ResolveInfo info = list.get(0);
             final ComponentInfo cn = info.getComponentInfo();
diff --git a/src/com/android/settings/applications/DataSaverController.java b/src/com/android/settings/applications/specialaccess/DataSaverController.java
similarity index 80%
rename from src/com/android/settings/applications/DataSaverController.java
rename to src/com/android/settings/applications/specialaccess/DataSaverController.java
index afe7cd6..56687d7 100644
--- a/src/com/android/settings/applications/DataSaverController.java
+++ b/src/com/android/settings/applications/specialaccess/DataSaverController.java
@@ -15,20 +15,17 @@
  */
 
 
-package com.android.settings.applications;
+package com.android.settings.applications.specialaccess;
 
 import android.content.Context;
-import androidx.annotation.VisibleForTesting;
 
-import com.android.settings.core.BasePreferenceController;
 import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
 
 public class DataSaverController extends BasePreferenceController {
 
-    @VisibleForTesting static final String KEY_DATA_SAVER = "data_saver";
-
-    public DataSaverController(Context context) {
-        super(context, KEY_DATA_SAVER);
+    public DataSaverController(Context context, String key) {
+        super(context, key);
     }
 
     @AvailabilityStatus
diff --git a/src/com/android/settings/applications/DeviceAdministratorsController.java b/src/com/android/settings/applications/specialaccess/DeviceAdministratorsController.java
similarity index 79%
rename from src/com/android/settings/applications/DeviceAdministratorsController.java
rename to src/com/android/settings/applications/specialaccess/DeviceAdministratorsController.java
index ec1d556..bdb99ef 100644
--- a/src/com/android/settings/applications/DeviceAdministratorsController.java
+++ b/src/com/android/settings/applications/specialaccess/DeviceAdministratorsController.java
@@ -14,20 +14,17 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.specialaccess;
 
 import android.content.Context;
-import androidx.annotation.VisibleForTesting;
 
-import com.android.settings.core.BasePreferenceController;
 import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
 
 public class DeviceAdministratorsController extends BasePreferenceController {
 
-    @VisibleForTesting static final String KEY_DEVICE_ADMIN = "device_administrators";
-
-    public DeviceAdministratorsController(Context context) {
-        super(context, KEY_DEVICE_ADMIN);
+    public DeviceAdministratorsController(Context context, String key) {
+        super(context, key);
     }
 
     @AvailabilityStatus
diff --git a/src/com/android/settings/applications/EnabledVrListenersController.java b/src/com/android/settings/applications/specialaccess/EnabledVrListenersController.java
similarity index 78%
rename from src/com/android/settings/applications/EnabledVrListenersController.java
rename to src/com/android/settings/applications/specialaccess/EnabledVrListenersController.java
index 7b33529..5967b0d 100644
--- a/src/com/android/settings/applications/EnabledVrListenersController.java
+++ b/src/com/android/settings/applications/specialaccess/EnabledVrListenersController.java
@@ -14,25 +14,24 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.specialaccess;
 
+import android.app.ActivityManager;
 import android.content.Context;
-import androidx.annotation.VisibleForTesting;
 
-import com.android.settings.core.BasePreferenceController;
 import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
 
 public class EnabledVrListenersController extends BasePreferenceController {
 
-    @VisibleForTesting static final String KEY_ENABLED_VR_LISTENERS = "enabled_vr_listeners";
-
-    public EnabledVrListenersController(Context context) {
-        super(context, KEY_ENABLED_VR_LISTENERS);
+    public EnabledVrListenersController(Context context, String key) {
+        super(context, key);
     }
 
     @AvailabilityStatus
     public int getAvailabilityStatus() {
         return mContext.getResources().getBoolean(R.bool.config_show_enabled_vr_listeners)
+                && !ActivityManager.isLowRamDeviceStatic()
                 ? AVAILABLE
                 : UNSUPPORTED_ON_DEVICE;
     }
diff --git a/src/com/android/settings/applications/HighPowerAppsController.java b/src/com/android/settings/applications/specialaccess/HighPowerAppsController.java
similarity index 79%
rename from src/com/android/settings/applications/HighPowerAppsController.java
rename to src/com/android/settings/applications/specialaccess/HighPowerAppsController.java
index 39b8451..b893b88 100644
--- a/src/com/android/settings/applications/HighPowerAppsController.java
+++ b/src/com/android/settings/applications/specialaccess/HighPowerAppsController.java
@@ -14,20 +14,17 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.specialaccess;
 
 import android.content.Context;
-import androidx.annotation.VisibleForTesting;
 
-import com.android.settings.core.BasePreferenceController;
 import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
 
 public class HighPowerAppsController extends BasePreferenceController {
 
-    @VisibleForTesting static final String KEY_HIGH_POWER_APPS = "high_power_apps";
-
-    public HighPowerAppsController(Context context) {
-        super(context, KEY_HIGH_POWER_APPS);
+    public HighPowerAppsController(Context context, String key) {
+        super(context, key);
     }
 
     @AvailabilityStatus
diff --git a/src/com/android/settings/applications/DataSaverController.java b/src/com/android/settings/applications/specialaccess/NotificationAccessController.java
similarity index 60%
copy from src/com/android/settings/applications/DataSaverController.java
copy to src/com/android/settings/applications/specialaccess/NotificationAccessController.java
index afe7cd6..773cd7d 100644
--- a/src/com/android/settings/applications/DataSaverController.java
+++ b/src/com/android/settings/applications/specialaccess/NotificationAccessController.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2018 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.
@@ -14,27 +14,23 @@
  * limitations under the License.
  */
 
+package com.android.settings.applications.specialaccess;
 
-package com.android.settings.applications;
-
+import android.app.ActivityManager;
 import android.content.Context;
-import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.R;
 
-public class DataSaverController extends BasePreferenceController {
+public class NotificationAccessController extends BasePreferenceController {
 
-    @VisibleForTesting static final String KEY_DATA_SAVER = "data_saver";
-
-    public DataSaverController(Context context) {
-        super(context, KEY_DATA_SAVER);
+    public NotificationAccessController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
     }
 
-    @AvailabilityStatus
+    @Override
     public int getAvailabilityStatus() {
-        return mContext.getResources().getBoolean(R.bool.config_show_data_saver)
+        return !ActivityManager.isLowRamDeviceStatic()
                 ? AVAILABLE
                 : UNSUPPORTED_ON_DEVICE;
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/applications/DataSaverController.java b/src/com/android/settings/applications/specialaccess/PictureInPictureController.java
similarity index 60%
copy from src/com/android/settings/applications/DataSaverController.java
copy to src/com/android/settings/applications/specialaccess/PictureInPictureController.java
index afe7cd6..6666605 100644
--- a/src/com/android/settings/applications/DataSaverController.java
+++ b/src/com/android/settings/applications/specialaccess/PictureInPictureController.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2018 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.
@@ -14,27 +14,23 @@
  * limitations under the License.
  */
 
+package com.android.settings.applications.specialaccess;
 
-package com.android.settings.applications;
-
+import android.app.ActivityManager;
 import android.content.Context;
-import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.R;
 
-public class DataSaverController extends BasePreferenceController {
+public class PictureInPictureController extends BasePreferenceController {
 
-    @VisibleForTesting static final String KEY_DATA_SAVER = "data_saver";
-
-    public DataSaverController(Context context) {
-        super(context, KEY_DATA_SAVER);
+    public PictureInPictureController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
     }
 
-    @AvailabilityStatus
+    @Override
     public int getAvailabilityStatus() {
-        return mContext.getResources().getBoolean(R.bool.config_show_data_saver)
+        return !ActivityManager.isLowRamDeviceStatic()
                 ? AVAILABLE
                 : UNSUPPORTED_ON_DEVICE;
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/applications/PremiumSmsController.java b/src/com/android/settings/applications/specialaccess/PremiumSmsController.java
similarity index 80%
rename from src/com/android/settings/applications/PremiumSmsController.java
rename to src/com/android/settings/applications/specialaccess/PremiumSmsController.java
index eeb5d86..0e8c198 100644
--- a/src/com/android/settings/applications/PremiumSmsController.java
+++ b/src/com/android/settings/applications/specialaccess/PremiumSmsController.java
@@ -14,20 +14,17 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.specialaccess;
 
 import android.content.Context;
-import androidx.annotation.VisibleForTesting;
 
-import com.android.settings.core.BasePreferenceController;
 import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
 
 public class PremiumSmsController extends BasePreferenceController {
 
-    @VisibleForTesting static final String KEY_PREMIUM_SMS = "premium_sms";
-
-    public PremiumSmsController(Context context) {
-        super(context, KEY_PREMIUM_SMS);
+    public PremiumSmsController(Context context, String key) {
+        super(context, key);
     }
 
     @AvailabilityStatus
diff --git a/src/com/android/settings/applications/specialaccess/SpecialAccessSettings.java b/src/com/android/settings/applications/specialaccess/SpecialAccessSettings.java
new file mode 100644
index 0000000..80cadcc
--- /dev/null
+++ b/src/com/android/settings/applications/specialaccess/SpecialAccessSettings.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2016 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.applications.specialaccess;
+
+import android.content.Context;
+import android.provider.SearchIndexableResource;
+
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settingslib.search.SearchIndexable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@SearchIndexable
+public class SpecialAccessSettings extends DashboardFragment {
+
+    private static final String TAG = "SpecialAccessSettings";
+
+    @Override
+    protected String getLogTag() {
+        return TAG;
+    }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.special_access;
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.SPECIAL_ACCESS;
+    }
+
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+                        boolean enabled) {
+                    final ArrayList<SearchIndexableResource> result = new ArrayList<>();
+
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.special_access;
+                    result.add(sir);
+                    return result;
+                }
+            };
+}
diff --git a/src/com/android/settings/applications/DataSaverController.java b/src/com/android/settings/applications/specialaccess/ZenAccessController.java
similarity index 60%
copy from src/com/android/settings/applications/DataSaverController.java
copy to src/com/android/settings/applications/specialaccess/ZenAccessController.java
index afe7cd6..41344a3 100644
--- a/src/com/android/settings/applications/DataSaverController.java
+++ b/src/com/android/settings/applications/specialaccess/ZenAccessController.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2018 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.
@@ -14,27 +14,23 @@
  * limitations under the License.
  */
 
+package com.android.settings.applications.specialaccess;
 
-package com.android.settings.applications;
-
+import android.app.ActivityManager;
 import android.content.Context;
-import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.R;
 
-public class DataSaverController extends BasePreferenceController {
+public class ZenAccessController extends BasePreferenceController {
 
-    @VisibleForTesting static final String KEY_DATA_SAVER = "data_saver";
-
-    public DataSaverController(Context context) {
-        super(context, KEY_DATA_SAVER);
+    public ZenAccessController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
     }
 
-    @AvailabilityStatus
+    @Override
     public int getAvailabilityStatus() {
-        return mContext.getResources().getBoolean(R.bool.config_show_data_saver)
+        return !ActivityManager.isLowRamDeviceStatic()
                 ? AVAILABLE
                 : UNSUPPORTED_ON_DEVICE;
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java b/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java
index aa0b6cd..654ea72 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java
@@ -76,9 +76,11 @@
             mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY);
             mPreferenceGroup.setVisible(false);
 
-            mBluetoothDeviceUpdater.setPrefContext(screen.getContext());
+            final Context context = screen.getContext();
+            mBluetoothDeviceUpdater.setPrefContext(context);
             mBluetoothDeviceUpdater.forceUpdate();
-            mConnectedUsbDeviceUpdater.initUsbPreference(screen.getContext());
+            mConnectedUsbDeviceUpdater.initUsbPreference(context);
+            mConnectedDockUpdater.setPreferenceContext(context);
             mConnectedDockUpdater.forceUpdate();
         }
     }
diff --git a/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java b/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java
index 4bc9cdd..6f9b7ac 100644
--- a/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java
+++ b/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java
@@ -75,8 +75,11 @@
         if (isAvailable()) {
             mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY);
             mPreferenceGroup.setVisible(false);
-            mBluetoothDeviceUpdater.setPrefContext(screen.getContext());
+
+            final Context context = screen.getContext();
+            mBluetoothDeviceUpdater.setPrefContext(context);
             mBluetoothDeviceUpdater.forceUpdate();
+            mSavedDockUpdater.setPreferenceContext(context);
             mSavedDockUpdater.forceUpdate();
         }
     }
diff --git a/src/com/android/settings/connecteddevice/dock/DockUpdater.java b/src/com/android/settings/connecteddevice/dock/DockUpdater.java
index 19ee732..99ac124 100644
--- a/src/com/android/settings/connecteddevice/dock/DockUpdater.java
+++ b/src/com/android/settings/connecteddevice/dock/DockUpdater.java
@@ -15,6 +15,7 @@
  */
 package com.android.settings.connecteddevice.dock;
 
+import android.annotation.NonNull;
 import android.content.Context;
 
 /**
@@ -40,4 +41,10 @@
      */
     default void forceUpdate() {
     }
+
+    /**
+     * Set the context to generate the {@link Preference}, so it could get the correct theme.
+     */
+    default void setPreferenceContext(@NonNull Context preferenceContext) {
+    }
 }
diff --git a/src/com/android/settings/display/AppGridView.java b/src/com/android/settings/display/AppGridView.java
index 0027537..d48eb09 100644
--- a/src/com/android/settings/display/AppGridView.java
+++ b/src/com/android/settings/display/AppGridView.java
@@ -22,7 +22,6 @@
 import android.content.pm.ResolveInfo;
 import android.graphics.drawable.Drawable;
 import android.os.UserHandle;
-import androidx.annotation.VisibleForTesting;
 import android.util.AttributeSet;
 import android.util.IconDrawableFactory;
 import android.view.View;
@@ -37,28 +36,32 @@
 import java.util.Collections;
 import java.util.List;
 
+import androidx.annotation.VisibleForTesting;
+
 public class AppGridView extends GridView {
     public AppGridView(Context context) {
-        this(context, null);
+        super(context);
+        init(context);
     }
 
     public AppGridView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
+        super(context, attrs);
+        init(context);
     }
 
     public AppGridView(Context context, AttributeSet attrs, int defStyleAttr) {
-        this(context, attrs, defStyleAttr, 0);
+        super(context, attrs, defStyleAttr);
+        init(context);
     }
 
     public AppGridView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleResId) {
         super(context, attrs, defStyleAttr, defStyleResId);
 
-        setNumColumns(AUTO_FIT);
+        init(context);
 
-        final int columnWidth = getResources().getDimensionPixelSize(
-                R.dimen.screen_zoom_preview_app_icon_width);
-        setColumnWidth(columnWidth);
+    }
 
+    private void init(Context context) {
         setAdapter(new AppsAdapter(context, R.layout.screen_zoom_preview_app_icon,
                 android.R.id.text1, android.R.id.icon1));
     }
@@ -105,6 +108,7 @@
         }
 
         private void loadAllApps() {
+            final int needAppCount = 6;
             final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
             mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
 
@@ -117,6 +121,9 @@
                 if (label != null) {
                     results.add(new ActivityEntry(info, label.toString(), iconFactory));
                 }
+                if (results.size() >= needAppCount) {
+                    break;
+                }
             }
 
             Collections.sort(results);
diff --git a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java
index b082eeb..379b995 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java
@@ -43,6 +43,7 @@
 public class AutoBatterySeekBarPreferenceController extends BasePreferenceController implements
         LifecycleObserver, OnStart, OnStop, SeekBarPreference.OnPreferenceChangeListener {
     private static final String TAG = "AutoBatterySeekBarPreferenceController";
+    private static final int INTERVAL = 5;
     @VisibleForTesting
     static final String KEY_AUTO_BATTERY_SEEK_BAR = "battery_saver_seek_bar";
     private SeekBarPreference mPreference;
@@ -92,7 +93,7 @@
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         final int progress = (int) newValue;
         Settings.Global.putInt(mContext.getContentResolver(),
-                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, progress);
+                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, progress * INTERVAL);
         return true;
     }
 
@@ -102,7 +103,7 @@
 
         // Override the max value with LOW_POWER_MODE_TRIGGER_LEVEL_MAX, if set.
         final int maxLevel = Settings.Global.getInt(contentResolver,
-                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, 0);
+                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, 0) / INTERVAL;
         if (maxLevel > 0) {
             if (!(preference instanceof SeekBarPreference)) {
                 Log.e(TAG, "Unexpected preference class: " + preference.getClass());
@@ -127,7 +128,7 @@
             preference.setTitle(mContext.getString(R.string.battery_saver_seekbar_title,
                     Utils.formatPercentage(level)));
             SeekBarPreference seekBarPreference = (SeekBarPreference) preference;
-            seekBarPreference.setProgress(level);
+            seekBarPreference.setProgress(level / INTERVAL);
             seekBarPreference.setSeekBarContentDescription(
                     mContext.getString(R.string.battery_saver_turn_on_automatically_title));
         }
diff --git a/tests/robotests/src/com/android/settings/applications/SpecialAccessSettingsTest.java b/tests/robotests/src/com/android/settings/applications/SpecialAccessSettingsTest.java
deleted file mode 100644
index fd71af7..0000000
--- a/tests/robotests/src/com/android/settings/applications/SpecialAccessSettingsTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.settings.applications;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.spy;
-
-import android.content.Context;
-import android.provider.SearchIndexableResource;
-
-import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-import java.util.List;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-public class SpecialAccessSettingsTest {
-
-  private Context mContext;
-  private SpecialAccessSettings mFragment;
-
-  @Before
-  public void setUp() {
-    MockitoAnnotations.initMocks(this);
-    mContext = spy(RuntimeEnvironment.application);
-    mFragment = new SpecialAccessSettings() {
-      @Override
-      public Context getContext() {
-        return mContext;
-      }
-    };
-  }
-
-  @Test
-  public void testSearchIndexProvider_shouldIndexResource() {
-    final List<SearchIndexableResource> indexRes =
-            SpecialAccessSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(mContext,
-                    true /* enabled */);
-    final List<String> niks =
-            SpecialAccessSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
-
-    assertThat(indexRes).isNotNull();
-    assertThat(indexRes.get(0).xmlResId).isEqualTo(R.xml.special_access);
-    assertThat(niks).isEmpty();
-  }
-
-  @Test
-  @Config(qualifiers = "mcc999")
-  public void testSearchIndexProvider_ifElementsAreNotShown_shouldNotBeIndexed() {
-    final List<String> niks =
-            SpecialAccessSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
-
-    assertThat(niks).contains(HighPowerAppsController.KEY_HIGH_POWER_APPS);
-    assertThat(niks).contains(DeviceAdministratorsController.KEY_DEVICE_ADMIN);
-    assertThat(niks).contains(PremiumSmsController.KEY_PREMIUM_SMS);
-    assertThat(niks).contains(DataSaverController.KEY_DATA_SAVER);
-    assertThat(niks).contains(EnabledVrListenersController.KEY_ENABLED_VR_LISTENERS);
-  }
-}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java
index bdf249d..3aa83a8 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.applications.defaultapps;
 
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.verify;
@@ -25,20 +23,11 @@
 
 import android.app.Activity;
 import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.ResolveInfo;
 import android.os.UserManager;
 
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settingslib.applications.DefaultAppInfo;
-
-import java.util.ArrayList;
-import java.util.List;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -85,39 +74,4 @@
         mPicker.getDefaultKey();
         verify(mPackageManager).getDefaultBrowserPackageNameAsUser(anyInt());
     }
-
-    @Test
-    public void getCandidates_shouldNotIncludeDuplicatePackageName() throws NameNotFoundException {
-        final List<ResolveInfo> resolveInfos = new ArrayList<>();
-        final String PACKAGE_ONE = "com.first.package";
-        final String PACKAGE_TWO = "com.second.package";
-        resolveInfos.add(createResolveInfo(PACKAGE_ONE));
-        resolveInfos.add(createResolveInfo(PACKAGE_TWO));
-        resolveInfos.add(createResolveInfo(PACKAGE_ONE));
-        resolveInfos.add(createResolveInfo(PACKAGE_TWO));
-        when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
-            .thenReturn(resolveInfos);
-        when(mPackageManager.getApplicationInfoAsUser(eq(PACKAGE_ONE), anyInt(), anyInt()))
-            .thenReturn(createApplicationInfo(PACKAGE_ONE));
-        when(mPackageManager.getApplicationInfoAsUser(eq(PACKAGE_TWO), anyInt(), anyInt()))
-            .thenReturn(createApplicationInfo(PACKAGE_TWO));
-
-        final List<DefaultAppInfo> defaultBrowserInfo = mPicker.getCandidates();
-
-        assertThat(defaultBrowserInfo.size()).isEqualTo(2);
-    }
-
-    private ResolveInfo createResolveInfo(String packageName) {
-        final ResolveInfo info = new ResolveInfo();
-        info.handleAllWebDataURI = true;
-        info.activityInfo = new ActivityInfo();
-        info.activityInfo.packageName = packageName;
-        return info;
-    }
-
-    private ApplicationInfo createApplicationInfo(String packageName) {
-        final ApplicationInfo info = new ApplicationInfo();
-        info.packageName = packageName;
-        return info;
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
index 6bf6ac4..d4c4115 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
@@ -17,15 +17,21 @@
 package com.android.settings.applications.defaultapps;
 
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
 import android.os.UserManager;
 import androidx.preference.Preference;
@@ -33,6 +39,8 @@
 import com.android.settings.R;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
+import java.util.ArrayList;
+import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -73,8 +81,11 @@
 
     @Test
     public void isAvailable_hasBrowser_shouldReturnTrue() {
+        final ResolveInfo info = new ResolveInfo();
+        info.activityInfo = new ActivityInfo();
+        info.handleAllWebDataURI = true;
         when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
-            .thenReturn(Collections.singletonList(new ResolveInfo()));
+            .thenReturn(Collections.singletonList(info));
         assertThat(mController.isAvailable()).isTrue();
     }
 
@@ -89,6 +100,28 @@
     }
 
     @Test
+    public void getDefaultAppLabel_hasAppWithMultipleResolvedInfo_shouldReturnLabel()
+            throws NameNotFoundException {
+        DefaultBrowserPreferenceController spyController = spy(mController);
+        doReturn(null).when(spyController).getDefaultAppIcon();
+        final List<ResolveInfo> resolveInfos = new ArrayList<>();
+        final CharSequence PACKAGE_NAME = "com.test.package";
+        final ResolveInfo info1 = spy(createResolveInfo(PACKAGE_NAME.toString()));
+        when(info1.loadLabel(mPackageManager)).thenReturn(PACKAGE_NAME);
+        resolveInfos.add(info1);
+        resolveInfos.add(createResolveInfo(PACKAGE_NAME.toString()));
+        when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt())).thenReturn(null);
+        when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
+            .thenReturn(resolveInfos);
+        when(mPackageManager.getApplicationInfoAsUser(
+            eq(PACKAGE_NAME.toString()), anyInt(), anyInt()))
+            .thenReturn(createApplicationInfo(PACKAGE_NAME.toString()));
+        final Preference pref = mock(Preference.class);
+
+        assertThat(spyController.getDefaultAppLabel()).isEqualTo(PACKAGE_NAME);
+    }
+
+    @Test
     public void getDefaultApp_shouldGetDefaultBrowserPackage() {
         mController.getDefaultAppInfo();
 
@@ -103,4 +136,40 @@
 
         assertThat(mController.isBrowserDefault("pkg", 0)).isTrue();
     }
+
+    @Test
+    public void getCandidates_shouldNotIncludeDuplicatePackageName() throws NameNotFoundException {
+        final List<ResolveInfo> resolveInfos = new ArrayList<>();
+        final String PACKAGE_ONE = "com.first.package";
+        final String PACKAGE_TWO = "com.second.package";
+        resolveInfos.add(createResolveInfo(PACKAGE_ONE));
+        resolveInfos.add(createResolveInfo(PACKAGE_TWO));
+        resolveInfos.add(createResolveInfo(PACKAGE_ONE));
+        resolveInfos.add(createResolveInfo(PACKAGE_TWO));
+        when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
+            .thenReturn(resolveInfos);
+        when(mPackageManager.getApplicationInfoAsUser(eq(PACKAGE_ONE), anyInt(), anyInt()))
+            .thenReturn(createApplicationInfo(PACKAGE_ONE));
+        when(mPackageManager.getApplicationInfoAsUser(eq(PACKAGE_TWO), anyInt(), anyInt()))
+            .thenReturn(createApplicationInfo(PACKAGE_TWO));
+
+        final List<ResolveInfo> defaultBrowserInfo =
+            mController.getCandidates(mPackageManager, 0 /* userId */);
+
+        assertThat(defaultBrowserInfo.size()).isEqualTo(2);
+    }
+
+    private ResolveInfo createResolveInfo(String packageName) {
+        final ResolveInfo info = new ResolveInfo();
+        info.handleAllWebDataURI = true;
+        info.activityInfo = new ActivityInfo();
+        info.activityInfo.packageName = packageName;
+        return info;
+    }
+
+    private ApplicationInfo createApplicationInfo(String packageName) {
+        final ApplicationInfo info = new ApplicationInfo();
+        info.packageName = packageName;
+        return info;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/DataSaverControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
similarity index 92%
rename from tests/robotests/src/com/android/settings/applications/DataSaverControllerTest.java
rename to tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
index 22140bb..c632d08 100644
--- a/tests/robotests/src/com/android/settings/applications/DataSaverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.specialaccess;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.spy;
@@ -40,7 +40,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
-        mController = new DataSaverController(mContext);
+        mController = new DataSaverController(mContext, "key");
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/applications/DeviceAdministratorsControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/DeviceAdministratorsControllerTest.java
similarity index 96%
rename from tests/robotests/src/com/android/settings/applications/DeviceAdministratorsControllerTest.java
rename to tests/robotests/src/com/android/settings/applications/specialaccess/DeviceAdministratorsControllerTest.java
index ad7e615..efa7846 100644
--- a/tests/robotests/src/com/android/settings/applications/DeviceAdministratorsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/DeviceAdministratorsControllerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.specialaccess;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.spy;
@@ -40,7 +40,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
-        mController = new DeviceAdministratorsController(mContext);
+        mController = new DeviceAdministratorsController(mContext, "key");
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/applications/EnabledVrListenersControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/EnabledVrListenersControllerTest.java
similarity index 66%
rename from tests/robotests/src/com/android/settings/applications/EnabledVrListenersControllerTest.java
rename to tests/robotests/src/com/android/settings/applications/specialaccess/EnabledVrListenersControllerTest.java
index b364720..7963fd4 100644
--- a/tests/robotests/src/com/android/settings/applications/EnabledVrListenersControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/EnabledVrListenersControllerTest.java
@@ -14,10 +14,9 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.specialaccess;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.spy;
 
 import android.content.Context;
 
@@ -26,31 +25,39 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowActivityManager;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 public class EnabledVrListenersControllerTest {
 
     private Context mContext;
     private EnabledVrListenersController mController;
+    private ShadowActivityManager mActivityManager;
 
     @Before
     public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application.getApplicationContext());
-        mController = new EnabledVrListenersController(mContext);
+        mContext = RuntimeEnvironment.application;
+        mController = new EnabledVrListenersController(mContext, "key");
+        mActivityManager = Shadow.extract(mContext.getSystemService(Context.ACTIVITY_SERVICE));
     }
 
     @Test
-    public void testEnabledVrListeners_byDefault_shouldBeShown() {
+    public void isAvailable_byDefault_true() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_lowMemory_false() {
+        mActivityManager.setIsLowRamDevice(true);
         assertThat(mController.isAvailable()).isTrue();
     }
 
     @Test
     @Config(qualifiers = "mcc999")
-    public void testEnabledVrListeners_ifDisabled_shouldNotBeShown() {
+    public void isAvailable_disabled_false() {
         assertThat(mController.isAvailable()).isFalse();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/HighPowerAppsControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/HighPowerAppsControllerTest.java
similarity index 92%
rename from tests/robotests/src/com/android/settings/applications/HighPowerAppsControllerTest.java
rename to tests/robotests/src/com/android/settings/applications/specialaccess/HighPowerAppsControllerTest.java
index 6dfaa7c..4713be2 100644
--- a/tests/robotests/src/com/android/settings/applications/HighPowerAppsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/HighPowerAppsControllerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.specialaccess;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.spy;
@@ -40,7 +40,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
-        mController = new HighPowerAppsController(mContext);
+        mController = new HighPowerAppsController(mContext, "key");
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/applications/PremiumSmsControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/PremiumSmsControllerTest.java
similarity index 92%
rename from tests/robotests/src/com/android/settings/applications/PremiumSmsControllerTest.java
rename to tests/robotests/src/com/android/settings/applications/specialaccess/PremiumSmsControllerTest.java
index cad4100..8f16da7 100644
--- a/tests/robotests/src/com/android/settings/applications/PremiumSmsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/PremiumSmsControllerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
+package com.android.settings.applications.specialaccess;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.spy;
@@ -40,7 +40,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
-        mController = new PremiumSmsController(mContext);
+        mController = new PremiumSmsController(mContext, "key");
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/ZenAccessControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/ZenAccessControllerTest.java
new file mode 100644
index 0000000..205de10
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/ZenAccessControllerTest.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2018 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.applications.specialaccess;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowActivityManager;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public class ZenAccessControllerTest {
+
+    private Context mContext;
+    private ZenAccessController mController;
+    private ShadowActivityManager mActivityManager;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+        mController = new ZenAccessController(mContext, "key");
+        mActivityManager = Shadow.extract(mContext.getSystemService(Context.ACTIVITY_SERVICE));
+    }
+
+    @Test
+    public void isAvailable_byDefault_true() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_lowMemory_false() {
+        mActivityManager.setIsLowRamDevice(true);
+        assertThat(mController.isAvailable()).isTrue();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java
index 9457f09..e1cf196 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java
@@ -18,6 +18,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import androidx.lifecycle.LifecycleOwner;
+
 import android.content.Context;
 import android.provider.Settings;
 
@@ -39,6 +40,7 @@
 
     private static final int TRIGGER_LEVEL = 20;
     private static final int DEFAULT_LEVEL = 15;
+    private static final int INTERVAL = 5;
 
     private AutoBatterySeekBarPreferenceController mController;
     private Context mContext;
@@ -85,15 +87,16 @@
 
         assertThat(mPreference.isVisible()).isTrue();
         assertThat(mPreference.getTitle()).isEqualTo("At 20%");
-        assertThat(mPreference.getProgress()).isEqualTo(TRIGGER_LEVEL);
+        assertThat(mPreference.getProgress()).isEqualTo(TRIGGER_LEVEL / INTERVAL);
     }
 
+
     @Test
     public void testOnPreferenceChange_updateValue() {
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
 
-        mController.onPreferenceChange(mPreference, TRIGGER_LEVEL);
+        mController.onPreferenceChange(mPreference, TRIGGER_LEVEL / INTERVAL);
 
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0)).isEqualTo(TRIGGER_LEVEL);
@@ -106,7 +109,7 @@
 
         mController.updateState(mPreference);
 
-        assertThat(mPreference.getMax()).isEqualTo(50);
+        assertThat(mPreference.getMax()).isEqualTo(50 / INTERVAL);
     }
 
     @Test
