Loading src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java +7 −29 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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); } Loading Loading @@ -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); } Loading @@ -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); } } src/com/android/settings/display/PeakRefreshRatePreferenceController.java +13 −26 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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"; Loading @@ -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 { Loading @@ -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 : " Loading Loading @@ -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( Loading @@ -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( Loading tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java +3 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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 Loading tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java +27 −16 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); } Loading @@ -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 Loading Loading @@ -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); 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); public void isChecked_default_returnTrue() { mController.mPeakRefreshRate = 88f; when(mDeviceConfigDisplaySettings.getDefaultPeakRefreshRate()) .thenReturn(mController.mPeakRefreshRate); 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() { Loading Loading
src/com/android/settings/development/ForcePeakRefreshRatePreferenceController.java +7 −29 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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); } Loading Loading @@ -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); } Loading @@ -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); } }
src/com/android/settings/display/PeakRefreshRatePreferenceController.java +13 −26 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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"; Loading @@ -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 { Loading @@ -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 : " Loading Loading @@ -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( Loading @@ -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( Loading
tests/robotests/src/com/android/settings/development/ForcePeakRefreshRatePreferenceControllerTest.java +3 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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 Loading
tests/robotests/src/com/android/settings/display/PeakRefreshRatePreferenceControllerTest.java +27 −16 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); } Loading @@ -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 Loading Loading @@ -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); 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); public void isChecked_default_returnTrue() { mController.mPeakRefreshRate = 88f; when(mDeviceConfigDisplaySettings.getDefaultPeakRefreshRate()) .thenReturn(mController.mPeakRefreshRate); 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() { Loading