diff options
2 files changed, 25 insertions, 9 deletions
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 76e1df1459e3..ea4ac2c928ce 100644 --- a/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateRotationLockSettingsManager.java +++ b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateRotationLockSettingsManager.java @@ -62,7 +62,6 @@ public final class DeviceStateRotationLockSettingsManager { private SparseIntArray mPostureRotationLockSettings; private SparseIntArray mPostureDefaultRotationLockSettings; private SparseIntArray mPostureRotationLockFallbackSettings; - private String mLastSettingValue; private List<SettableDeviceState> mSettableDeviceStates; @VisibleForTesting @@ -209,10 +208,7 @@ public final class DeviceStateRotationLockSettingsManager { } private void initializeInMemoryMap() { - String serializedSetting = - mSecureSettings.getStringForUser( - Settings.Secure.DEVICE_STATE_ROTATION_LOCK, - UserHandle.USER_CURRENT); + String serializedSetting = getPersistedSettingValue(); if (TextUtils.isEmpty(serializedSetting)) { // No settings saved, we should load the defaults and persist them. fallbackOnDefaults(); @@ -290,19 +286,25 @@ public final class DeviceStateRotationLockSettingsManager { } private void persistSettingIfChanged(String newSettingValue) { + String lastSettingValue = getPersistedSettingValue(); Log.v(TAG, "persistSettingIfChanged: " - + "last=" + mLastSettingValue + ", " + + "last=" + lastSettingValue + ", " + "new=" + newSettingValue); - if (TextUtils.equals(mLastSettingValue, newSettingValue)) { + if (TextUtils.equals(lastSettingValue, newSettingValue)) { return; } - mLastSettingValue = newSettingValue; mSecureSettings.putStringForUser( Settings.Secure.DEVICE_STATE_ROTATION_LOCK, /* value= */ newSettingValue, UserHandle.USER_CURRENT); } + private String getPersistedSettingValue() { + return mSecureSettings.getStringForUser( + Settings.Secure.DEVICE_STATE_ROTATION_LOCK, + UserHandle.USER_CURRENT); + } + private void loadDefaults() { mSettableDeviceStates = new ArrayList<>(mPostureRotationLockDefaults.length); mPostureDefaultRotationLockSettings = new SparseIntArray( @@ -351,7 +353,6 @@ public final class DeviceStateRotationLockSettingsManager { pw.println("mDeviceStateRotationLockSettings: " + mPostureRotationLockSettings); pw.println("mPostureRotationLockFallbackSettings: " + mPostureRotationLockFallbackSettings); pw.println("mSettableDeviceStates: " + mSettableDeviceStates); - pw.println("mLastSettingValue: " + mLastSettingValue); pw.decreaseIndent(); } 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 fdefcde3a170..52c2a87cc961 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 @@ -114,6 +114,21 @@ public class DeviceStateRotationLockSettingsManagerTest { } @Test + public void updateSetting_twiceWithSameValue_persistedValueDifferent_persistsAgain() { + mManager.updateSetting(/* deviceState= */ 1, /* rotationLocked= */ true); + // This persists a different setting than what was set above. It simulates the persisted + // setting being changed from a different process. + persistSettings("0:1:1:2:2:2"); + mNumSettingsChanges = 0; + + // Updating again with the same value as in the first line of the test should persist the + // setting, as it is different to what is actually persisted. + mManager.updateSetting(/* deviceState= */ 1, /* rotationLocked= */ true); + + assertThat(mNumSettingsChanges).isEqualTo(1); + } + + @Test public void getSettableDeviceStates_returnsExpectedValuesInOriginalOrder() { when(mMockResources.getStringArray( R.array.config_perDeviceStateRotationLockDefaults)).thenReturn( |