From 139bc341f34358d3bd596d5e9d1dd595c223d2b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wilczy=C5=84ski?= Date: Tue, 25 Apr 2023 09:49:42 +0000 Subject: [PATCH] Revert "Back up the smooth display setting" Revert submission 22741921-cherrypick-bug-211737588-lp9s6r5vn3 Reason for revert: b/279215664 Reverted changes: /q/submissionid:22741921-cherrypick-bug-211737588-lp9s6r5vn3 Change-Id: I9b50aa0e2c5a7d328c4aa70b049c37c81e49e89b --- ...cePeakRefreshRatePreferenceController.java | 50 ++++++++++++---- .../PeakRefreshRatePreferenceController.java | 57 +++++++++++++++---- ...akRefreshRatePreferenceControllerTest.java | 22 ++++--- ...akRefreshRatePreferenceControllerTest.java | 48 +++++++++++----- 4 files changed, 133 insertions(+), 44 deletions(-) diff --git a/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java b/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java index 2e0a6b47c19..d5d40254fa8 100644 --- a/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java +++ b/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java @@ -16,18 +16,17 @@ package com.android.settings.development; -import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE; - 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; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; -import com.android.internal.display.RefreshRateSettingsUtils; import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.development.DeveloperOptionsPreferenceController; @@ -35,6 +34,12 @@ 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; + @VisibleForTesting float mPeakRefreshRate; @@ -43,8 +48,17 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr public ForcePeakRefreshRatePreferenceController(Context context) { super(context); - mPeakRefreshRate = - RefreshRateSettingsUtils.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 + " mPeakRefreshRate : " + mPeakRefreshRate); } @@ -85,20 +99,34 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr @Override protected void onDeveloperOptionsSwitchDisabled() { super.onDeveloperOptionsSwitchDisabled(); - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.FORCE_PEAK_REFRESH_RATE, 0); + Settings.System.putFloat(mContext.getContentResolver(), + Settings.System.MIN_REFRESH_RATE, NO_CONFIG); ((SwitchPreference) mPreference).setChecked(false); } @VisibleForTesting void forcePeakRefreshRate(boolean enable) { - Settings.System.putInt(mContext.getContentResolver(), - Settings.System.FORCE_PEAK_REFRESH_RATE, enable ? 1 : 0); + final float peakRefreshRate = enable ? mPeakRefreshRate : NO_CONFIG; + Settings.System.putFloat(mContext.getContentResolver(), + Settings.System.MIN_REFRESH_RATE, peakRefreshRate); } boolean isForcePeakRefreshRateEnabled() { - return Settings.System.getInt(mContext.getContentResolver(), - Settings.System.FORCE_PEAK_REFRESH_RATE, 0) == 1; + 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; } } diff --git a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java index f0885ea4f15..31004d4bbb0 100644 --- a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java +++ b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java @@ -16,20 +16,18 @@ package com.android.settings.display; -import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE; - 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; import androidx.preference.PreferenceScreen; -import com.android.internal.display.RefreshRateSettingsUtils; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; @@ -41,6 +39,8 @@ 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"; @@ -65,8 +65,17 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl updateState(mPreference); } }; - mPeakRefreshRate = - RefreshRateSettingsUtils.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( TAG, "DEFAULT_REFRESH_RATE : " @@ -98,15 +107,21 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl @Override public boolean isChecked() { - return Settings.System.getInt(mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY, - 0) == 1; + final float peakRefreshRate = + Settings.System.getFloat( + mContext.getContentResolver(), + Settings.System.PEAK_REFRESH_RATE, + getDefaultPeakRefreshRate()); + return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate); } @Override public boolean setChecked(boolean isChecked) { - Log.d(TAG, "setChecked to : " + isChecked); - return Settings.System.putInt( - mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY, isChecked ? 1 : 0); + final float peakRefreshRate = isChecked ? mPeakRefreshRate : DEFAULT_REFRESH_RATE; + Log.d(TAG, "setChecked to : " + peakRefreshRate); + + return Settings.System.putFloat( + mContext.getContentResolver(), Settings.System.PEAK_REFRESH_RATE, peakRefreshRate); } @Override @@ -124,6 +139,17 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl 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 implements DeviceConfig.OnPropertiesChangedListener, Executor { public void startListening() { @@ -166,4 +192,15 @@ 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; + } } diff --git a/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java index 7dfde3814a0..2e93d5ef9ca 100644 --- a/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java @@ -16,8 +16,8 @@ package com.android.settings.development; -import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE; - +import static com.android.settings.development.ForcePeakRefreshRatePreferenceController.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,6 +38,8 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import android.util.Log; + @RunWith(RobolectricTestRunner.class) public class ForcePeakRefreshRatePreferenceControllerTest { @@ -61,18 +63,22 @@ public class ForcePeakRefreshRatePreferenceControllerTest { @Test public void onPreferenceChange_preferenceChecked_shouldEnableForcePeak() { + mController.mPeakRefreshRate = 88f; + mController.onPreferenceChange(mPreference, true); - assertThat(Settings.System.getInt(mContext.getContentResolver(), - Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(1); + assertThat(Settings.System.getFloat(mContext.getContentResolver(), + Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(88f); } @Test public void onPreferenceChange_preferenceUnchecked_shouldDisableForcePeak() { + mController.mPeakRefreshRate = 88f; + mController.onPreferenceChange(mPreference, false); - assertThat(Settings.System.getInt(mContext.getContentResolver(), - Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(0); + assertThat(Settings.System.getFloat(mContext.getContentResolver(), + Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(NO_CONFIG); } @Test @@ -119,8 +125,8 @@ public class ForcePeakRefreshRatePreferenceControllerTest { public void onDeveloperOptionsDisabled_shouldDisablePreference() { mController.onDeveloperOptionsSwitchDisabled(); - assertThat(Settings.System.getInt(mContext.getContentResolver(), - Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(0); + assertThat(Settings.System.getFloat(mContext.getContentResolver(), + Settings.System.MIN_REFRESH_RATE, -1f)).isEqualTo(NO_CONFIG); assertThat(mPreference.isChecked()).isFalse(); assertThat(mPreference.isEnabled()).isFalse(); } diff --git a/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java index 9c3644e2536..aaeeea4f368 100644 --- a/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java @@ -16,14 +16,15 @@ 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 android.content.Context; import android.provider.Settings; +import android.view.Display; import androidx.preference.SwitchPreference; @@ -69,21 +70,23 @@ public class PeakRefreshRatePreferenceControllerTest { } @Test - public void setChecked_enableSmoothDisplay() { + public void setChecked_enableSmoothDisplay_setCurrentRefreshRate() { + mController.mPeakRefreshRate = 88f; mController.setChecked(true); - assertThat(Settings.System.getInt(mContext.getContentResolver(), - Settings.System.SMOOTH_DISPLAY, -1)) - .isEqualTo(1); + assertThat(Settings.System.getFloat(mContext.getContentResolver(), + Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE)) + .isEqualTo(88.0f); } @Test - public void setChecked_disableSmoothDisplay() { + public void setChecked_disableSmoothDisplay_setDefaultRefreshRate() { + mController.mPeakRefreshRate = 88f; mController.setChecked(false); - assertThat(Settings.System.getInt(mContext.getContentResolver(), - Settings.System.SMOOTH_DISPLAY, -1)) - .isEqualTo(0); + assertThat(Settings.System.getFloat(mContext.getContentResolver(), + Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE)) + .isEqualTo(DEFAULT_REFRESH_RATE); } @Test @@ -100,21 +103,36 @@ public class PeakRefreshRatePreferenceControllerTest { 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() { mController.mPeakRefreshRate = 88f; - Settings.System.putInt( + Settings.System.putFloat( mContext.getContentResolver(), - Settings.System.SMOOTH_DISPLAY, - 1); + Settings.System.PEAK_REFRESH_RATE, + mController.mPeakRefreshRate); } private void disableSmoothDisplayPreference() { mController.mPeakRefreshRate = 88f; - Settings.System.putInt( + Settings.System.putFloat( mContext.getContentResolver(), - Settings.System.SMOOTH_DISPLAY, - 0); + Settings.System.PEAK_REFRESH_RATE, + DEFAULT_REFRESH_RATE); } }