From 5fc6c41e5893c9ba25ca5a1d711dc4a416d64e8e Mon Sep 17 00:00:00 2001 From: jt1134 Date: Thu, 4 Oct 2012 19:47:05 -0500 Subject: AriesParts: add vibration intensity settings Change-Id: Iff35d34073b4b9c0f6989ff298c91cbf3cf7711e --- .../res/layout/preference_dialog_vibration.xml | 36 ++++++ AriesParts/res/values/strings.xml | 5 + AriesParts/res/xml/main.xml | 9 ++ .../settings/device/DeviceSettings.java | 5 + .../com/cyanogenmod/settings/device/Startup.java | 1 + .../settings/device/VibrationPreference.java | 137 +++++++++++++++++++++ 6 files changed, 193 insertions(+) create mode 100644 AriesParts/res/layout/preference_dialog_vibration.xml create mode 100644 AriesParts/src/com/cyanogenmod/settings/device/VibrationPreference.java (limited to 'AriesParts') diff --git a/AriesParts/res/layout/preference_dialog_vibration.xml b/AriesParts/res/layout/preference_dialog_vibration.xml new file mode 100644 index 0000000..9e11233 --- /dev/null +++ b/AriesParts/res/layout/preference_dialog_vibration.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + diff --git a/AriesParts/res/values/strings.xml b/AriesParts/res/values/strings.xml index ef450f3..20be50d 100644 --- a/AriesParts/res/values/strings.xml +++ b/AriesParts/res/values/strings.xml @@ -50,6 +50,11 @@ Desk dock audio enabled Desk dock audio disabled + Vibration + Vibration + Control vibration intensity + Vibration intesity + Warning diff --git a/AriesParts/res/xml/main.xml b/AriesParts/res/xml/main.xml index d50ed50..9062424 100644 --- a/AriesParts/res/xml/main.xml +++ b/AriesParts/res/xml/main.xml @@ -90,4 +90,13 @@ android:persistent="true" /> + + + + + diff --git a/AriesParts/src/com/cyanogenmod/settings/device/DeviceSettings.java b/AriesParts/src/com/cyanogenmod/settings/device/DeviceSettings.java index fff147a..ab87d54 100644 --- a/AriesParts/src/com/cyanogenmod/settings/device/DeviceSettings.java +++ b/AriesParts/src/com/cyanogenmod/settings/device/DeviceSettings.java @@ -27,6 +27,7 @@ public class DeviceSettings extends PreferenceActivity { public static final String KEY_CARDOCK_AUDIO = "cardock_audio"; public static final String KEY_DESKDOCK_AUDIO = "deskdock_audio"; public static final String KEY_DOCK_AUDIO_CATEGORY = "category_dock_audio"; + public static final String KEY_VIBRATION = "vibration"; private ColorTuningPreference mColorTuning; private ListPreference mMdnie; @@ -38,6 +39,7 @@ public class DeviceSettings extends PreferenceActivity { private VolumeBoostPreference mVolumeBoost; private CheckBoxPreference mCarDockAudio; private CheckBoxPreference mDeskDockAudio; + private VibrationPreference mVibration; private BroadcastReceiver mHeadsetReceiver = new BroadcastReceiver() { @@ -93,6 +95,9 @@ public class DeviceSettings extends PreferenceActivity { getPreferenceScreen().removePreference(category); } + mVibration = (VibrationPreference) findPreference(KEY_VIBRATION); + mVibration.setEnabled(VibrationPreference.isSupported()); + mTvOut = new TvOut(); mTvOutEnable = (CheckBoxPreference) findPreference(KEY_TVOUT_ENABLE); mTvOutSystem = (ListPreference) findPreference(KEY_TVOUT_SYSTEM); diff --git a/AriesParts/src/com/cyanogenmod/settings/device/Startup.java b/AriesParts/src/com/cyanogenmod/settings/device/Startup.java index 924a95d..d7c843c 100644 --- a/AriesParts/src/com/cyanogenmod/settings/device/Startup.java +++ b/AriesParts/src/com/cyanogenmod/settings/device/Startup.java @@ -15,6 +15,7 @@ public class Startup extends BroadcastReceiver { VolumeBoostPreference.restore(context); DockAudio.restore(context); Sanity.check(context); + VibrationPreference.restore(context); } } diff --git a/AriesParts/src/com/cyanogenmod/settings/device/VibrationPreference.java b/AriesParts/src/com/cyanogenmod/settings/device/VibrationPreference.java new file mode 100644 index 0000000..9bf6726 --- /dev/null +++ b/AriesParts/src/com/cyanogenmod/settings/device/VibrationPreference.java @@ -0,0 +1,137 @@ +package com.cyanogenmod.settings.device; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.preference.DialogPreference; +import android.preference.PreferenceManager; +import android.util.AttributeSet; +import android.view.View; +import android.widget.SeekBar; +import android.widget.TextView; + +public class VibrationPreference extends DialogPreference { + + private static final int SEEKBAR_ID = R.id.vibration_seekbar; + + private static final int VALUE_DISPLAY_ID = R.id.vibration_value; + + private static final String FILE_PATH = "/sys/class/misc/pwm_duty/pwm_duty"; + + private VibrationSeekBar mSeekBar = new VibrationSeekBar(); + + private static final int MAX_VALUE = 100; + + // Track instances to know when to restore original value + // (when the orientation changes, a new dialog is created before the old one is destroyed) + private static int sInstances = 0; + + public VibrationPreference(Context context, AttributeSet attrs) { + super(context, attrs); + + setDialogLayoutResource(R.layout.preference_dialog_vibration); + } + + @Override + protected void onBindDialogView(View view) { + super.onBindDialogView(view); + + sInstances++; + + SeekBar seekBar = (SeekBar) view.findViewById(SEEKBAR_ID); + TextView valueDisplay = (TextView) view.findViewById(VALUE_DISPLAY_ID); + mSeekBar = new VibrationSeekBar(seekBar, valueDisplay, FILE_PATH); + } + + @Override + protected void onDialogClosed(boolean positiveResult) { + super.onDialogClosed(positiveResult); + + sInstances--; + + if (positiveResult) { + mSeekBar.save(); + } else if (sInstances == 0) { + mSeekBar.reset(); + } + } + + public static void restore(Context context) { + if (!isSupported()) { + return; + } + + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); + int value = sharedPrefs.getInt(FILE_PATH, MAX_VALUE); + Utils.writeValue(FILE_PATH, String.valueOf(value)); + } + + public static boolean isSupported() { + boolean supported = true; + if (!Utils.fileExists(FILE_PATH)) { + supported = false; + } + + return supported; + } + + class VibrationSeekBar implements SeekBar.OnSeekBarChangeListener { + + protected String mFilePath; + protected int mOriginal; + protected SeekBar mSeekBar; + protected TextView mValueDisplay; + + public VibrationSeekBar(SeekBar seekBar, TextView valueDisplay, String filePath) { + mSeekBar = seekBar; + mValueDisplay = valueDisplay; + mFilePath = filePath; + + // Read original value + SharedPreferences sharedPreferences = getSharedPreferences(); + mOriginal = sharedPreferences.getInt(mFilePath, MAX_VALUE); + + seekBar.setMax(MAX_VALUE); + reset(); + seekBar.setOnSeekBarChangeListener(this); + } + + // For inheriting class + protected VibrationSeekBar() { + } + + public void reset() { + mSeekBar.setProgress(mOriginal); + updateValue(mOriginal); + } + + public void save() { + Editor editor = getEditor(); + editor.putInt(mFilePath, mSeekBar.getProgress()); + editor.commit(); + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, + boolean fromUser) { + Utils.writeValue(mFilePath, String.valueOf(progress)); + updateValue(progress); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + // Do nothing + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + // Do nothing + } + + protected void updateValue(int progress) { + mValueDisplay.setText(String.valueOf(progress) + "%"); + } + + } + +} -- cgit v1.1