diff options
author | 2025-03-18 06:48:16 -0700 | |
---|---|---|
committer | 2025-03-18 06:48:16 -0700 | |
commit | 8c2cfb9ed5302b30223e6ff66a14a9f52cf56dd4 (patch) | |
tree | 0fc0beea14266620d2443feaecdd69c30a3d1bd7 | |
parent | ca5470de5e7dcaf805fa62295aebe32151f91083 (diff) | |
parent | 04d8e057a977b12163aba2e85631a017e150df36 (diff) |
Merge "Integrate refactored device-state auto-rotate setting manager" into main
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, |