Merge "Back up peak refresh rate and min refresh rate" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
3a9777c8e8
@@ -16,11 +16,12 @@
|
|||||||
|
|
||||||
package com.android.settings.development;
|
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.content.Context;
|
||||||
import android.hardware.display.DisplayManager;
|
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Display;
|
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -34,9 +35,6 @@ import com.android.settingslib.development.DeveloperOptionsPreferenceController;
|
|||||||
public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPreferenceController
|
public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPreferenceController
|
||||||
implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
|
implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
static float DEFAULT_REFRESH_RATE = 60f;
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static float NO_CONFIG = 0f;
|
static float NO_CONFIG = 0f;
|
||||||
|
|
||||||
@@ -48,17 +46,7 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr
|
|||||||
|
|
||||||
public ForcePeakRefreshRatePreferenceController(Context context) {
|
public ForcePeakRefreshRatePreferenceController(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
mPeakRefreshRate = findHighestRefreshRateForDefaultDisplay(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());
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "DEFAULT_REFRESH_RATE : " + DEFAULT_REFRESH_RATE
|
Log.d(TAG, "DEFAULT_REFRESH_RATE : " + DEFAULT_REFRESH_RATE
|
||||||
+ " mPeakRefreshRate : " + mPeakRefreshRate);
|
+ " mPeakRefreshRate : " + mPeakRefreshRate);
|
||||||
}
|
}
|
||||||
@@ -107,7 +95,7 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void forcePeakRefreshRate(boolean enable) {
|
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.putFloat(mContext.getContentResolver(),
|
||||||
Settings.System.MIN_REFRESH_RATE, peakRefreshRate);
|
Settings.System.MIN_REFRESH_RATE, peakRefreshRate);
|
||||||
}
|
}
|
||||||
@@ -116,17 +104,7 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr
|
|||||||
final float peakRefreshRate = Settings.System.getFloat(mContext.getContentResolver(),
|
final float peakRefreshRate = Settings.System.getFloat(mContext.getContentResolver(),
|
||||||
Settings.System.MIN_REFRESH_RATE, NO_CONFIG);
|
Settings.System.MIN_REFRESH_RATE, NO_CONFIG);
|
||||||
|
|
||||||
return peakRefreshRate >= mPeakRefreshRate;
|
return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate)
|
||||||
}
|
|| Float.isInfinite(peakRefreshRate);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,13 +16,15 @@
|
|||||||
|
|
||||||
package com.android.settings.display;
|
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.content.Context;
|
||||||
import android.hardware.display.DisplayManager;
|
import android.hardware.display.DisplayManager;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.provider.DeviceConfig;
|
import android.provider.DeviceConfig;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Display;
|
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -39,8 +41,6 @@ import java.util.concurrent.Executor;
|
|||||||
public class PeakRefreshRatePreferenceController extends TogglePreferenceController
|
public class PeakRefreshRatePreferenceController extends TogglePreferenceController
|
||||||
implements LifecycleObserver, OnStart, OnStop {
|
implements LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
@VisibleForTesting static float DEFAULT_REFRESH_RATE = 60f;
|
|
||||||
|
|
||||||
@VisibleForTesting float mPeakRefreshRate;
|
@VisibleForTesting float mPeakRefreshRate;
|
||||||
|
|
||||||
private static final String TAG = "RefreshRatePrefCtr";
|
private static final String TAG = "RefreshRatePrefCtr";
|
||||||
@@ -48,7 +48,7 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
|
|||||||
|
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
private final IDeviceConfigChange mOnDeviceConfigChange;
|
private final IDeviceConfigChange mOnDeviceConfigChange;
|
||||||
private final DeviceConfigDisplaySettings mDeviceConfigDisplaySettings;
|
private DeviceConfigDisplaySettings mDeviceConfigDisplaySettings;
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
|
|
||||||
private interface IDeviceConfigChange {
|
private interface IDeviceConfigChange {
|
||||||
@@ -65,17 +65,7 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
|
|||||||
updateState(mPreference);
|
updateState(mPreference);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
mPeakRefreshRate = findHighestRefreshRateForDefaultDisplay(context);
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(
|
Log.d(
|
||||||
TAG,
|
TAG,
|
||||||
"DEFAULT_REFRESH_RATE : "
|
"DEFAULT_REFRESH_RATE : "
|
||||||
@@ -111,12 +101,13 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
|
|||||||
mContext.getContentResolver(),
|
mContext.getContentResolver(),
|
||||||
Settings.System.PEAK_REFRESH_RATE,
|
Settings.System.PEAK_REFRESH_RATE,
|
||||||
getDefaultPeakRefreshRate());
|
getDefaultPeakRefreshRate());
|
||||||
return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate);
|
return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate)
|
||||||
|
|| Float.isInfinite(peakRefreshRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setChecked(boolean isChecked) {
|
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);
|
Log.d(TAG, "setChecked to : " + peakRefreshRate);
|
||||||
|
|
||||||
return Settings.System.putFloat(
|
return Settings.System.putFloat(
|
||||||
@@ -139,17 +130,13 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
float findPeakRefreshRate(Display.Mode[] modes) {
|
void injectDeviceConfigDisplaySettings(
|
||||||
float peakRefreshRate = DEFAULT_REFRESH_RATE;
|
DeviceConfigDisplaySettings deviceConfigDisplaySettings) {
|
||||||
for (Display.Mode mode : modes) {
|
mDeviceConfigDisplaySettings = deviceConfigDisplaySettings;
|
||||||
if (Math.round(mode.getRefreshRate()) > peakRefreshRate) {
|
|
||||||
peakRefreshRate = mode.getRefreshRate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return peakRefreshRate;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class DeviceConfigDisplaySettings
|
@VisibleForTesting
|
||||||
|
class DeviceConfigDisplaySettings
|
||||||
implements DeviceConfig.OnPropertiesChangedListener, Executor {
|
implements DeviceConfig.OnPropertiesChangedListener, Executor {
|
||||||
public void startListening() {
|
public void startListening() {
|
||||||
DeviceConfig.addOnPropertiesChangedListener(
|
DeviceConfig.addOnPropertiesChangedListener(
|
||||||
|
@@ -16,8 +16,9 @@
|
|||||||
|
|
||||||
package com.android.settings.development;
|
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.android.settings.development.ForcePeakRefreshRatePreferenceController.NO_CONFIG;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
@@ -38,8 +39,6 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class ForcePeakRefreshRatePreferenceControllerTest {
|
public class ForcePeakRefreshRatePreferenceControllerTest {
|
||||||
|
|
||||||
@@ -68,7 +67,7 @@ public class ForcePeakRefreshRatePreferenceControllerTest {
|
|||||||
mController.onPreferenceChange(mPreference, true);
|
mController.onPreferenceChange(mPreference, true);
|
||||||
|
|
||||||
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
|
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
|
||||||
Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(88f);
|
Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isPositiveInfinity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -16,21 +16,24 @@
|
|||||||
|
|
||||||
package com.android.settings.display;
|
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.AVAILABLE;
|
||||||
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
|
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 com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.view.Display;
|
|
||||||
|
|
||||||
import androidx.preference.SwitchPreference;
|
import androidx.preference.SwitchPreference;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
@@ -42,10 +45,16 @@ public class PeakRefreshRatePreferenceControllerTest {
|
|||||||
private PeakRefreshRatePreferenceController mController;
|
private PeakRefreshRatePreferenceController mController;
|
||||||
private SwitchPreference mPreference;
|
private SwitchPreference mPreference;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private PeakRefreshRatePreferenceController.DeviceConfigDisplaySettings
|
||||||
|
mDeviceConfigDisplaySettings;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mController = new PeakRefreshRatePreferenceController(mContext, "key");
|
mController = new PeakRefreshRatePreferenceController(mContext, "key");
|
||||||
|
mController.injectDeviceConfigDisplaySettings(mDeviceConfigDisplaySettings);
|
||||||
mPreference = new SwitchPreference(RuntimeEnvironment.application);
|
mPreference = new SwitchPreference(RuntimeEnvironment.application);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,13 +79,13 @@ public class PeakRefreshRatePreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setChecked_enableSmoothDisplay_setCurrentRefreshRate() {
|
public void setChecked_enableSmoothDisplay_setRefreshRateToInfinity() {
|
||||||
mController.mPeakRefreshRate = 88f;
|
mController.mPeakRefreshRate = 88f;
|
||||||
mController.setChecked(true);
|
mController.setChecked(true);
|
||||||
|
|
||||||
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
|
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
|
||||||
Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE))
|
Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE))
|
||||||
.isEqualTo(88.0f);
|
.isPositiveInfinity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -104,18 +113,20 @@ public class PeakRefreshRatePreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void findPeakRefreshRate_moreThanOneHigherThanDefault() {
|
public void isChecked_default_returnTrue() {
|
||||||
Display.Mode lower = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE - 1);
|
mController.mPeakRefreshRate = 88f;
|
||||||
Display.Mode def = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE);
|
when(mDeviceConfigDisplaySettings.getDefaultPeakRefreshRate())
|
||||||
Display.Mode higher = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE + 1);
|
.thenReturn(mController.mPeakRefreshRate);
|
||||||
Display.Mode higher1 = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE + 2);
|
|
||||||
|
|
||||||
assertThat(mController.findPeakRefreshRate(
|
assertThat(mController.isChecked()).isTrue();
|
||||||
new Display.Mode[] {lower, def, higher, higher1}))
|
}
|
||||||
.isEqualTo(DEFAULT_REFRESH_RATE + 2);
|
|
||||||
assertThat(mController.findPeakRefreshRate(
|
@Test
|
||||||
new Display.Mode[] {lower, def, higher1, higher}))
|
public void isChecked_default_returnFalse() {
|
||||||
.isEqualTo(DEFAULT_REFRESH_RATE + 2);
|
mController.mPeakRefreshRate = 88f;
|
||||||
|
when(mDeviceConfigDisplaySettings.getDefaultPeakRefreshRate()).thenReturn(60f);
|
||||||
|
|
||||||
|
assertThat(mController.isChecked()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enableSmoothDisplayPreference() {
|
private void enableSmoothDisplayPreference() {
|
||||||
|
Reference in New Issue
Block a user