Merge "Back up peak refresh rate and min refresh rate" into main

This commit is contained in:
Piotr Wilczyński
2023-10-10 15:45:28 +00:00
committed by Android (Google) Code Review
4 changed files with 49 additions and 74 deletions

View File

@@ -16,11 +16,12 @@
package com.android.settings.development;
import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
import static com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay;
import android.content.Context;
import android.hardware.display.DisplayManager;
import android.provider.Settings;
import android.util.Log;
import android.view.Display;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -34,9 +35,6 @@ import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPreferenceController
implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
@VisibleForTesting
static float DEFAULT_REFRESH_RATE = 60f;
@VisibleForTesting
static float NO_CONFIG = 0f;
@@ -48,17 +46,7 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr
public ForcePeakRefreshRatePreferenceController(Context context) {
super(context);
final DisplayManager dm = context.getSystemService(DisplayManager.class);
final Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);
if (display == null) {
Log.w(TAG, "No valid default display device");
mPeakRefreshRate = DEFAULT_REFRESH_RATE;
} else {
mPeakRefreshRate = findPeakRefreshRate(display.getSupportedModes());
}
mPeakRefreshRate = findHighestRefreshRateForDefaultDisplay(context);
Log.d(TAG, "DEFAULT_REFRESH_RATE : " + DEFAULT_REFRESH_RATE
+ " mPeakRefreshRate : " + mPeakRefreshRate);
}
@@ -107,7 +95,7 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr
@VisibleForTesting
void forcePeakRefreshRate(boolean enable) {
final float peakRefreshRate = enable ? mPeakRefreshRate : NO_CONFIG;
final float peakRefreshRate = enable ? Float.POSITIVE_INFINITY : NO_CONFIG;
Settings.System.putFloat(mContext.getContentResolver(),
Settings.System.MIN_REFRESH_RATE, peakRefreshRate);
}
@@ -116,17 +104,7 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr
final float peakRefreshRate = Settings.System.getFloat(mContext.getContentResolver(),
Settings.System.MIN_REFRESH_RATE, NO_CONFIG);
return peakRefreshRate >= mPeakRefreshRate;
}
private float findPeakRefreshRate(Display.Mode[] modes) {
float peakRefreshRate = DEFAULT_REFRESH_RATE;
for (Display.Mode mode : modes) {
if (Math.round(mode.getRefreshRate()) > peakRefreshRate) {
peakRefreshRate = mode.getRefreshRate();
}
}
return peakRefreshRate;
return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate)
|| Float.isInfinite(peakRefreshRate);
}
}

View File

