summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shivangi Dubey <dshivangi@google.com> 2025-03-18 06:48:16 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-18 06:48:16 -0700
commit8c2cfb9ed5302b30223e6ff66a14a9f52cf56dd4 (patch)
tree0fc0beea14266620d2443feaecdd69c30a3d1bd7
parentca5470de5e7dcaf805fa62295aebe32151f91083 (diff)
parent04d8e057a977b12163aba2e85631a017e150df36 (diff)
Merge "Integrate refactored device-state auto-rotate setting manager" into main
-rw-r--r--packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/AndroidSecureSettings.java4
-rw-r--r--packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManager.kt5
-rw-r--r--packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManagerImpl.kt11
-rw-r--r--packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManagerProvider.kt53
-rw-r--r--packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateRotationLockSettingsManager.java71
-rw-r--r--packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateAutoRotateSettingManagerImplTest.kt7
-rw-r--r--packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateAutoRotateSettingManagerProviderTest.kt89
-rw-r--r--packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateRotationLockSettingsManagerTest.java4
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingController.java19
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java39
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingControllerTest.java4
12 files changed, 241 insertions, 70 deletions
diff --git a/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/AndroidSecureSettings.java b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/AndroidSecureSettings.java
index 8aee576c3d04..a06d8829e331 100644
--- a/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/AndroidSecureSettings.java
+++ b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/AndroidSecureSettings.java
@@ -24,11 +24,11 @@ import android.provider.Settings;
* Implementation of {@link SecureSettings} that uses Android's {@link Settings.Secure}
* implementation.
*/
-class AndroidSecureSettings implements SecureSettings {
+public class AndroidSecureSettings implements SecureSettings {
private final ContentResolver mContentResolver;
- AndroidSecureSettings(ContentResolver contentResolver) {
+ public AndroidSecureSettings(ContentResolver contentResolver) {
mContentResolver = contentResolver;
}
diff --git a/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManager.kt b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManager.kt
index fdde3d3f5669..1da17756fae6 100644
--- a/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManager.kt
+++ b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManager.kt
@@ -17,6 +17,7 @@
package com.android.settingslib.devicestate
import android.provider.Settings.Secure.DEVICE_STATE_ROTATION_LOCK
+import android.util.Dumpable
/**
* Interface for managing [DEVICE_STATE_ROTATION_LOCK] setting.
@@ -25,7 +26,7 @@ import android.provider.Settings.Secure.DEVICE_STATE_ROTATION_LOCK
* specific device states, retrieve the setting value, and check if rotation is locked for specific
* or all device states.
*/
-interface DeviceStateAutoRotateSettingManager {
+interface DeviceStateAutoRotateSettingManager : Dumpable {
// TODO: b/397928958 - Rename all terms from rotationLock to autoRotate in all apis.
/** Listener for changes in device-state based auto rotate setting. */
@@ -65,5 +66,3 @@ data class SettableDeviceState(
/** Returns whether there is an auto-rotation setting for this device state. */
val isSettable: Boolean
)
-
-
diff --git a/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManagerImpl.kt b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManagerImpl.kt
index 0b6c6e238956..a9f9eda07118 100644
--- a/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManagerImpl.kt
+++ b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManagerImpl.kt
@@ -22,11 +22,13 @@ import android.os.UserHandle
import android.provider.Settings.Secure.DEVICE_STATE_ROTATION_LOCK
import android.provider.Settings.Secure.DEVICE_STATE_ROTATION_LOCK_IGNORED
import android.provider.Settings.Secure.DEVICE_STATE_ROTATION_LOCK_LOCKED
+import android.util.IndentingPrintWriter
import android.util.Log
import android.util.SparseIntArray
import com.android.internal.R
import com.android.settingslib.devicestate.DeviceStateAutoRotateSettingManager.DeviceStateAutoRotateSettingListener
import com.android.window.flags.Flags
+import java.io.PrintWriter
import java.util.concurrent.Executor
/**
@@ -104,6 +106,15 @@ class DeviceStateAutoRotateSettingManagerImpl(
throw UnsupportedOperationException("API updateSetting is not implemented yet")
}
+ override fun dump(writer: PrintWriter, args: Array<out String>?) {
+ val indentingWriter = IndentingPrintWriter(writer)
+ indentingWriter.println("DeviceStateAutoRotateSettingManagerImpl")
+ indentingWriter.increaseIndent()
+ indentingWriter.println("fallbackPostureMap: $fallbackPostureMap")
+ indentingWriter.println("settableDeviceState: $settableDeviceState")
+ indentingWriter.decreaseIndent()
+ }
+
private fun notifyListeners() =
settingListeners.forEach { listener -> listener.onSettingsChanged() }
diff --git a/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManagerProvider.kt b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManagerProvider.kt
new file mode 100644
index 000000000000..2db8e6f97498
--- /dev/null
+++ b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateAutoRotateSettingManagerProvider.kt
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2025 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.settingslib.devicestate
+
+import android.content.Context
+import android.os.Handler
+import com.android.window.flags.Flags
+import java.util.concurrent.Executor
+
+/**
+ * Provides appropriate instance of [DeviceStateAutoRotateSettingManager], based on the value of
+ * [Flags.FLAG_ENABLE_DEVICE_STATE_AUTO_ROTATE_SETTING_REFACTOR].
+ */
+object DeviceStateAutoRotateSettingManagerProvider {
+ /**
+ * Provides an instance of [DeviceStateAutoRotateSettingManager], based on the value of
+ * [Flags.FLAG_ENABLE_DEVICE_STATE_AUTO_ROTATE_SETTING_REFACTOR]. It is supposed to be used
+ * by apps that supports dagger.
+ */
+ @JvmStatic
+ fun createInstance(
+ context: Context,
+ backgroundExecutor: Executor,
+ secureSettings: SecureSettings,
+ mainHandler: Handler,
+ posturesHelper: PosturesHelper,
+ ): DeviceStateAutoRotateSettingManager =
+ if (Flags.enableDeviceStateAutoRotateSettingRefactor()) {
+ DeviceStateAutoRotateSettingManagerImpl(
+ context,
+ backgroundExecutor,
+ secureSettings,
+ mainHandler,
+ posturesHelper,
+ )
+ } else {
+ DeviceStateRotationLockSettingsManager(context, secureSettings)
+ }
+}
diff --git a/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateRotationLockSettingsManager.java b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateRotationLockSettingsManager.java
index deeba574f2ad..6d180b63cd08 100644
--- a/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateRotationLockSettingsManager.java
+++ b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateRotationLockSettingsManager.java
@@ -20,10 +20,8 @@ import static android.provider.Settings.Secure.DEVICE_STATE_ROTATION_LOCK_IGNORE
import static android.provider.Settings.Secure.DEVICE_STATE_ROTATION_LOCK_LOCKED;
import static android.provider.Settings.Secure.DEVICE_STATE_ROTATION_LOCK_UNLOCKED;
-import static com.android.settingslib.devicestate.DeviceStateAutoRotateSettingManager.DeviceStateAutoRotateSettingListener;
-
+import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
import android.database.ContentObserver;
@@ -41,6 +39,7 @@ import android.util.SparseIntArray;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -51,7 +50,8 @@ import java.util.Set;
* Manages device-state based rotation lock settings. Handles reading, writing, and listening for
* changes.
*/
-public final class DeviceStateRotationLockSettingsManager {
+public final class DeviceStateRotationLockSettingsManager implements
+ DeviceStateAutoRotateSettingManager {
private static final String TAG = "DSRotLockSettingsMngr";
private static final String SEPARATOR_REGEX = ":";
@@ -68,8 +68,7 @@ public final class DeviceStateRotationLockSettingsManager {
private SparseIntArray mPostureRotationLockFallbackSettings;
private List<SettableDeviceState> mSettableDeviceStates;
- @VisibleForTesting
- DeviceStateRotationLockSettingsManager(Context context, SecureSettings secureSettings) {
+ public DeviceStateRotationLockSettingsManager(Context context, SecureSettings secureSettings) {
mSecureSettings = secureSettings;
mPosturesHelper = new PosturesHelper(context, getDeviceStateManager(context));
@@ -89,30 +88,6 @@ public final class DeviceStateRotationLockSettingsManager {
return null;
}
- /** Returns a singleton instance of this class */
- public static synchronized DeviceStateRotationLockSettingsManager getInstance(Context context) {
- if (sSingleton == null) {
- Context applicationContext = context.getApplicationContext();
- ContentResolver contentResolver = applicationContext.getContentResolver();
- SecureSettings secureSettings = new AndroidSecureSettings(contentResolver);
- sSingleton =
- new DeviceStateRotationLockSettingsManager(applicationContext, secureSettings);
- }
- return sSingleton;
- }
-
- /** Resets the singleton instance of this class. Only used for testing. */
- @VisibleForTesting
- public static synchronized void resetInstance() {
- sSingleton = null;
- }
-
- /** Returns true if device-state based rotation lock settings are enabled. */
- public static boolean isDeviceStateRotationLockEnabled(Context context) {
- return context.getResources()
- .getStringArray(R.array.config_perDeviceStateRotationLockDefaults).length > 0;
- }
-
private void listenForSettingsChange() {
mSecureSettings
.registerContentObserver(
@@ -131,7 +106,8 @@ public final class DeviceStateRotationLockSettingsManager {
* Registers a {@link DeviceStateAutoRotateSettingListener} to be notified when the settings
* change. Can be called multiple times with different listeners.
*/
- public void registerListener(DeviceStateAutoRotateSettingListener runnable) {
+ @Override
+ public void registerListener(@NonNull DeviceStateAutoRotateSettingListener runnable) {
mListeners.add(runnable);
}
@@ -139,14 +115,16 @@ public final class DeviceStateRotationLockSettingsManager {
* Unregisters a {@link DeviceStateAutoRotateSettingListener}. No-op if the given instance
* was never registered.
*/
+ @Override
public void unregisterListener(
- DeviceStateAutoRotateSettingListener deviceStateAutoRotateSettingListener) {
+ @NonNull DeviceStateAutoRotateSettingListener deviceStateAutoRotateSettingListener) {
if (!mListeners.remove(deviceStateAutoRotateSettingListener)) {
Log.w(TAG, "Attempting to unregister a listener hadn't been registered");
}
}
/** Updates the rotation lock setting for a specified device state. */
+ @Override
public void updateSetting(int deviceState, boolean rotationLocked) {
int posture = mPosturesHelper.deviceStateToPosture(deviceState);
if (mPostureRotationLockFallbackSettings.indexOfKey(posture) >= 0) {
@@ -173,6 +151,7 @@ public final class DeviceStateRotationLockSettingsManager {
* DEVICE_STATE_ROTATION_LOCK_IGNORED}.
*/
@Settings.Secure.DeviceStateRotationLockSetting
+ @Override
public int getRotationLockSetting(int deviceState) {
int devicePosture = mPosturesHelper.deviceStateToPosture(deviceState);
int rotationLockSetting = mPostureRotationLockSettings.get(
@@ -196,6 +175,7 @@ public final class DeviceStateRotationLockSettingsManager {
/** Returns true if the rotation is locked for the current device state */
+ @Override
public boolean isRotationLocked(int deviceState) {
return getRotationLockSetting(deviceState) == DEVICE_STATE_ROTATION_LOCK_LOCKED;
}
@@ -204,6 +184,7 @@ public final class DeviceStateRotationLockSettingsManager {
* Returns true if there is no device state for which the current setting is {@link
* DEVICE_STATE_ROTATION_LOCK_UNLOCKED}.
*/
+ @Override
public boolean isRotationLockedForAllStates() {
for (int i = 0; i < mPostureRotationLockSettings.size(); i++) {
if (mPostureRotationLockSettings.valueAt(i)
@@ -215,6 +196,8 @@ public final class DeviceStateRotationLockSettingsManager {
}
/** Returns a list of device states and their respective auto-rotation setting availability. */
+ @Override
+ @NonNull
public List<SettableDeviceState> getSettableDeviceStates() {
// Returning a copy to make sure that nothing outside can mutate our internal list.
return new ArrayList<>(mSettableDeviceStates);
@@ -356,17 +339,21 @@ public final class DeviceStateRotationLockSettingsManager {
}
}
- /** Dumps internal state. */
- public void dump(IndentingPrintWriter pw) {
- pw.println("DeviceStateRotationLockSettingsManager");
- pw.increaseIndent();
- pw.println("mPostureRotationLockDefaults: "
+ @Override
+ public void dump(@NonNull PrintWriter writer, String[] args) {
+ IndentingPrintWriter indentingWriter = new IndentingPrintWriter(writer);
+ indentingWriter.println("DeviceStateRotationLockSettingsManager");
+ indentingWriter.increaseIndent();
+ indentingWriter.println("mPostureRotationLockDefaults: "
+ Arrays.toString(mPostureRotationLockDefaults));
- pw.println("mPostureDefaultRotationLockSettings: " + mPostureDefaultRotationLockSettings);
- pw.println("mDeviceStateRotationLockSettings: " + mPostureRotationLockSettings);
- pw.println("mPostureRotationLockFallbackSettings: " + mPostureRotationLockFallbackSettings);
- pw.println("mSettableDeviceStates: " + mSettableDeviceStates);
- pw.decreaseIndent();
+ indentingWriter.println(
+ "mPostureDefaultRotationLockSettings: " + mPostureDefaultRotationLockSettings);
+ indentingWriter.println(
+ "mDeviceStateRotationLockSettings: " + mPostureRotationLockSettings);
+ indentingWriter.println(
+ "mPostureRotationLockFallbackSettings: " + mPostureRotationLockFallbackSettings);
+ indentingWriter.println("mSettableDeviceStates: " + mSettableDeviceStates);
+ indentingWriter.decreaseIndent();
}
/**
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateAutoRotateSettingManagerImplTest.kt b/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateAutoRotateSettingManagerImplTest.kt
index 78dba57028ba..a9329ba3c76c 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateAutoRotateSettingManagerImplTest.kt
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateAutoRotateSettingManagerImplTest.kt
@@ -181,8 +181,10 @@ class DeviceStateAutoRotateSettingManagerImplTest {
@Test
fun getAutoRotateSetting_forInvalidPosture_returnsSettingForFallbackPosture() {
- persistSettings(DEVICE_STATE_ROTATION_KEY_UNFOLDED, DEVICE_STATE_ROTATION_LOCK_UNLOCKED)
- persistSettings(DEVICE_STATE_ROTATION_KEY_FOLDED, DEVICE_STATE_ROTATION_LOCK_LOCKED)
+ persistSettings(
+ "$DEVICE_STATE_ROTATION_KEY_FOLDED:$DEVICE_STATE_ROTATION_LOCK_LOCKED:" +
+ "$DEVICE_STATE_ROTATION_KEY_UNFOLDED:$DEVICE_STATE_ROTATION_LOCK_UNLOCKED"
+ )
val autoRotateSetting = settingManager.getRotationLockSetting(DEVICE_STATE_HALF_FOLDED)
@@ -276,7 +278,6 @@ class DeviceStateAutoRotateSettingManagerImplTest {
SettableDeviceState(DEVICE_STATE_ROTATION_KEY_FOLDED, isSettable = true),
SettableDeviceState(DEVICE_STATE_ROTATION_KEY_HALF_FOLDED, isSettable = false),
SettableDeviceState(DEVICE_STATE_ROTATION_KEY_REAR_DISPLAY, isSettable = false),
- SettableDeviceState(DEVICE_STATE_ROTATION_LOCK_IGNORED, isSettable = false),
)
}
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateAutoRotateSettingManagerProviderTest.kt b/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateAutoRotateSettingManagerProviderTest.kt
new file mode 100644
index 000000000000..c3ec4edfdee5
--- /dev/null
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateAutoRotateSettingManagerProviderTest.kt
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2025 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.settingslib.devicestate
+
+import android.content.Context
+import android.os.Handler
+import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
+import android.platform.test.flag.junit.SetFlagsRule
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.window.flags.Flags
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.Mock
+import org.mockito.junit.MockitoJUnit
+import java.util.concurrent.Executor
+import org.mockito.Mockito.`when` as whenever
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class DeviceStateAutoRotateSettingManagerProviderTest {
+
+ @get:Rule
+ val setFlagsRule: SetFlagsRule = SetFlagsRule()
+
+ @get:Rule val rule = MockitoJUnit.rule()
+
+ private val context: Context = ApplicationProvider.getApplicationContext()
+
+ @Mock
+ private lateinit var mockExecutor: Executor
+
+ @Mock
+ private lateinit var mockSecureSettings: SecureSettings
+
+ @Mock
+ private lateinit var mockMainHandler: Handler
+
+ @Mock
+ private lateinit var mockPosturesHelper: PosturesHelper
+
+ @Before
+ fun setup() {
+ whenever(mockSecureSettings.getStringForUser(any(), anyInt())).thenReturn("")
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_ENABLE_DEVICE_STATE_AUTO_ROTATE_SETTING_REFACTOR)
+ fun createInstance_refactorFlagEnabled_returnsRefactoredManager() {
+ val manager =
+ DeviceStateAutoRotateSettingManagerProvider.createInstance(
+ context, mockExecutor, mockSecureSettings, mockMainHandler, mockPosturesHelper
+ )
+
+ assertThat(manager).isInstanceOf(DeviceStateAutoRotateSettingManagerImpl::class.java)
+ }
+
+ @Test
+ @DisableFlags(Flags.FLAG_ENABLE_DEVICE_STATE_AUTO_ROTATE_SETTING_REFACTOR)
+ fun createInstance_refactorFlagDisabled_returnsLegacyManager() {
+ val manager =
+ DeviceStateAutoRotateSettingManagerProvider.createInstance(
+ context, mockExecutor, mockSecureSettings, mockMainHandler, mockPosturesHelper
+ )
+
+ assertThat(manager).isInstanceOf(DeviceStateRotationLockSettingsManager::class.java)
+ }
+}
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateRotationLockSettingsManagerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateRotationLockSettingsManagerTest.java
index baebaf7dfef0..b23ea5f1786f 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateRotationLockSettingsManagerTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/devicestate/DeviceStateRotationLockSettingsManagerTest.java
@@ -151,8 +151,8 @@ public class DeviceStateRotationLockSettingsManagerTest {
new String[]{"2:1", "1:0:1", "0:2"});
List<SettableDeviceState> settableDeviceStates =
- DeviceStateRotationLockSettingsManager.getInstance(
- mMockContext).getSettableDeviceStates();
+ new DeviceStateRotationLockSettingsManager(mMockContext,
+ mFakeSecureSettings).getSettableDeviceStates();
assertThat(settableDeviceStates).containsExactly(
new SettableDeviceState(/* deviceState= */ 2, /* isSettable= */ true),
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 2273b4f81eea..527a1f16a84f 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -16,6 +16,8 @@
package com.android.providers.settings;
+import static com.android.settingslib.devicestate.DeviceStateAutoRotateSettingUtils.isDeviceStateRotationLockEnabled;
+
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
@@ -49,7 +51,6 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.LocalePicker;
import com.android.server.backup.Flags;
-import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
import java.io.FileNotFoundException;
import java.util.ArrayList;
@@ -348,7 +349,7 @@ public class SettingsHelper {
private boolean shouldSkipAutoRotateRestore() {
// When device state based auto rotation settings are available, let's skip the restoring
// of the standard auto rotation settings to avoid conflicting setting values.
- return DeviceStateRotationLockSettingsManager.isDeviceStateRotationLockEnabled(mContext);
+ return isDeviceStateRotationLockEnabled(mContext);
}
public String onBackupValue(String name, String value) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingController.java
index fa022b4768fc..0f8d534df659 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingController.java
@@ -28,7 +28,6 @@ import android.util.IndentingPrintWriter;
import androidx.annotation.NonNull;
import com.android.settingslib.devicestate.DeviceStateAutoRotateSettingManager;
-import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
import com.android.systemui.Dumpable;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
@@ -49,7 +48,7 @@ public final class DeviceStateRotationLockSettingController
private final RotationPolicyWrapper mRotationPolicyWrapper;
private final DeviceStateManager mDeviceStateManager;
private final Executor mMainExecutor;
- private final DeviceStateRotationLockSettingsManager mDeviceStateRotationLockSettingsManager;
+ private final DeviceStateAutoRotateSettingManager mDeviceStateAutoRotateSettingManager;
private final DeviceStateRotationLockSettingControllerLogger mLogger;
// On registration for DeviceStateCallback, we will receive a callback with the current state
@@ -65,13 +64,13 @@ public final class DeviceStateRotationLockSettingController
RotationPolicyWrapper rotationPolicyWrapper,
DeviceStateManager deviceStateManager,
@Main Executor executor,
- DeviceStateRotationLockSettingsManager deviceStateRotationLockSettingsManager,
+ DeviceStateAutoRotateSettingManager deviceStateAutoRotateSettingManager,
DeviceStateRotationLockSettingControllerLogger logger,
DumpManager dumpManager) {
mRotationPolicyWrapper = rotationPolicyWrapper;
mDeviceStateManager = deviceStateManager;
mMainExecutor = executor;
- mDeviceStateRotationLockSettingsManager = deviceStateRotationLockSettingsManager;
+ mDeviceStateAutoRotateSettingManager = deviceStateAutoRotateSettingManager;
mLogger = logger;
dumpManager.registerDumpable(this);
}
@@ -86,14 +85,14 @@ public final class DeviceStateRotationLockSettingController
mDeviceStateManager.registerCallback(mMainExecutor, mDeviceStateCallback);
mDeviceStateAutoRotateSettingListener = () ->
readPersistedSetting("deviceStateRotationLockChange", mDeviceState);
- mDeviceStateRotationLockSettingsManager.registerListener(
+ mDeviceStateAutoRotateSettingManager.registerListener(
mDeviceStateAutoRotateSettingListener);
} else {
if (mDeviceStateCallback != null) {
mDeviceStateManager.unregisterCallback(mDeviceStateCallback);
}
if (mDeviceStateAutoRotateSettingListener != null) {
- mDeviceStateRotationLockSettingsManager.unregisterListener(
+ mDeviceStateAutoRotateSettingManager.unregisterListener(
mDeviceStateAutoRotateSettingListener);
}
}
@@ -102,7 +101,7 @@ public final class DeviceStateRotationLockSettingController
@Override
public void onRotationLockStateChanged(boolean newRotationLocked, boolean affordanceVisible) {
int deviceState = mDeviceState;
- boolean currentRotationLocked = mDeviceStateRotationLockSettingsManager
+ boolean currentRotationLocked = mDeviceStateAutoRotateSettingManager
.isRotationLocked(deviceState);
mLogger.logRotationLockStateChanged(deviceState, newRotationLocked, currentRotationLocked);
if (deviceState == -1) {
@@ -117,7 +116,7 @@ public final class DeviceStateRotationLockSettingController
private void saveNewRotationLockSetting(boolean isRotationLocked) {
int deviceState = mDeviceState;
mLogger.logSaveNewRotationLockSetting(isRotationLocked, deviceState);
- mDeviceStateRotationLockSettingsManager.updateSetting(deviceState, isRotationLocked);
+ mDeviceStateAutoRotateSettingManager.updateSetting(deviceState, isRotationLocked);
}
private void updateDeviceState(@NonNull DeviceState state) {
@@ -139,7 +138,7 @@ public final class DeviceStateRotationLockSettingController
private void readPersistedSetting(String caller, int state) {
int rotationLockSetting =
- mDeviceStateRotationLockSettingsManager.getRotationLockSetting(state);
+ mDeviceStateAutoRotateSettingManager.getRotationLockSetting(state);
boolean shouldBeLocked = rotationLockSetting == DEVICE_STATE_ROTATION_LOCK_LOCKED;
boolean isLocked = mRotationPolicyWrapper.isRotationLocked();
@@ -167,7 +166,7 @@ public final class DeviceStateRotationLockSettingController
@Override
public void dump(@NonNull PrintWriter printWriter, @NonNull String[] args) {
IndentingPrintWriter pw = new IndentingPrintWriter(printWriter);
- mDeviceStateRotationLockSettingsManager.dump(pw);
+ mDeviceStateAutoRotateSettingManager.dump(printWriter, null);
pw.println("DeviceStateRotationLockSettingController");
pw.increaseIndent();
pw.println("mDeviceState: " + mDeviceState);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
index d1e807f18196..e2a6c195af38 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
@@ -18,13 +18,20 @@ package com.android.systemui.statusbar.policy.dagger;
import android.content.Context;
import android.content.res.Resources;
+import android.hardware.devicestate.DeviceStateManager;
+import android.os.Handler;
import android.os.UserManager;
import com.android.internal.R;
-import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
+import com.android.settingslib.devicestate.AndroidSecureSettings;
+import com.android.settingslib.devicestate.DeviceStateAutoRotateSettingManager;
+import com.android.settingslib.devicestate.DeviceStateAutoRotateSettingManagerProvider;
+import com.android.settingslib.devicestate.PosturesHelper;
+import com.android.settingslib.devicestate.SecureSettings;
import com.android.settingslib.notification.modes.ZenIconLoader;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Application;
+import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.log.LogBuffer;
@@ -222,12 +229,34 @@ public interface StatusBarPolicyModule {
return controller;
}
- /** Returns a singleton instance of DeviceStateRotationLockSettingsManager */
+ /** */
+ @SysUISingleton
+ @Provides
+ static SecureSettings provideAndroidSecureSettings(Context context) {
+ return new AndroidSecureSettings(context.getContentResolver());
+ }
+
+ /** */
@SysUISingleton
@Provides
- static DeviceStateRotationLockSettingsManager provideAutoRotateSettingsManager(
- Context context) {
- return DeviceStateRotationLockSettingsManager.getInstance(context);
+ static PosturesHelper providePosturesHelper(Context context,
+ DeviceStateManager deviceStateManager) {
+ return new PosturesHelper(context, deviceStateManager);
+ }
+
+ /** Returns a singleton instance of DeviceStateAutoRotateSettingManager based on auto-rotate
+ * refactor flag. */
+ @SysUISingleton
+ @Provides
+ static DeviceStateAutoRotateSettingManager provideAutoRotateSettingsManager(
+ Context context,
+ @Background Executor bgExecutor,
+ SecureSettings secureSettings,
+ @Main Handler mainHandler,
+ PosturesHelper posturesHelper
+ ) {
+ return DeviceStateAutoRotateSettingManagerProvider.createInstance(context, bgExecutor,
+ secureSettings, mainHandler, posturesHelper);
}
/**
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingControllerTest.java
index 3247a1ab6eb0..8ff8fe6cc3d6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingControllerTest.java
@@ -44,6 +44,7 @@ import androidx.test.filters.SmallTest;
import com.android.internal.R;
import com.android.internal.view.RotationPolicy;
+import com.android.settingslib.devicestate.AndroidSecureSettings;
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager;
@@ -117,7 +118,8 @@ public class DeviceStateRotationLockSettingControllerTest extends SysuiTestCase
ArgumentCaptor.forClass(DeviceStateManager.DeviceStateCallback.class);
mContentResolver = mContext.getContentResolver();
- mSettingsManager = DeviceStateRotationLockSettingsManager.getInstance(mContext);
+ mSettingsManager = new DeviceStateRotationLockSettingsManager(mContext,
+ new AndroidSecureSettings(mContentResolver));
mDeviceStateRotationLockSettingController =
new DeviceStateRotationLockSettingController(
mFakeRotationPolicy,