Clean up: move speciall access stuff into single  package

Bug: 110207366
Test: robotests
Change-Id: I17ad7a15d1e44bb7690d2b18ed6e2b6b17b46d8a
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/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/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/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/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();
+    }
+}