[2/2] OmniGears: allow disabling haptic feedback for virtual keys

Allows disabling haptic feedback for devices with
capacitive buttons (virtual keys)

Change-Id: I8a4ceac650e611f8a110b08c9e9f7f074e4b22c4
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index beb459b..ec9d69c 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -206,6 +206,8 @@
     <string name="keys_action_double">Double tap</string>
     <string name="dialog_no_home_key_title">No home action</string>
     <string name="no_home_key">You have no button assigned to the \"Home\" action! This can make your device unusable!</string>
+    <string name="virtual_key_haptic_feedback_title">Vibrate on touch</string>
+    <string name="virtual_key_haptic_feedback_summary">Enable depends on \"Vibrate on touch\" in sound settings</string>
 
     <!-- Power Menu Options-->
     <string name="bars_and_menus_category_power_menu_title">Power menu</string>
diff --git a/res/xml/button_settings.xml b/res/xml/button_settings.xml
index 2260816..c5867e1 100644
--- a/res/xml/button_settings.xml
+++ b/res/xml/button_settings.xml
@@ -55,6 +55,12 @@
         android:key="button_keys"
         android:title="@string/button_keys_title" >
 
+        <CheckBoxPreference
+            android:key="virtual_key_haptic_feedback"
+            android:title="@string/virtual_key_haptic_feedback_title"
+            android:summary="@string/virtual_key_haptic_feedback_summary"
+            android:persistent="false"/>
+
         <SwitchPreference
             android:key="keys_enable_custom"
             android:title="@string/keys_enable_custom_title"
diff --git a/src/org/omnirom/omnigears/ButtonSettings.java b/src/org/omnirom/omnigears/ButtonSettings.java
index d73b6e3..d35c92a 100644
--- a/src/org/omnirom/omnigears/ButtonSettings.java
+++ b/src/org/omnirom/omnigears/ButtonSettings.java
@@ -36,8 +36,10 @@
 
 import android.content.ContentResolver;
 import android.content.res.Resources;
+import android.content.Context;
 import android.media.AudioSystem;
 import android.os.Bundle;
+import android.os.Vibrator;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
@@ -87,6 +89,7 @@
     private static final String KEYS_ASSIST_LONG_PRESS = "keys_assist_long_press";
     private static final String KEYS_APP_SWITCH_PRESS = "keys_app_switch_press";
     private static final String KEYS_APP_SWITCH_LONG_PRESS = "keys_app_switch_long_press";
+    private static final String VIRTUAL_KEY_HAPTIC_FEEDBACK = "virtual_key_haptic_feedback";
 
     // Available custom actions to perform on a key press.
     private static final int ACTION_NOTHING = 0;
@@ -124,6 +127,7 @@
     private Map<String, Integer> mKeySettings = new HashMap<String, Integer>();
     private ListPreference mVolumeDefault;
     private CheckBoxPreference mHeadsetHookLaunchVoice;
+    private CheckBoxPreference mVirtualKeyHapticFeedback;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -131,7 +135,7 @@
 
         addPreferencesFromResource(R.xml.button_settings);
 
-        final ContentResolver resolver = getActivity().getContentResolver();
+        final ContentResolver resolver = getContentResolver();
         final PreferenceScreen prefScreen = getPreferenceScreen();
         final Resources res = getResources();
 
@@ -215,9 +219,11 @@
                     KEYS_APP_SWITCH_PRESS);
             mAppSwitchLongPressAction = (ListPreference) prefScreen.findPreference(
                     KEYS_APP_SWITCH_LONG_PRESS);
