diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ee11802232f..3bd481519f0 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -954,7 +954,7 @@
+ android:value="com.android.settings.display.SmartAutoRotatePreferenceFragment" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1ac3a281f6a..9e99251929b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2713,8 +2713,6 @@
Display
-
- com.android.settings.DisplaySettings
Auto-rotate screen
diff --git a/res/xml/auto_rotate_settings.xml b/res/xml/auto_rotate_settings.xml
index dfa31f71aaa..a316b8fb29f 100644
--- a/res/xml/auto_rotate_settings.xml
+++ b/res/xml/auto_rotate_settings.xml
@@ -20,6 +20,13 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/accelerometer_title" >
+
+
createPreferenceControllers(Context context) {
- return buildPreferenceControllers(context);
- }
-
- private static List buildPreferenceControllers(
- Context context) {
- final List controllers = new ArrayList<>();
- controllers.add(
- new SmartAutoRotatePreferenceController(context, SMART_AUTO_ROTATE_CONTROLLER_KEY));
- return controllers;
- }
-
@Override
protected String getLogTag() {
return TAG;
}
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.auto_rotate_settings) {
-
- @Override
- public List createPreferenceControllers(
- Context context) {
- return buildPreferenceControllers(context);
- }
-
- @Override
- protected boolean isPageSearchEnabled(Context context) {
- return false;
- }
- };
+ new BaseSearchIndexProvider(R.xml.auto_rotate_settings);
}
diff --git a/tests/robotests/src/com/android/settings/display/SmartAutoRotateControllerTest.java b/tests/robotests/src/com/android/settings/display/SmartAutoRotateControllerTest.java
new file mode 100644
index 00000000000..2d56c0efd88
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/SmartAutoRotateControllerTest.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2021 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.display;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+import android.Manifest;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.os.UserHandle;
+import android.provider.Settings;
+
+import androidx.preference.Preference;
+
+import com.android.settings.testutils.ResolveInfoBuilder;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class SmartAutoRotateControllerTest {
+
+ private static final String PACKAGE_NAME = "package_name";
+
+ private SmartAutoRotateController mController;
+ @Mock
+ private PackageManager mPackageManager;
+ @Mock
+ private Preference mPreference;
+ private ContentResolver mContentResolver;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ final Context context = Mockito.spy(RuntimeEnvironment.application);
+ mContentResolver = RuntimeEnvironment.application.getContentResolver();
+ when(context.getPackageManager()).thenReturn(mPackageManager);
+ when(context.getContentResolver()).thenReturn(mContentResolver);
+ doReturn(PACKAGE_NAME).when(mPackageManager).getRotationResolverPackageName();
+ doReturn(PackageManager.PERMISSION_GRANTED).when(mPackageManager).checkPermission(
+ Manifest.permission.CAMERA, PACKAGE_NAME);
+ mController = new SmartAutoRotateController(context, "test_key");
+ doReturn(mController.getPreferenceKey()).when(mPreference).getKey();
+
+ final ResolveInfo resolveInfo = new ResolveInfoBuilder(PACKAGE_NAME).build();
+ resolveInfo.serviceInfo = new ServiceInfo();
+ when(mPackageManager.resolveService(any(), anyInt())).thenReturn(resolveInfo);
+ enableAutoRotation();
+ }
+
+ @Test
+ public void getAvailabilityStatus_returnAvailable() {
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_resolveInfoIsNull_returnUnsupportedOnDevice() {
+ when(mPackageManager.resolveService(any(), anyInt())).thenReturn(null);
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_noCameraPermission_returnDisableDependentSetting() {
+ doReturn(PackageManager.PERMISSION_DENIED).when(mPackageManager).checkPermission(
+ Manifest.permission.CAMERA, PACKAGE_NAME);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
+ }
+
+ @Test
+ public void getAvailabilityStatus_rotationLocked_returnDisableDependentSetting() {
+ disableAutoRotation();
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
+ }
+
+ private void enableAutoRotation() {
+ Settings.System.putIntForUser(mContentResolver,
+ Settings.System.ACCELEROMETER_ROTATION, 1, UserHandle.USER_CURRENT);
+ }
+
+ private void disableAutoRotation() {
+ Settings.System.putIntForUser(mContentResolver,
+ Settings.System.ACCELEROMETER_ROTATION, 0, UserHandle.USER_CURRENT);
+ }
+}