@@ -16,13 +16,15 @@
package com.android.settings.display;
import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
import static com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay;
import android.content.Context;
import android.hardware.display.DisplayManager;
import android.os.Handler;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.util.Log;
import android.view.Display;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -39,8 +41,6 @@ import java.util.concurrent.Executor;
public class PeakRefreshRatePreferenceController extends TogglePreferenceController
implements LifecycleObserver, OnStart, OnStop {
@VisibleForTesting static float DEFAULT_REFRESH_RATE = 60f;
@VisibleForTesting float mPeakRefreshRate;
private static final String TAG = "RefreshRatePrefCtr";
@@ -48,7 +48,7 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
private final Handler mHandler;
private final IDeviceConfigChange mOnDeviceConfigChange;
private final DeviceConfigDisplaySettings mDeviceConfigDisplaySettings;
private DeviceConfigDisplaySettings mDeviceConfigDisplaySettings;
private Preference mPreference;
private interface IDeviceConfigChange {
@@ -65,17 +65,7 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
updateState(mPreference);
}
};
final DisplayManager dm = mContext.getSystemService(DisplayManager.class);
final Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);
if (display == null) {
Log.w(TAG, "No valid default display device");
mPeakRefreshRate = DEFAULT_REFRESH_RATE;
} else {
mPeakRefreshRate = findPeakRefreshRate(display.getSupportedModes());
}
mPeakRefreshRate = findHighestRefreshRateForDefaultDisplay(context);
Log.d(
TAG,
"DEFAULT_REFRESH_RATE : "
@@ -111,12 +101,13 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
mContext.getContentResolver(),
Settings.System.PEAK_REFRESH_RATE,
getDefaultPeakRefreshRate());
return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate);
return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate)
|| Float.isInfinite(peakRefreshRate);
}
@Override
public boolean setChecked(boolean isChecked) {
final float peakRefreshRate = isChecked ? mPeakRefreshRate : DEFAULT_REFRESH_RATE;
final float peakRefreshRate = isChecked ? Float.POSITIVE_INFINITY : DEFAULT_REFRESH_RATE;
Log.d(TAG, "setChecked to : " + peakRefreshRate);
return Settings.System.putFloat(
@@ -139,17 +130,13 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
}
@VisibleForTesting
float findPeakRefreshRate(Display.Mode[] modes) {
float peakRefreshRate = DEFAULT_REFRESH_RATE;
for (Display.Mode mode : modes) {
if (Math.round(mode.getRefreshRate()) > peakRefreshRate) {
peakRefreshRate = mode.getRefreshRate();
}
}
return peakRefreshRate;
void injectDeviceConfigDisplaySettings(
DeviceConfigDisplaySettings deviceConfigDisplaySettings) {
mDeviceConfigDisplaySettings = deviceConfigDisplaySettings;
}
private class DeviceConfigDisplaySettings
@VisibleForTesting
class DeviceConfigDisplaySettings
implements DeviceConfig.OnPropertiesChangedListener, Executor {
public void startListening() {
DeviceConfig.addOnPropertiesChangedListener(

View File

@@ -16,8 +16,9 @@
package com.android.settings.development;
import static com.android.settings.development.ForcePeakRefreshRatePreferenceController.DEFAULT_REFRESH_RATE;
import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
import static com.android.settings.development.ForcePeakRefreshRatePreferenceController.NO_CONFIG;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.verify;
@@ -38,8 +39,6 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import android.util.Log;
@RunWith(RobolectricTestRunner.class)
public class ForcePeakRefreshRatePreferenceControllerTest {
@@ -68,7 +67,7 @@ public class ForcePeakRefreshRatePreferenceControllerTest {
mController.onPreferenceChange(mPreference, true);
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(88f);
Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isPositiveInfinity();
}
@Test

View File

@@ -16,21 +16,24 @@
package com.android.settings.display;
import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.android.settings.display.PeakRefreshRatePreferenceController.DEFAULT_REFRESH_RATE;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.provider.Settings;
import android.view.Display;
import androidx.preference.SwitchPreference;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -42,10 +45,16 @@ public class PeakRefreshRatePreferenceControllerTest {
private PeakRefreshRatePreferenceController mController;
private SwitchPreference mPreference;
@Mock
private PeakRefreshRatePreferenceController.DeviceConfigDisplaySettings
mDeviceConfigDisplaySettings;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mController = new PeakRefreshRatePreferenceController(mContext, "key");
mController.injectDeviceConfigDisplaySettings(mDeviceConfigDisplaySettings);
mPreference = new SwitchPreference(RuntimeEnvironment.application);
}
@@ -70,13 +79,13 @@ public class PeakRefreshRatePreferenceControllerTest {
}
@Test
public void setChecked_enableSmoothDisplay_setCurrentRefreshRate() {
public void setChecked_enableSmoothDisplay_setRefreshRateToInfinity() {
mController.mPeakRefreshRate = 88f;
mController.setChecked(true);
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE))
.isEqualTo(88.0f);
.isPositiveInfinity();
}
@Test
@@ -104,18 +113,20 @@ public class PeakRefreshRatePreferenceControllerTest {
}
@Test
public void findPeakRefreshRate_moreThanOneHigherThanDefault() {
Display.Mode lower = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE - 1);
Display.Mode def = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE);
Display.Mode higher = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE + 1);
Display.Mode higher1 = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE + 2);
public void isChecked_default_returnTrue() {
mController.mPeakRefreshRate = 88f;
when(mDeviceConfigDisplaySettings.getDefaultPeakRefreshRate())
.thenReturn(mController.mPeakRefreshRate);
assertThat(mController.findPeakRefreshRate(
new Display.Mode[] {lower, def, higher, higher1}))
.isEqualTo(DEFAULT_REFRESH_RATE + 2);
assertThat(mController.findPeakRefreshRate(
new Display.Mode[] {lower, def, higher1, higher}))
.isEqualTo(DEFAULT_REFRESH_RATE + 2);
assertThat(mController.isChecked()).isTrue();
}
@Test
public void isChecked_default_returnFalse() {
mController.mPeakRefreshRate = 88f;
when(mDeviceConfigDisplaySettings.getDefaultPeakRefreshRate()).thenReturn(60f);
assertThat(mController.isChecked()).isFalse();
}
private void enableSmoothDisplayPreference() {