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
This commit is contained in:
Piotr Wilczyński
2023-12-15 20:42:00 +00:00
parent 1a564010bf
commit 369cfd8ea5
4 changed files with 60 additions and 24 deletions

View File

@@ -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);
}

View File

@@ -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(

View File

@@ -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

View File

@@ -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);
}
}