+            mVirtualKeyHapticFeedback = (CheckBoxPreference) prefScreen.findPreference(
+                    VIRTUAL_KEY_HAPTIC_FEEDBACK);
 
             if (hasBackKey) {
-                int backPressAction = Settings.System.getInt(getContentResolver(),
+                int backPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_BACK_ACTION, ACTION_BACK);
 
                 mBackPressAction.setValue(Integer.toString(backPressAction));
@@ -226,7 +232,7 @@
 
                 mKeySettings.put(Settings.System.KEY_BACK_ACTION, backPressAction);
 
-                int backLongPressAction = Settings.System.getInt(getContentResolver(),
+                int backLongPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_BACK_LONG_PRESS_ACTION, ACTION_NOTHING);
 
                 mBackLongPressAction.setValue(Integer.toString(backLongPressAction));
@@ -239,7 +245,7 @@
             }
 
             if (hasHomeKey) {
-                int homePressAction = Settings.System.getInt(getContentResolver(),
+                int homePressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_HOME_ACTION, ACTION_HOME);
 
                 mHomePressAction.setValue(Integer.toString(homePressAction));
@@ -261,11 +267,11 @@
                 }
 
                 if (hasAppSwitchKey) {
-                    homeLongPressAction = Settings.System.getInt(getContentResolver(),
+                    homeLongPressAction = Settings.System.getInt(resolver,
                             Settings.System.KEY_HOME_LONG_PRESS_ACTION, ACTION_NOTHING);
                 } else {
                     int defaultAction = ACTION_NOTHING;
-                    homeLongPressAction = Settings.System.getInt(getContentResolver(),
+                    homeLongPressAction = Settings.System.getInt(resolver,
                             Settings.System.KEY_HOME_LONG_PRESS_ACTION, longPressOnHomeBehavior);
                 }
                 mHomeLongPressAction.setValue(Integer.toString(homeLongPressAction));
@@ -277,7 +283,7 @@
                 int doubleTapOnHomeBehavior = getResources().getInteger(
                         com.android.internal.R.integer.config_doubleTapOnHomeBehavior);
 
-                int homeDoubleTapAction = Settings.System.getInt(getContentResolver(),
+                int homeDoubleTapAction = Settings.System.getInt(resolver,
                             Settings.System.KEY_HOME_DOUBLE_TAP_ACTION,
                             doubleTapOnHomeBehavior == 1 ? ACTION_APP_SWITCH : ACTION_NOTHING);
 
@@ -291,7 +297,7 @@
             }
 
             if (hasMenuKey) {
-                int menuPressAction = Settings.System.getInt(getContentResolver(),
+                int menuPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_MENU_ACTION, ACTION_MENU);
                 mMenuPressAction.setValue(Integer.toString(menuPressAction));
                 mMenuPressAction.setSummary(mMenuPressAction.getEntry());
@@ -304,7 +310,7 @@
                     menuLongPressAction = ACTION_SEARCH;
                 }
 
-                menuLongPressAction = Settings.System.getInt(getContentResolver(),
+                menuLongPressAction = Settings.System.getInt(resolver,
                             Settings.System.KEY_MENU_LONG_PRESS_ACTION, menuLongPressAction);
 
                 mMenuLongPressAction.setValue(Integer.toString(menuLongPressAction));
@@ -317,7 +323,7 @@
             }
 
             if (hasAssistKey) {
-                int assistPressAction = Settings.System.getInt(getContentResolver(),
+                int assistPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_ASSIST_ACTION, ACTION_SEARCH);
                 mAssistPressAction.setValue(Integer.toString(assistPressAction));
                 mAssistPressAction.setSummary(mAssistPressAction.getEntry());
@@ -325,7 +331,7 @@
 
                 mKeySettings.put(Settings.System.KEY_ASSIST_ACTION, assistPressAction);
 
-                int assistLongPressAction = Settings.System.getInt(getContentResolver(),
+                int assistLongPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_ASSIST_LONG_PRESS_ACTION, ACTION_VOICE_SEARCH);
                 mAssistLongPressAction.setValue(Integer.toString(assistLongPressAction));
                 mAssistLongPressAction.setSummary(mAssistLongPressAction.getEntry());
@@ -337,7 +343,7 @@
             }
 
             if (hasAppSwitchKey) {
-                int appSwitchPressAction = Settings.System.getInt(getContentResolver(),
+                int appSwitchPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_APP_SWITCH_ACTION, ACTION_APP_SWITCH);
                 mAppSwitchPressAction.setValue(Integer.toString(appSwitchPressAction));
                 mAppSwitchPressAction.setSummary(mAppSwitchPressAction.getEntry());
@@ -345,7 +351,7 @@
 
                 mKeySettings.put(Settings.System.KEY_APP_SWITCH_ACTION, appSwitchPressAction);
 
-                int appSwitchLongPressAction = Settings.System.getInt(getContentResolver(),
+                int appSwitchLongPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION, ACTION_NOTHING);
                 mAppSwitchLongPressAction.setValue(Integer.toString(appSwitchLongPressAction));
                 mAppSwitchLongPressAction.setSummary(mAppSwitchLongPressAction.getEntry());
@@ -356,10 +362,17 @@
                 prefScreen.removePreference(keysAppSwitchCategory);
             }
 
-            mEnableCustomBindings.setChecked((Settings.System.getInt(getActivity().
-                    getApplicationContext().getContentResolver(),
+            mEnableCustomBindings.setChecked((Settings.System.getInt(resolver,
                     Settings.System.HARDWARE_KEY_REBINDING, 0) == 1));
 		    mEnableCustomBindings.setOnPreferenceChangeListener(this);
+
+            Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
+            if (vibrator == null || !vibrator.hasVibrator()) {
+                removePreference(VIRTUAL_KEY_HAPTIC_FEEDBACK);
+            } else {
+                mVirtualKeyHapticFeedback.setChecked(Settings.System.getInt(resolver,
+                        Settings.System.VIRTUAL_KEYS_HAPTIC_FEEDBACK, 1) == 1);
+            }
         }
 
         final PreferenceCategory headsethookCategory =
@@ -374,16 +387,22 @@
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
         if (preference == mVolumeWake) {
             boolean checked = ((CheckBoxPreference)preference).isChecked();
-            Settings.System.putInt(getActivity().getContentResolver(),
+            Settings.System.putInt(getContentResolver(),
                     Settings.System.VOLUME_WAKE_SCREEN, checked ? 1:0);
             return true;
         }
         else if (preference == mHeadsetHookLaunchVoice) {
             boolean checked = ((CheckBoxPreference)preference).isChecked();
-            Settings.System.putInt(getActivity().getContentResolver(),
+            Settings.System.putInt(getContentResolver(),
                     Settings.System.HEADSETHOOK_LAUNCH_VOICE, checked ? 1:0);
 
             return true;
+        } else if (preference == mVirtualKeyHapticFeedback){
+            boolean checked = ((CheckBoxPreference)preference).isChecked();
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.VIRTUAL_KEYS_HAPTIC_FEEDBACK, checked ? 1:0);
+
+            return true;
         }
 
         return super.onPreferenceTreeClick(preferenceScreen, preference);
@@ -507,7 +526,7 @@
             return true;
         } else if (preference == mVolumeDefault) {
             String value = (String)newValue;
-            Settings.System.putString(getActivity().getContentResolver(), Settings.System.VOLUME_KEYS_DEFAULT, value);
+            Settings.System.putString(getContentResolver(), Settings.System.VOLUME_KEYS_DEFAULT, value);
             return true;
         }
         return false;