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;
+ }
}