diff options
Diffstat (limited to 'src/com/android/settings/hardware/VibratorIntensity.java')
-rw-r--r-- | src/com/android/settings/hardware/VibratorIntensity.java | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/src/com/android/settings/hardware/VibratorIntensity.java b/src/com/android/settings/hardware/VibratorIntensity.java index e847933..a778f36 100644 --- a/src/com/android/settings/hardware/VibratorIntensity.java +++ b/src/com/android/settings/hardware/VibratorIntensity.java @@ -42,7 +42,7 @@ import cyanogenmod.providers.CMSettings; import com.android.settings.R; public class VibratorIntensity extends DialogPreference implements - SeekBar.OnSeekBarChangeListener { + SeekBar.OnSeekBarChangeListener, PreferenceManager.OnActivityStopListener { private static final String PREF_NAME = "vibrator_intensity"; private SeekBar mSeekBar; private TextView mValue; @@ -120,7 +120,10 @@ public class VibratorIntensity extends DialogPreference implements getContext().getResources().getColor(android.R.color.holo_red_light)); mSeekBar.setOnSeekBarChangeListener(this); - mSeekBar.setProgress(intensityToPercent(mMinValue, mMaxValue, mOriginalValue)); + mSeekBar.setMax(mMaxValue - mMinValue); + mSeekBar.setProgress(mOriginalValue - mMinValue); + + getPreferenceManager().registerOnActivityStopListener(this); } @Override @@ -134,7 +137,7 @@ public class VibratorIntensity extends DialogPreference implements defaultsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - mSeekBar.setProgress(intensityToPercent(mMinValue, mMaxValue, mDefaultValue)); + mSeekBar.setProgress(mDefaultValue - mMinValue); } }); } @@ -146,11 +149,22 @@ public class VibratorIntensity extends DialogPreference implements if (positiveResult) { // Store percent value in SharedPreferences object SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - prefs.edit().putInt(PREF_NAME, mSeekBar.getProgress()).commit(); + int intensity = mSeekBar.getProgress() + mMinValue; + int percent = intensityToPercent(mMinValue, mMaxValue, intensity); + prefs.edit().putInt(PREF_NAME, percent).commit(); + CMSettings.Secure.putInt(getContext().getContentResolver(), + CMSettings.Secure.VIBRATOR_INTENSITY, intensity); } else { CMSettings.Secure.putInt(getContext().getContentResolver(), CMSettings.Secure.VIBRATOR_INTENSITY, mOriginalValue); } + + getPreferenceManager().unregisterOnActivityStopListener(this); + } + + @Override + public void onActivityStop() { + mHardware.setVibratorIntensity(mOriginalValue); } public static void restore(Context context) { @@ -161,20 +175,17 @@ public class VibratorIntensity extends DialogPreference implements SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); int min = hardware.getVibratorMinIntensity(); int max = hardware.getVibratorMaxIntensity(); - int defaultValue = intensityToPercent(min, max, - hardware.getVibratorDefaultIntensity()); - int percent = prefs.getInt(PREF_NAME, defaultValue); + int defaultIntensity = hardware.getVibratorDefaultIntensity(); + int percent = prefs.getInt(PREF_NAME, intensityToPercent(min, max, defaultIntensity)); CMSettings.Secure.putInt(context.getContentResolver(), - CMSettings.Secure.VIBRATOR_INTENSITY, percentToIntensity(min, max, - percentToIntensity(min, max, percent))); + CMSettings.Secure.VIBRATOR_INTENSITY, percentToIntensity(min, max, percent)); } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - boolean shouldWarn = - mWarningValue > 0 && progress >= intensityToPercent(mMinValue, mMaxValue, - mWarningValue); + int intensity = progress + mMinValue; + boolean shouldWarn = mWarningValue > 0 && intensity >= mWarningValue; if (mProgressDrawable != null) { mProgressDrawable.setColorFilter(shouldWarn ? mRedFilter : null); @@ -183,10 +194,7 @@ public class VibratorIntensity extends DialogPreference implements mProgressThumb.setColorFilter(shouldWarn ? mRedFilter : null); } - CMSettings.Secure.putInt(getContext().getContentResolver(), - CMSettings.Secure.VIBRATOR_INTENSITY, percentToIntensity(mMinValue, mMaxValue, - progress)); - mValue.setText(String.format("%d%%", progress)); + mValue.setText(String.format("%d%%", intensityToPercent(mMinValue, mMaxValue, intensity))); } @Override @@ -196,12 +204,13 @@ public class VibratorIntensity extends DialogPreference implements @Override public void onStopTrackingTouch(SeekBar seekBar) { + mHardware.setVibratorIntensity(seekBar.getProgress() + mMinValue); Vibrator vib = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE); vib.vibrate(200); } - private static int intensityToPercent(double minValue, double maxValue, int value) { - double percent = (value - minValue) * (100 / (maxValue - minValue)); + private static int intensityToPercent(int minValue, int maxValue, int value) { + int percent = Math.round((value - minValue) * (100.f / (maxValue - minValue))); if (percent > 100) { percent = 100; @@ -209,11 +218,11 @@ public class VibratorIntensity extends DialogPreference implements percent = 0; } - return (int) percent; + return percent; } private static int percentToIntensity(int minValue, int maxValue, int percent) { - int value = Math.round((((maxValue - minValue) * percent) / 100) + minValue); + int value = Math.round((((maxValue - minValue) * percent) / 100.f) + minValue); if (value > maxValue) { value = maxValue; |