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 <joe@frap129.org> [jaysonedson: Fix fc when not using English and preference] Signed-off-by: Jason Edson <jaysonedson@gmail.com> Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
This commit is contained in:
103
src/com/android/settings/IntervalSeekBar.java
Normal file
103
src/com/android/settings/IntervalSeekBar.java
Normal file
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Pure Nexus Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.widget.SeekBar;
|
||||
|
||||
/**
|
||||
* Custom SeekBar that allows setting both a minimum and maximum value.
|
||||
* This also handles floating point values (to 2 decimal places) through
|
||||
* integer conversions.
|
||||
*/
|
||||
public class IntervalSeekBar extends SeekBar {
|
||||
private float mMin;
|
||||
private float mMax;
|
||||
private float mDefault;
|
||||
private float mMultiplier;
|
||||
|
||||
public IntervalSeekBar(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
TypedArray seekBarType = context.obtainStyledAttributes(attrs,
|
||||
R.styleable.IntervalSeekBar, 0, 0);
|
||||
|
||||
mMax = seekBarType.getFloat(R.styleable.IntervalSeekBar_maxI, 1.5f);
|
||||
mMin = seekBarType.getFloat(R.styleable.IntervalSeekBar_minI, 0.0f);
|
||||
mDefault = seekBarType.getFloat(R.styleable.IntervalSeekBar_defaultValuePure, 1.0f);
|
||||
|
||||
int digits = seekBarType.getInt(R.styleable.IntervalSeekBar_digits, 0);
|
||||
mMultiplier = (float) Math.pow(10, digits);
|
||||
|
||||
if (mMin > 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user