From e0f55b467fd1addd621d141b4606f387913eafdc Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Sun, 22 Nov 2020 03:15:07 +0100 Subject: [PATCH] Settings: Add min refresh rate list preference Change-Id: Iac1f65ab09717ea55a5b471e094385c77ba894ee --- res/values/cm_strings.xml | 3 + res/values/lineage_config.xml | 3 + res/xml/display_settings.xml | 6 + .../MinRefreshRatePreferenceController.java | 104 ++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 src/com/android/settings/display/MinRefreshRatePreferenceController.java diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml index 3c388770331..20774f1ae18 100644 --- a/res/values/cm_strings.xml +++ b/res/values/cm_strings.xml @@ -67,6 +67,9 @@ Peak refresh rate + + Minimum refresh rate + Locate the fingerprint sensor on the front of your tablet. Locate the fingerprint sensor on the front of your device. diff --git a/res/values/lineage_config.xml b/res/values/lineage_config.xml index ec0d46865ae..7c3121ba69c 100644 --- a/res/values/lineage_config.xml +++ b/res/values/lineage_config.xml @@ -28,4 +28,7 @@ false + + + false diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml index 60665309a9a..ae225252a25 100644 --- a/res/xml/display_settings.xml +++ b/res/xml/display_settings.xml @@ -177,6 +177,12 @@ android:summary="@string/summary_placeholder" settings:controller="com.android.settings.display.PeakRefreshRateListPreferenceController" /> + + mEntries = new ArrayList<>(); + private List mValues = new ArrayList<>(); + + public MinRefreshRatePreferenceController(Context context) { + super(context, KEY_MIN_REFRESH_RATE); + + if (mContext.getResources().getBoolean(R.bool.config_show_min_refresh_rate_switch)) { + Display.Mode mode = mContext.getDisplay().getMode(); + Display.Mode[] modes = mContext.getDisplay().getSupportedModes(); + Arrays.sort(modes, (mode1, mode2) -> + Float.compare(mode2.getRefreshRate(), mode1.getRefreshRate())); + for (Display.Mode m : modes) { + if (m.getPhysicalWidth() == mode.getPhysicalWidth() && + m.getPhysicalHeight() == mode.getPhysicalHeight()) { + mEntries.add(String.format("%.02fHz", m.getRefreshRate()) + .replaceAll("[\\.,]00", "")); + mValues.add(String.format(Locale.US, "%.02f", m.getRefreshRate())); + } + } + } + } + + @Override + public int getAvailabilityStatus() { + return mEntries.size() > 1 ? AVAILABLE : UNSUPPORTED_ON_DEVICE; + } + + @Override + public String getPreferenceKey() { + return KEY_MIN_REFRESH_RATE; + } + + @Override + public void displayPreference(PreferenceScreen screen) { + mListPreference = screen.findPreference(getPreferenceKey()); + mListPreference.setEntries(mEntries.toArray(new String[mEntries.size()])); + mListPreference.setEntryValues(mValues.toArray(new String[mValues.size()])); + + super.displayPreference(screen); + } + + @Override + public void updateState(Preference preference) { + final float currentValue = Settings.System.getFloat(mContext.getContentResolver(), + MIN_REFRESH_RATE, 60.00f); + int index = mListPreference.findIndexOfValue( + String.format(Locale.US, "%.02f", currentValue)); + if (index < 0) index = 0; + mListPreference.setValueIndex(index); + mListPreference.setSummary(mListPreference.getEntries()[index]); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + Settings.System.putFloat(mContext.getContentResolver(), MIN_REFRESH_RATE, + Float.valueOf((String) newValue)); + updateState(preference); + return true; + } + +}