diff --git a/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java b/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java index d5d40254fa8..2e0a6b47c19 100644 --- a/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java +++ b/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java @@ -16,17 +16,18 @@ 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; @@ -34,12 +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; - @VisibleForTesting float mPeakRefreshRate; @@ -48,17 +43,8 @@ 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 = + RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(context); Log.d(TAG, "DEFAULT_REFRESH_RATE : " + DEFAULT_REFRESH_RATE + " mPeakRefreshRate : " + mPeakRefreshRate); } @@ -99,34 +85,20 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr @Override protected void onDeveloperOptionsSwitchDisabled() { super.onDeveloperOptionsSwitchDisabled(); - Settings.System.putFloat(mContext.getContentResolver(), - Settings.System.MIN_REFRESH_RATE, NO_CONFIG); + Settings.System.putInt(mContext.getContentResolver(), + Settings.System.FORCE_PEAK_REFRESH_RATE, 0); ((SwitchPreference) mPreference).setChecked(false); } @VisibleForTesting void forcePeakRefreshRate(boolean enable) { - final float peakRefreshRate = enable ? mPeakRefreshRate : NO_CONFIG; - Settings.System.putFloat(mContext.getContentResolver(), - Settings.System.MIN_REFRESH_RATE, peakRefreshRate); + Settings.System.putInt(mContext.getContentResolver(), + Settings.System.FORCE_PEAK_REFRESH_RATE, enable ? 1 : 0); } boolean isForcePeakRefreshRateEnabled() { - 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 Settings.System.getInt(mContext.getContentResolver(), + Settings.System.FORCE_PEAK_REFRESH_RATE, 0) == 1; } } diff --git a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java index 31004d4bbb0..f0885ea4f15 100644 --- a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java +++ b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java @@ -16,18 +16,20 @@ 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; @@ -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"; @@ -65,17 +65,8 @@ 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 = + RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(context); Log.d( TAG, "DEFAULT_REFRESH_RATE : " @@ -107,21 +98,15 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl @Override public boolean isChecked() { - final float peakRefreshRate = - Settings.System.getFloat( - mContext.getContentResolver(), - Settings.System.PEAK_REFRESH_RATE, - getDefaultPeakRefreshRate()); - return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate); + return Settings.System.getInt(mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY, + 0) == 1; } @Override public boolean setChecked(boolean isChecked) { - 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); + Log.d(TAG, "setChecked to : " + isChecked); + return Settings.System.putInt( + mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY, isChecked ? 1 : 0); } @Override @@ -139,17 +124,6 @@ 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() { @@ -192,15 +166,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; - } } diff --git a/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java index 2e93d5ef9ca..7dfde3814a0 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.settings.development.ForcePeakRefreshRatePreferenceController.DEFAULT_REFRESH_RATE; -import static com.android.settings.development.ForcePeakRefreshRatePreferenceController.NO_CONFIG; +import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.verify; @@ -38,8 +38,6 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import android.util.Log; - @RunWith(RobolectricTestRunner.class) public class ForcePeakRefreshRatePreferenceControllerTest { @@ -63,22 +61,18 @@ public class ForcePeakRefreshRatePreferenceControllerTest { @Test public void onPreferenceChange_preferenceChecked_shouldEnableForcePeak() { - mController.mPeakRefreshRate = 88f; - mController.onPreferenceChange(mPreference, true); - assertThat(Settings.System.getFloat(mContext.getContentResolver(), - Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(88f); + assertThat(Settings.System.getInt(mContext.getContentResolver(), + Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(1); } @Test public void onPreferenceChange_preferenceUnchecked_shouldDisableForcePeak() { - mController.mPeakRefreshRate = 88f; - mController.onPreferenceChange(mPreference, false); - assertThat(Settings.System.getFloat(mContext.getContentResolver(), - Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(NO_CONFIG); + assertThat(Settings.System.getInt(mContext.getContentResolver(), + Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(0); } @Test @@ -125,8 +119,8 @@ public class ForcePeakRefreshRatePreferenceControllerTest { public void onDeveloperOptionsDisabled_shouldDisablePreference() { mController.onDeveloperOptionsSwitchDisabled(); - assertThat(Settings.System.getFloat(mContext.getContentResolver(), - Settings.System.MIN_REFRESH_RATE, -1f)).isEqualTo(NO_CONFIG); + assertThat(Settings.System.getInt(mContext.getContentResolver(), + Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(0); 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 aaeeea4f368..9c3644e2536 100644 --- a/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java @@ -16,15 +16,14 @@ 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; @@ -70,23 +69,21 @@ public class PeakRefreshRatePreferenceControllerTest { } @Test - public void setChecked_enableSmoothDisplay_setCurrentRefreshRate() { - mController.mPeakRefreshRate = 88f; + public void setChecked_enableSmoothDisplay() { mController.setChecked(true); - assertThat(Settings.System.getFloat(mContext.getContentResolver(), - Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE)) - .isEqualTo(88.0f); + assertThat(Settings.System.getInt(mContext.getContentResolver(), + Settings.System.SMOOTH_DISPLAY, -1)) + .isEqualTo(1); } @Test - public void setChecked_disableSmoothDisplay_setDefaultRefreshRate() { - mController.mPeakRefreshRate = 88f; + public void setChecked_disableSmoothDisplay() { mController.setChecked(false); - assertThat(Settings.System.getFloat(mContext.getContentResolver(), - Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE)) - .isEqualTo(DEFAULT_REFRESH_RATE); + assertThat(Settings.System.getInt(mContext.getContentResolver(), + Settings.System.SMOOTH_DISPLAY, -1)) + .isEqualTo(0); } @Test @@ -103,36 +100,21 @@ 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.putFloat( + Settings.System.putInt( mContext.getContentResolver(), - Settings.System.PEAK_REFRESH_RATE, - mController.mPeakRefreshRate); + Settings.System.SMOOTH_DISPLAY, + 1); } private void disableSmoothDisplayPreference() { mController.mPeakRefreshRate = 88f; - Settings.System.putFloat( + Settings.System.putInt( mContext.getContentResolver(), - Settings.System.PEAK_REFRESH_RATE, - DEFAULT_REFRESH_RATE); + Settings.System.SMOOTH_DISPLAY, + 0); } }