From 369cfd8ea59981b8bb697ff28bcefae08f7efb51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wilczy=C5=84ski?= Date: Fri, 15 Dec 2023 20:42:00 +0000 Subject: [PATCH] Don't back up Smooth Display if feature flag off In the previous CL (ag/24838636), we decided to back up Smooth Display and Force Peak Refresh Rate even if the feature flag is off and then just convert the value in DisplayModeDirector based on the state of the feature flag. This was because it wasn't clear how to access the feature flag from the Settings module. This resulted in the feature partially working if the flag is off. Bug: 313021502 Test: atest DisplayModeDirectorTest Test: atest ForcePeakRefreshRatePreferenceControllerTest Test: atest PeakRefreshRatePreferenceControllerTest Test: atest SettingsBackupAgentTest Test: atest SettingsBackupTest Test: atest SettingsValidatorsTest Change-Id: I3406bc5c5f49fe6102cdfe6934813a9c4073ac6f --- ...cePeakRefreshRatePreferenceController.java | 5 +- .../PeakRefreshRatePreferenceController.java | 5 +- ...akRefreshRatePreferenceControllerTest.java | 26 +++++++++- ...akRefreshRatePreferenceControllerTest.java | 48 +++++++++++-------- 4 files changed, 60 insertions(+), 24 deletions(-) diff --git a/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java b/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java index 80b295c60fd..abeb94991fb 100644 --- a/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java +++ b/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java @@ -28,6 +28,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.TwoStatePreference; +import com.android.server.display.feature.flags.Flags; import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.development.DeveloperOptionsPreferenceController; @@ -95,7 +96,9 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr @VisibleForTesting void forcePeakRefreshRate(boolean enable) { - final float peakRefreshRate = enable ? Float.POSITIVE_INFINITY : NO_CONFIG; + final float valueIfEnabled = Flags.backUpSmoothDisplayAndForcePeakRefreshRate() + ? Float.POSITIVE_INFINITY : mPeakRefreshRate; + final float peakRefreshRate = enable ? valueIfEnabled : NO_CONFIG; Settings.System.putFloat(mContext.getContentResolver(), Settings.System.MIN_REFRESH_RATE, peakRefreshRate); } diff --git a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java index dfe571aeb26..17d763ac42a 100644 --- a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java +++ b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java @@ -30,6 +30,7 @@ import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; +import com.android.server.display.feature.flags.Flags; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; @@ -107,7 +108,9 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl @Override public boolean setChecked(boolean isChecked) { - final float peakRefreshRate = isChecked ? Float.POSITIVE_INFINITY : DEFAULT_REFRESH_RATE; + final float valueIfChecked = Flags.backUpSmoothDisplayAndForcePeakRefreshRate() + ? Float.POSITIVE_INFINITY : mPeakRefreshRate; + final float peakRefreshRate = isChecked ? valueIfChecked : DEFAULT_REFRESH_RATE; Log.d(TAG, "setChecked to : " + peakRefreshRate); return Settings.System.putFloat( diff --git a/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java index c5cc8564cd7..314120aa126 100644 --- a/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java @@ -25,12 +25,19 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.platform.test.annotations.RequiresFlagsDisabled; +import android.platform.test.annotations.RequiresFlagsEnabled; +import android.platform.test.flag.junit.CheckFlagsRule; +import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.provider.Settings; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; +import com.android.server.display.feature.flags.Flags; + import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -50,6 +57,9 @@ public class ForcePeakRefreshRatePreferenceControllerTest { private Context mContext; private ForcePeakRefreshRatePreferenceController mController; + @Rule + public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); + @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -61,7 +71,19 @@ public class ForcePeakRefreshRatePreferenceControllerTest { } @Test - public void onPreferenceChange_preferenceChecked_shouldEnableForcePeak() { + @RequiresFlagsDisabled(Flags.FLAG_BACK_UP_SMOOTH_DISPLAY_AND_FORCE_PEAK_REFRESH_RATE) + public void onPreferenceChange_preferenceChecked_shouldEnableForcePeak_featureFlagOff() { + mController.mPeakRefreshRate = 88f; + + mController.onPreferenceChange(mPreference, true); + + assertThat(Settings.System.getFloat(mContext.getContentResolver(), + Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(88f); + } + + @Test + @RequiresFlagsEnabled(Flags.FLAG_BACK_UP_SMOOTH_DISPLAY_AND_FORCE_PEAK_REFRESH_RATE) + public void onPreferenceChange_preferenceChecked_shouldEnableForcePeak_featureFlagOn() { mController.mPeakRefreshRate = 88f; mController.onPreferenceChange(mPreference, true); @@ -88,6 +110,7 @@ public class ForcePeakRefreshRatePreferenceControllerTest { mController.updateState(mPreference); verify(mPreference).setChecked(true); + assertThat(mController.isForcePeakRefreshRateEnabled()).isTrue(); } @Test @@ -98,6 +121,7 @@ public class ForcePeakRefreshRatePreferenceControllerTest { mController.updateState(mPreference); verify(mPreference).setChecked(false); + assertThat(mController.isForcePeakRefreshRateEnabled()).isFalse(); } @Test diff --git a/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java index 8b2c4454a18..cb0963b19ba 100644 --- a/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java @@ -25,11 +25,18 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; import android.content.Context; +import android.platform.test.annotations.RequiresFlagsDisabled; +import android.platform.test.annotations.RequiresFlagsEnabled; +import android.platform.test.flag.junit.CheckFlagsRule; +import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.provider.Settings; import androidx.preference.SwitchPreference; +import com.android.server.display.feature.flags.Flags; + import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -49,6 +56,9 @@ public class PeakRefreshRatePreferenceControllerTest { private PeakRefreshRatePreferenceController.DeviceConfigDisplaySettings mDeviceConfigDisplaySettings; + @Rule + public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); + @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -79,7 +89,19 @@ public class PeakRefreshRatePreferenceControllerTest { } @Test - public void setChecked_enableSmoothDisplay_setRefreshRateToInfinity() { + @RequiresFlagsDisabled(Flags.FLAG_BACK_UP_SMOOTH_DISPLAY_AND_FORCE_PEAK_REFRESH_RATE) + public void setChecked_enableSmoothDisplay_featureFlagOff() { + mController.mPeakRefreshRate = 88f; + mController.setChecked(true); + + assertThat(Settings.System.getFloat(mContext.getContentResolver(), + Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE)) + .isEqualTo(88f); + } + + @Test + @RequiresFlagsEnabled(Flags.FLAG_BACK_UP_SMOOTH_DISPLAY_AND_FORCE_PEAK_REFRESH_RATE) + public void setChecked_enableSmoothDisplay_featureFlagOn() { mController.mPeakRefreshRate = 88f; mController.setChecked(true); @@ -100,14 +122,16 @@ public class PeakRefreshRatePreferenceControllerTest { @Test public void isChecked_enableSmoothDisplay_returnTrue() { - enableSmoothDisplayPreference(); + mController.mPeakRefreshRate = 88f; + mController.setChecked(true); assertThat(mController.isChecked()).isTrue(); } @Test public void isChecked_disableSmoothDisplay_returnFalse() { - disableSmoothDisplayPreference(); + mController.mPeakRefreshRate = 88f; + mController.setChecked(false); assertThat(mController.isChecked()).isFalse(); } @@ -128,22 +152,4 @@ public class PeakRefreshRatePreferenceControllerTest { assertThat(mController.isChecked()).isFalse(); } - - private void enableSmoothDisplayPreference() { - mController.mPeakRefreshRate = 88f; - - Settings.System.putFloat( - mContext.getContentResolver(), - Settings.System.PEAK_REFRESH_RATE, - mController.mPeakRefreshRate); - } - - private void disableSmoothDisplayPreference() { - mController.mPeakRefreshRate = 88f; - - Settings.System.putFloat( - mContext.getContentResolver(), - Settings.System.PEAK_REFRESH_RATE, - DEFAULT_REFRESH_RATE); - } }