diff --git a/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java b/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java index d5d40254fa8..a967888b0f6 100644 --- a/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java +++ b/src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java @@ -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); } } diff --git a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java index dfcc601fff3..c24ad22e363 100644 --- a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java +++ b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java @@ -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( diff --git a/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java index 2e93d5ef9ca..c5cc8564cd7 100644 --- a/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java @@ -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 diff --git a/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java index aaeeea4f368..8b2c4454a18 100644 --- a/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java @@ -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() {