Merge "Back up the smooth display setting" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
85d5e3efb8
@@ -16,17 +16,18 @@
|
|||||||
|
|
||||||
package com.android.settings.development;
|
package com.android.settings.development;
|
||||||
|
|
||||||
|
import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
|
||||||
|
|
||||||
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;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
import androidx.preference.SwitchPreference;
|
import androidx.preference.SwitchPreference;
|
||||||
|
|
||||||
|
import com.android.internal.display.RefreshRateSettingsUtils;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.PreferenceControllerMixin;
|
import com.android.settings.core.PreferenceControllerMixin;
|
||||||
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
|
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
|
||||||
@@ -34,12 +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
|
|
||||||
static float NO_CONFIG = 0f;
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
float mPeakRefreshRate;
|
float mPeakRefreshRate;
|
||||||
|
|
||||||
@@ -48,17 +43,8 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr
|
|||||||
|
|
||||||
public ForcePeakRefreshRatePreferenceController(Context context) {
|
public ForcePeakRefreshRatePreferenceController(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
mPeakRefreshRate =
|
||||||
final DisplayManager dm = context.getSystemService(DisplayManager.class);
|
RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(context);
|
||||||
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);
|
||||||
}
|
}
|
||||||
@@ -99,34 +85,20 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr
|
|||||||
@Override
|
@Override
|
||||||
protected void onDeveloperOptionsSwitchDisabled() {
|
protected void onDeveloperOptionsSwitchDisabled() {
|
||||||
super.onDeveloperOptionsSwitchDisabled();
|
super.onDeveloperOptionsSwitchDisabled();
|
||||||
Settings.System.putFloat(mContext.getContentResolver(),
|
Settings.System.putInt(mContext.getContentResolver(),
|
||||||
Settings.System.MIN_REFRESH_RATE, NO_CONFIG);
|
Settings.System.FORCE_PEAK_REFRESH_RATE, 0);
|
||||||
|
|
||||||
((SwitchPreference) mPreference).setChecked(false);
|
((SwitchPreference) mPreference).setChecked(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void forcePeakRefreshRate(boolean enable) {
|
void forcePeakRefreshRate(boolean enable) {
|
||||||
final float peakRefreshRate = enable ? mPeakRefreshRate : NO_CONFIG;
|
Settings.System.putInt(mContext.getContentResolver(),
|
||||||
Settings.System.putFloat(mContext.getContentResolver(),
|
Settings.System.FORCE_PEAK_REFRESH_RATE, enable ? 1 : 0);
|
||||||
Settings.System.MIN_REFRESH_RATE, peakRefreshRate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isForcePeakRefreshRateEnabled() {
|
boolean isForcePeakRefreshRateEnabled() {
|
||||||
final float peakRefreshRate = Settings.System.getFloat(mContext.getContentResolver(),
|
return Settings.System.getInt(mContext.getContentResolver(),
|
||||||
Settings.System.MIN_REFRESH_RATE, NO_CONFIG);
|
Settings.System.FORCE_PEAK_REFRESH_RATE, 0) == 1;
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,18 +16,20 @@
|
|||||||
|
|
||||||
package com.android.settings.display;
|
package com.android.settings.display;
|
||||||
|
|
||||||
|
import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
|
||||||
|
|
||||||
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;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
import com.android.internal.display.RefreshRateSettingsUtils;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||||
@@ -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";
|
||||||
@@ -65,17 +65,8 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
|
|||||||
updateState(mPreference);
|
updateState(mPreference);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
mPeakRefreshRate =
|
||||||
final DisplayManager dm = mContext.getSystemService(DisplayManager.class);
|
RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(context);
|
||||||
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 : "
|
||||||
@@ -106,21 +97,15 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isChecked() {
|
public boolean isChecked() {
|
||||||
final float peakRefreshRate =
|
return Settings.System.getInt(mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY,
|
||||||
Settings.System.getFloat(
|
0) == 1;
|
||||||
mContext.getContentResolver(),
|
|
||||||
Settings.System.PEAK_REFRESH_RATE,
|
|
||||||
getDefaultPeakRefreshRate());
|
|
||||||
return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setChecked(boolean isChecked) {
|
public boolean setChecked(boolean isChecked) {
|
||||||
final float peakRefreshRate = isChecked ? mPeakRefreshRate : DEFAULT_REFRESH_RATE;
|
Log.d(TAG, "setChecked to : " + isChecked);
|
||||||
Log.d(TAG, "setChecked to : " + peakRefreshRate);
|
return Settings.System.putInt(
|
||||||
|
mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY, isChecked ? 1 : 0);
|
||||||
return Settings.System.putFloat(
|
|
||||||
mContext.getContentResolver(), Settings.System.PEAK_REFRESH_RATE, peakRefreshRate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -138,17 +123,6 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
|
|||||||
mDeviceConfigDisplaySettings.stopListening();
|
mDeviceConfigDisplaySettings.stopListening();
|
||||||
}
|
}
|
||||||
|
|
||||||
@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;
|
|
||||||
}
|
|
||||||
|
|
||||||
private class DeviceConfigDisplaySettings
|
private class DeviceConfigDisplaySettings
|
||||||
implements DeviceConfig.OnPropertiesChangedListener, Executor {
|
implements DeviceConfig.OnPropertiesChangedListener, Executor {
|
||||||
public void startListening() {
|
public void startListening() {
|
||||||
@@ -191,15 +165,4 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private float getDefaultPeakRefreshRate() {
|
|
||||||
float defaultPeakRefreshRate = mDeviceConfigDisplaySettings.getDefaultPeakRefreshRate();
|
|
||||||
if (defaultPeakRefreshRate == INVALIDATE_REFRESH_RATE) {
|
|
||||||
defaultPeakRefreshRate = (float) mContext.getResources().getInteger(
|
|
||||||
com.android.internal.R.integer.config_defaultPeakRefreshRate);
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "DeviceConfig getDefaultPeakRefreshRate : " + defaultPeakRefreshRate);
|
|
||||||
return defaultPeakRefreshRate;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
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.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 +38,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 {
|
||||||
|
|
||||||
@@ -63,22 +61,18 @@ public class ForcePeakRefreshRatePreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onPreferenceChange_preferenceChecked_shouldEnableForcePeak() {
|
public void onPreferenceChange_preferenceChecked_shouldEnableForcePeak() {
|
||||||
mController.mPeakRefreshRate = 88f;
|
|
||||||
|
|
||||||
mController.onPreferenceChange(mPreference, true);
|
mController.onPreferenceChange(mPreference, true);
|
||||||
|
|
||||||
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
|
assertThat(Settings.System.getInt(mContext.getContentResolver(),
|
||||||
Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(88f);
|
Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onPreferenceChange_preferenceUnchecked_shouldDisableForcePeak() {
|
public void onPreferenceChange_preferenceUnchecked_shouldDisableForcePeak() {
|
||||||
mController.mPeakRefreshRate = 88f;
|
|
||||||
|
|
||||||
mController.onPreferenceChange(mPreference, false);
|
mController.onPreferenceChange(mPreference, false);
|
||||||
|
|
||||||
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
|
assertThat(Settings.System.getInt(mContext.getContentResolver(),
|
||||||
Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(NO_CONFIG);
|
Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -125,8 +119,8 @@ public class ForcePeakRefreshRatePreferenceControllerTest {
|
|||||||
public void onDeveloperOptionsDisabled_shouldDisablePreference() {
|
public void onDeveloperOptionsDisabled_shouldDisablePreference() {
|
||||||
mController.onDeveloperOptionsSwitchDisabled();
|
mController.onDeveloperOptionsSwitchDisabled();
|
||||||
|
|
||||||
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
|
assertThat(Settings.System.getInt(mContext.getContentResolver(),
|
||||||
Settings.System.MIN_REFRESH_RATE, -1f)).isEqualTo(NO_CONFIG);
|
Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(0);
|
||||||
assertThat(mPreference.isChecked()).isFalse();
|
assertThat(mPreference.isChecked()).isFalse();
|
||||||
assertThat(mPreference.isEnabled()).isFalse();
|
assertThat(mPreference.isEnabled()).isFalse();
|
||||||
}
|
}
|
||||||
|
@@ -16,15 +16,14 @@
|
|||||||
|
|
||||||
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 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;
|
||||||
|
|
||||||
@@ -70,23 +69,21 @@ public class PeakRefreshRatePreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setChecked_enableSmoothDisplay_setCurrentRefreshRate() {
|
public void setChecked_enableSmoothDisplay() {
|
||||||
mController.mPeakRefreshRate = 88f;
|
|
||||||
mController.setChecked(true);
|
mController.setChecked(true);
|
||||||
|
|
||||||
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
|
assertThat(Settings.System.getInt(mContext.getContentResolver(),
|
||||||
Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE))
|
Settings.System.SMOOTH_DISPLAY, -1))
|
||||||
.isEqualTo(88.0f);
|
.isEqualTo(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setChecked_disableSmoothDisplay_setDefaultRefreshRate() {
|
public void setChecked_disableSmoothDisplay() {
|
||||||
mController.mPeakRefreshRate = 88f;
|
|
||||||
mController.setChecked(false);
|
mController.setChecked(false);
|
||||||
|
|
||||||
assertThat(Settings.System.getFloat(mContext.getContentResolver(),
|
assertThat(Settings.System.getInt(mContext.getContentResolver(),
|
||||||
Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE))
|
Settings.System.SMOOTH_DISPLAY, -1))
|
||||||
.isEqualTo(DEFAULT_REFRESH_RATE);
|
.isEqualTo(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -103,36 +100,21 @@ public class PeakRefreshRatePreferenceControllerTest {
|
|||||||
assertThat(mController.isChecked()).isFalse();
|
assertThat(mController.isChecked()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@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);
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void enableSmoothDisplayPreference() {
|
private void enableSmoothDisplayPreference() {
|
||||||
mController.mPeakRefreshRate = 88f;
|
mController.mPeakRefreshRate = 88f;
|
||||||
|
|
||||||
Settings.System.putFloat(
|
Settings.System.putInt(
|
||||||
mContext.getContentResolver(),
|
mContext.getContentResolver(),
|
||||||
Settings.System.PEAK_REFRESH_RATE,
|
Settings.System.SMOOTH_DISPLAY,
|
||||||
mController.mPeakRefreshRate);
|
1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void disableSmoothDisplayPreference() {
|
private void disableSmoothDisplayPreference() {
|
||||||
mController.mPeakRefreshRate = 88f;
|
mController.mPeakRefreshRate = 88f;
|
||||||
|
|
||||||
Settings.System.putFloat(
|
Settings.System.putInt(
|
||||||
mContext.getContentResolver(),
|
mContext.getContentResolver(),
|
||||||
Settings.System.PEAK_REFRESH_RATE,
|
Settings.System.SMOOTH_DISPLAY,
|
||||||
DEFAULT_REFRESH_RATE);
|
0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user