From 2c23d3060ec4ed878962cbc3d765886580360e22 Mon Sep 17 00:00:00 2001 From: Steve Kondik Date: Thu, 1 May 2014 22:43:12 -0700 Subject: [PATCH] Settings: Use seekbar to allow setting arbitrary animation values frap129: Reworked for Pie, set default scale to 0.5f, and improved the preference summaries so they match AOSP while keeping translations. Change-Id: I29d89e532d07a325f6e568b21e4da4ce7e5761ac Signed-off-by: Joe Maples [jaysonedson: Fix fc when not using English and preference] Signed-off-by: Jason Edson Signed-off-by: Pranav Vashi --- .../preference_dialog_animation_scale.xml | 48 ++++++++ res/values/attrs.xml | 8 ++ res/xml/development_settings.xml | 6 +- .../settings/AnimationScalePreference.java | 90 +++++++++++++++ src/com/android/settings/IntervalSeekBar.java | 103 ++++++++++++++++++ ...atorDurationScalePreferenceController.java | 27 +++-- ...ionAnimationScalePreferenceController.java | 26 ++--- ...dowAnimationScalePreferenceController.java | 27 +++-- 8 files changed, 290 insertions(+), 45 deletions(-) create mode 100644 res/layout/preference_dialog_animation_scale.xml create mode 100644 src/com/android/settings/AnimationScalePreference.java create mode 100644 src/com/android/settings/IntervalSeekBar.java diff --git a/res/layout/preference_dialog_animation_scale.xml b/res/layout/preference_dialog_animation_scale.xml new file mode 100644 index 00000000000..5723ad00854 --- /dev/null +++ b/res/layout/preference_dialog_animation_scale.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + diff --git a/res/values/attrs.xml b/res/values/attrs.xml index 87c3ce93eea..e0c3252f954 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -201,4 +201,12 @@ + + + + + + + + diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml index 00902004c60..3a8c7213c47 100644 --- a/res/xml/development_settings.xml +++ b/res/xml/development_settings.xml @@ -546,19 +546,19 @@ android:title="@string/force_rtl_layout_all_locales" android:summary="@string/force_rtl_layout_all_locales_summary" /> - - - mMax) { + float temp = mMax; + mMax = mMin; + mMin = temp; + } + + setMax(convertFloatToProgress(mMax)); + setProgressFloat(mDefault); + + seekBarType.recycle(); + } + + /* + * Converts from SeekBar units (which the SeekBar uses), to scale units + * (which are saved). + * This operation is the inverse of setFontScaling. + */ + public float getProgressFloat() { + return (getProgress() / mMultiplier) + mMin; + } + + /* + * Converts from scale units (which are saved), to SeekBar units + * (which the SeekBar uses). This also sets the SeekBar progress. + * This operation is the inverse of getProgressFloat. + */ + public void setProgressFloat(float progress) { + setProgress(convertFloatToProgress(progress)); + } + + private int convertFloatToProgress(float value) { + return Math.round((value - mMin) * mMultiplier); + } + + public float getMinimum() { + return mMin; + } + + public float getMaximum() { + return mMax; + } + + public float getDefault() { + return mDefault; + } + + public void setMaximum(float max) { + mMax = max; + setMax(convertFloatToProgress(mMax)); + } + + public void setMinimum(float min) { + mMin = min; + } +} diff --git a/src/com/android/settings/development/AnimatorDurationScalePreferenceController.java b/src/com/android/settings/development/AnimatorDurationScalePreferenceController.java index 114b121be22..3fbabf4b2b3 100644 --- a/src/com/android/settings/development/AnimatorDurationScalePreferenceController.java +++ b/src/com/android/settings/development/AnimatorDurationScalePreferenceController.java @@ -22,21 +22,22 @@ import android.os.ServiceManager; import android.view.IWindowManager; import androidx.annotation.VisibleForTesting; -import androidx.preference.ListPreference; import androidx.preference.Preference; +import com.android.settings.AnimationScalePreference; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.development.DeveloperOptionsPreferenceController; public class AnimatorDurationScalePreferenceController extends DeveloperOptionsPreferenceController - implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin { + implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener, + PreferenceControllerMixin { private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale"; @VisibleForTesting static final int ANIMATOR_DURATION_SCALE_SELECTOR = 2; @VisibleForTesting - static final float DEFAULT_VALUE = 1; + static final float DEFAULT_VALUE = 1.0f; private final IWindowManager mWindowManager; private final String[] mListValues; @@ -88,19 +89,17 @@ public class AnimatorDurationScalePreferenceController extends DeveloperOptionsP private void updateAnimationScaleValue() { try { final float scale = mWindowManager.getAnimationScale(ANIMATOR_DURATION_SCALE_SELECTOR); - int index = 0; // default - for (int i = 0; i < mListValues.length; i++) { - float val = Float.parseFloat(mListValues[i]); - if (scale <= val) { - index = i; - break; - } - } - final ListPreference listPreference = (ListPreference) mPreference; - listPreference.setValue(mListValues[index]); - listPreference.setSummary(mListSummaries[index]); + final AnimationScalePreference durationPreference = (AnimationScalePreference) mPreference; + durationPreference.setOnPreferenceClickListener(this); + durationPreference.setScale(scale); } catch (RemoteException e) { // intentional no-op } } + + @Override + public boolean onPreferenceClick(Preference preference) { + ((AnimationScalePreference) preference).click(); + return false; + } } diff --git a/src/com/android/settings/development/TransitionAnimationScalePreferenceController.java b/src/com/android/settings/development/TransitionAnimationScalePreferenceController.java index ac683641fea..56d57ef1e77 100644 --- a/src/com/android/settings/development/TransitionAnimationScalePreferenceController.java +++ b/src/com/android/settings/development/TransitionAnimationScalePreferenceController.java @@ -22,22 +22,22 @@ import android.os.ServiceManager; import android.view.IWindowManager; import androidx.annotation.VisibleForTesting; -import androidx.preference.ListPreference; import androidx.preference.Preference; +import com.android.settings.AnimationScalePreference; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.development.DeveloperOptionsPreferenceController; public class TransitionAnimationScalePreferenceController extends DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener, - PreferenceControllerMixin { + Preference.OnPreferenceClickListener, PreferenceControllerMixin { private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale"; @VisibleForTesting static final int TRANSITION_ANIMATION_SCALE_SELECTOR = 1; @VisibleForTesting - static final float DEFAULT_VALUE = 1; + static final float DEFAULT_VALUE = 1.0f; private final IWindowManager mWindowManager; private final String[] mListValues; @@ -90,19 +90,17 @@ public class TransitionAnimationScalePreferenceController extends try { final float scale = mWindowManager.getAnimationScale( TRANSITION_ANIMATION_SCALE_SELECTOR); - int index = 0; // default - for (int i = 0; i < mListValues.length; i++) { - float val = Float.parseFloat(mListValues[i]); - if (scale <= val) { - index = i; - break; - } - } - final ListPreference listPreference = (ListPreference) mPreference; - listPreference.setValue(mListValues[index]); - listPreference.setSummary(mListSummaries[index]); + final AnimationScalePreference transitionPreference = (AnimationScalePreference) mPreference; + transitionPreference.setOnPreferenceClickListener(this); + transitionPreference.setScale(scale); } catch (RemoteException e) { // intentional no-op } } + + @Override + public boolean onPreferenceClick(Preference preference) { + ((AnimationScalePreference) preference).click(); + return false; + } } diff --git a/src/com/android/settings/development/WindowAnimationScalePreferenceController.java b/src/com/android/settings/development/WindowAnimationScalePreferenceController.java index d8575a0ddfd..207c5cf7f69 100644 --- a/src/com/android/settings/development/WindowAnimationScalePreferenceController.java +++ b/src/com/android/settings/development/WindowAnimationScalePreferenceController.java @@ -22,22 +22,22 @@ import android.os.ServiceManager; import android.view.IWindowManager; import androidx.annotation.VisibleForTesting; -import androidx.preference.ListPreference; import androidx.preference.Preference; +import com.android.settings.AnimationScalePreference; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.development.DeveloperOptionsPreferenceController; public class WindowAnimationScalePreferenceController extends DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener, - PreferenceControllerMixin { + Preference.OnPreferenceClickListener, PreferenceControllerMixin { private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale"; @VisibleForTesting static final int WINDOW_ANIMATION_SCALE_SELECTOR = 0; @VisibleForTesting - static final float DEFAULT_VALUE = 1; + static final float DEFAULT_VALUE = 1.0f; private final IWindowManager mWindowManager; private final String[] mListValues; @@ -89,19 +89,18 @@ public class WindowAnimationScalePreferenceController extends private void updateAnimationScaleValue() { try { final float scale = mWindowManager.getAnimationScale(WINDOW_ANIMATION_SCALE_SELECTOR); - int index = 0; // default - for (int i = 0; i < mListValues.length; i++) { - float val = Float.parseFloat(mListValues[i]); - if (scale <= val) { - index = i; - break; - } - } - final ListPreference listPreference = (ListPreference) mPreference; - listPreference.setValue(mListValues[index]); - listPreference.setSummary(mListSummaries[index]); + final AnimationScalePreference windowPreference = (AnimationScalePreference) mPreference; + windowPreference.setOnPreferenceClickListener(this); + windowPreference.setScale(scale); + } catch (RemoteException e) { // intentional no-op } } + + @Override + public boolean onPreferenceClick(Preference preference) { + ((AnimationScalePreference) preference).click(); + return false; + } }