diff options
| author | Moyster <oysterized@gmail.com> | 2016-09-30 13:35:07 +0200 |
|---|---|---|
| committer | Moyster <oysterized@gmail.com> | 2016-09-30 13:35:07 +0200 |
| commit | 1a5977d9434208fb9e81c250e7b4998eb9bef50d (patch) | |
| tree | 932bf4c818b2de264c3fa40980b94bfa9362b66a | |
| parent | 6c12f43b6f21ae667432697dbde58e60a9ec8c7c (diff) | |
| parent | e9320124b3c6e83f419d56c134a362c8afc99672 (diff) | |
Merge branch 'cm-12.1' of github.com:Moyster/android_device_meizu_m2note into cm-12.1
| -rw-r--r-- | cmactions/res/values/arrays.xml | 31 | ||||
| -rw-r--r-- | cmactions/res/values/strings.xml | 21 | ||||
| -rw-r--r-- | cmactions/res/xml/touchscreen_panel.xml | 83 | ||||
| -rw-r--r-- | cmactions/src/com/cyanogenmod/settings/device/CMActionsSettings.java | 114 | ||||
| -rw-r--r-- | cmactions/src/com/cyanogenmod/settings/device/TouchscreenGestureSettings.java | 157 | ||||
| -rw-r--r-- | keyhandler/src/com/cyanogenmod/settings/device/KeyHandler.java | 147 |
6 files changed, 356 insertions, 197 deletions
diff --git a/cmactions/res/values/arrays.xml b/cmactions/res/values/arrays.xml new file mode 100644 index 0000000..4ebbd52 --- /dev/null +++ b/cmactions/res/values/arrays.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string-array name="gesture_action_titles"> + <item>Disabled</item> + <item>Wake Up</item> + <item>Unlock</item> + <item>Play/Pause</item> + <item>Next Song</item> + <item>Previous Song</item> + <item>Launch Camera</item> + <item>Toggle Flashlight</item> + <item>Do Not Disturb Mode</item> + <item>Normal Mode</item> + <item>Mute Mode</item> + </string-array> + + <string-array name="gesture_action_values"> + <item>disabled</item> + <item>wakeUp</item> + <item>unlock</item> + <item>play</item> + <item>next</item> + <item>prev</item> + <item>camera</item> + <item>flashlight</item> + <item>doNotDisturb</item> + <item>normal</item> + <item>mute</item> + </string-array> + +</resources> diff --git a/cmactions/res/values/strings.xml b/cmactions/res/values/strings.xml index 45e229e..22a34f6 100644 --- a/cmactions/res/values/strings.xml +++ b/cmactions/res/values/strings.xml @@ -16,6 +16,8 @@ --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="appName">Gestures</string> + <!-- Gesture shortcuts --> <string name="screen_gestures_panel_title">Gesture shortcuts</string> <string name="screen_gestures_panel_summary">Use gestures while the screen is off</string> @@ -25,25 +27,28 @@ <string name="gesture_category_title">Available Gestures</string> <string name="touchscreen_dtp_gesture_title">Double Tap</string> <string name="touchscreen_dtp_gesture_summary">Double Tap to Wake-Up device</string> - <string name="touchscreen_c_gesture_title">Camera</string> + <string name="touchscreen_c_gesture_title">Draw \"C\"</string> <string name="touchscreen_c_gesture_summary">Draw a \"C\" to activate Camera</string> - <string name="touchscreen_z_gesture_title">Music</string> + <string name="touchscreen_z_gesture_title">Draw \"Z\"</string> <string name="touchscreen_z_gesture_summary">Draw an \"Z\" to Play/Pause</string> - <string name="touchscreen_ltr_gesture_title">Music</string> + <string name="touchscreen_ltr_gesture_title">Swipe Left</string> <string name="touchscreen_ltr_gesture_summary">Swipe left to Prev Track</string> - <string name="touchscreen_gtr_gesture_title">Music</string> + <string name="touchscreen_gtr_gesture_title">Swipe Right</string> <string name="touchscreen_gtr_gesture_summary">Swipe right to Next Track</string> - <string name="touchscreen_s_gesture_title">Notifications</string> + <string name="touchscreen_s_gesture_title">Draw \"S\"</string> <string name="touchscreen_s_gesture_summary">Draw a \"S\" to activate \"Do Not Disturb\" Mode</string> - <string name="touchscreen_w_gesture_title">Notifications</string> + <string name="touchscreen_w_gesture_title">Draw \"W\"</string> <string name="touchscreen_w_gesture_summary">Draw a \"W\" to activate \"Normal\" Mode</string> - <string name="touchscreen_m_gesture_title">Notifications</string> + <string name="touchscreen_m_gesture_title">Draw \"M\"</string> <string name="touchscreen_m_gesture_summary">Draw a \"M\" to activate \"Mute\" Mode</string> - <string name="touchscreen_ydown_gesture_title">Flashlight</string> + <string name="touchscreen_ydown_gesture_title">Swipe Down</string> <string name="touchscreen_ydown_gesture_summary">Draw a vertical line down to activate Flashlight</string> + <string name="touchscreen_yup_gesture_title">Swipe Up</string> + <string name="touchscreen_yup_gesture_summary">Draw a vertical line down to activate Flashlight</string> <!-- haptic feedback --> <string name="touchscreen_extras">Extras</string> <string name="haptic_feedback">Haptic feedback</string> <string name="haptic_feedback_summary">Vibrate when a gesture is detected</string> </resources> + diff --git a/cmactions/res/xml/touchscreen_panel.xml b/cmactions/res/xml/touchscreen_panel.xml index c5326b1..c64c3bb 100644 --- a/cmactions/res/xml/touchscreen_panel.xml +++ b/cmactions/res/xml/touchscreen_panel.xml @@ -1,5 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2015 The CyanogenMod Project Licensed under the Apache License, Version 2.0 (the "License" @@ -16,74 +15,60 @@ --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <PreferenceCategory - android:title="@string/touchscreen_control_gesture_head" > + <PreferenceCategory android:title="@string/touchscreen_control_gesture_head"> - <SwitchPreference - android:key="touchscreen_gesture_control" - android:title="@string/touchscreen_control_gesture_title" /> + <SwitchPreference + android:key="touchscreen_gesture_control" + android:title="@string/touchscreen_control_gesture_title" /> </PreferenceCategory> <PreferenceCategory android:key="category_gestures" - android:title="@string/gesture_category_title" > + android:title="@string/gesture_category_title"> - <SwitchPreference - android:key="touchscreen_gesture_dtap" - android:title="@string/touchscreen_dtp_gesture_title" - android:summary="@string/touchscreen_dtp_gesture_summary" /> + <ListPreference + android:key="160" + android:title="@string/touchscreen_dtp_gesture_title" /> - <SwitchPreference - android:key="touchscreen_gesture_c" - android:title="@string/touchscreen_c_gesture_title" - android:summary="@string/touchscreen_c_gesture_summary" /> + <ListPreference + android:key="176" + android:title="@string/touchscreen_ltr_gesture_title" /> - <SwitchPreference - android:key="touchscreen_gesture_z" - android:title="@string/touchscreen_z_gesture_title" - android:summary="@string/touchscreen_z_gesture_summary" /> - - <SwitchPreference - android:key="touchscreen_gesture_ltr" - android:title="@string/touchscreen_ltr_gesture_title" - android:summary="@string/touchscreen_ltr_gesture_summary" /> + <ListPreference + android:key="177" + android:title="@string/touchscreen_gtr_gesture_title" /> - <SwitchPreference - android:key="touchscreen_gesture_gtr" - android:title="@string/touchscreen_gtr_gesture_title" - android:summary="@string/touchscreen_gtr_gesture_summary" /> + <ListPreference + android:key="179" + android:title="@string/touchscreen_ydown_gesture_title" /> - <SwitchPreference - android:key="touchscreen_gesture_s" - android:title="@string/touchscreen_s_gesture_title" - android:summary="@string/touchscreen_s_gesture_summary" /> + <ListPreference + android:key="193" + android:title="@string/touchscreen_c_gesture_title" /> - <SwitchPreference - android:key="touchscreen_gesture_w" - android:title="@string/touchscreen_w_gesture_title" - android:summary="@string/touchscreen_w_gesture_summary" /> + <ListPreference + android:key="202" + android:title="@string/touchscreen_z_gesture_title" /> - <SwitchPreference - android:key="touchscreen_gesture_m" - android:title="@string/touchscreen_m_gesture_title" - android:summary="@string/touchscreen_m_gesture_summary" /> + <ListPreference + android:key="194" + android:title="@string/touchscreen_w_gesture_title" /> - <SwitchPreference - android:key="touchscreen_gesture_ydown" - android:title="@string/touchscreen_ydown_gesture_title" - android:summary="@string/touchscreen_ydown_gesture_summary" /> + <ListPreference + android:key="195" + android:title="@string/touchscreen_m_gesture_title" /> </PreferenceCategory> - <PreferenceCategory - android:title="@string/touchscreen_extras"> + <PreferenceCategory android:title="@string/touchscreen_extras"> <SwitchPreference android:key="touchscreen_gesture_haptic_feedback" - android:title="@string/haptic_feedback" - android:summary="@string/haptic_feedback_summary" /> + android:summary="@string/haptic_feedback_summary" + android:title="@string/haptic_feedback" /> </PreferenceCategory> </PreferenceScreen> + diff --git a/cmactions/src/com/cyanogenmod/settings/device/CMActionsSettings.java b/cmactions/src/com/cyanogenmod/settings/device/CMActionsSettings.java index dcff1ea..d566f58 100644 --- a/cmactions/src/com/cyanogenmod/settings/device/CMActionsSettings.java +++ b/cmactions/src/com/cyanogenmod/settings/device/CMActionsSettings.java @@ -17,32 +17,30 @@ package com.cyanogenmod.settings.device; -import android.content.ContentResolver; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import android.provider.Settings; import android.util.Log; import com.cyanogenmod.settings.device.utils.FileUtils; -import java.lang.Integer; - public class CMActionsSettings { private static final String TAG = "CMActions"; // Preference keys public static final String TOUCHSCREEN_GESTURE_CONTROL_KEY = "touchscreen_gesture_control"; - public static final String TOUCHSCREEN_DOUBLETAP_KEY = "touchscreen_gesture_dtap"; - public static final String TOUCHSCREEN_C_GESTURE_KEY = "touchscreen_gesture_c"; - public static final String TOUCHSCREEN_Z_GESTURE_KEY = "touchscreen_gesture_z"; - public static final String TOUCHSCREEN_LTR_GESTURE_KEY = "touchscreen_gesture_ltr"; - public static final String TOUCHSCREEN_GTR_GESTURE_KEY = "touchscreen_gesture_gtr"; - public static final String TOUCHSCREEN_S_GESTURE_KEY = "touchscreen_gesture_s"; - public static final String TOUCHSCREEN_W_GESTURE_KEY = "touchscreen_gesture_w"; - public static final String TOUCHSCREEN_M_GESTURE_KEY = "touchscreen_gesture_m"; - public static final String TOUCHSCREEN_YDOWN_GESTURE_KEY = "touchscreen_gesture_ydown"; + public static final String TOUCHSCREEN_DOUBLETAP_KEY = "160_enabled"; + public static final String TOUCHSCREEN_C_GESTURE_KEY = "193_enabled"; + public static final String TOUCHSCREEN_Z_GESTURE_KEY = "202_enabled"; + public static final String TOUCHSCREEN_LTR_GESTURE_KEY = "176_enabled"; + public static final String TOUCHSCREEN_GTR_GESTURE_KEY = "177_enabled"; + public static final String TOUCHSCREEN_S_GESTURE_KEY = "s_enabled"; + public static final String TOUCHSCREEN_W_GESTURE_KEY = "194_enabled"; + public static final String TOUCHSCREEN_M_GESTURE_KEY = "195_enabled"; + public static final String TOUCHSCREEN_YDOWN_GESTURE_KEY = "179_enabled"; + + public static final String TOUCHSCREEN_GESTURE_HAPTIC_FEEDBACK = "touchscreen_gesture_haptic_feedback"; @@ -89,55 +87,55 @@ public class CMActionsSettings { private static SharedPreferences.OnSharedPreferenceChangeListener mPrefListener; - public CMActionsSettings(Context context ) { + public CMActionsSettings(Context context) { SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); loadPreferences(sharedPrefs); mPrefListener = new SharedPreferences.OnSharedPreferenceChangeListener() { - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - boolean updated = true; - if (TOUCHSCREEN_GESTURE_CONTROL_KEY.equals(key)) { - mIsGestureEnabled = sharedPreferences.getBoolean(TOUCHSCREEN_GESTURE_CONTROL_KEY, false); - Log.d(TAG, "prefChanged: gesture control " + mIsGestureEnabled); - TouchscreenGestureSettings.gestureCat.setEnabled(areGesturesEnabled()); - } else if (TOUCHSCREEN_DOUBLETAP_KEY.equals(key)) { - mIsGesture_DTP_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_DOUBLETAP_KEY, false); - } else if (TOUCHSCREEN_C_GESTURE_KEY.equals(key)) { - mIsGesture_C_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_C_GESTURE_KEY, false); - } else if (TOUCHSCREEN_S_GESTURE_KEY.equals(key)) { - mIsGesture_S_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_S_GESTURE_KEY, false); - } else if (TOUCHSCREEN_W_GESTURE_KEY.equals(key)) { - mIsGesture_W_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_W_GESTURE_KEY, false); - } else if (TOUCHSCREEN_M_GESTURE_KEY.equals(key)) { - mIsGesture_M_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_M_GESTURE_KEY, false); - } else if (TOUCHSCREEN_Z_GESTURE_KEY.equals(key)) { - mIsGesture_Z_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_Z_GESTURE_KEY, false); - } else if (TOUCHSCREEN_YDOWN_GESTURE_KEY.equals(key)) { - mIsGesture_YDOWN_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_YDOWN_GESTURE_KEY, false); - } else if (TOUCHSCREEN_LTR_GESTURE_KEY.equals(key)) { - mIsGesture_LTR_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_LTR_GESTURE_KEY, false); - } else if (TOUCHSCREEN_GTR_GESTURE_KEY.equals(key)) { - mIsGesture_GTR_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_GTR_GESTURE_KEY, false); - } else if (TOUCHSCREEN_GESTURE_HAPTIC_FEEDBACK.equals(key)) { - //CMSettings.System.putInt(getContentResolver(),CMSettings.System.TOUCHSCREEN_GESTURE_HAPTIC_FEEDBACK, value ? 1 : 0); - final boolean val = sharedPreferences.getBoolean(TOUCHSCREEN_GTR_GESTURE_KEY, false); - } else { - updated = false; - } - if (updated) { - updateGestureMode(); - } + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + boolean updated = true; + if (TOUCHSCREEN_GESTURE_CONTROL_KEY.equals(key)) { + mIsGestureEnabled = sharedPreferences.getBoolean(TOUCHSCREEN_GESTURE_CONTROL_KEY, false); + Log.d(TAG, "prefChanged: gesture control " + mIsGestureEnabled); + TouchscreenGestureSettings.PrefFragment.gestureCat.setEnabled(areGesturesEnabled()); + } else if (TOUCHSCREEN_DOUBLETAP_KEY.equals(key)) { + mIsGesture_DTP_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_DOUBLETAP_KEY, false); + } else if (TOUCHSCREEN_C_GESTURE_KEY.equals(key)) { + mIsGesture_C_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_C_GESTURE_KEY, false); + } else if (TOUCHSCREEN_S_GESTURE_KEY.equals(key)) { + mIsGesture_S_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_S_GESTURE_KEY, false); + } else if (TOUCHSCREEN_W_GESTURE_KEY.equals(key)) { + mIsGesture_W_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_W_GESTURE_KEY, false); + } else if (TOUCHSCREEN_M_GESTURE_KEY.equals(key)) { + mIsGesture_M_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_M_GESTURE_KEY, false); + } else if (TOUCHSCREEN_Z_GESTURE_KEY.equals(key)) { + mIsGesture_Z_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_Z_GESTURE_KEY, false); + } else if (TOUCHSCREEN_YDOWN_GESTURE_KEY.equals(key)) { + mIsGesture_YDOWN_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_YDOWN_GESTURE_KEY, false); + } else if (TOUCHSCREEN_LTR_GESTURE_KEY.equals(key)) { + mIsGesture_LTR_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_LTR_GESTURE_KEY, false); + } else if (TOUCHSCREEN_GTR_GESTURE_KEY.equals(key)) { + mIsGesture_GTR_Enabled = sharedPreferences.getBoolean(TOUCHSCREEN_GTR_GESTURE_KEY, false); + } else if (TOUCHSCREEN_GESTURE_HAPTIC_FEEDBACK.equals(key)) { + //CMSettings.System.putInt(getContentResolver(),CMSettings.System.TOUCHSCREEN_GESTURE_HAPTIC_FEEDBACK, value ? 1 : 0); + final boolean val = sharedPreferences.getBoolean(TOUCHSCREEN_GTR_GESTURE_KEY, false); + } else { + updated = false; } - }; + if (updated) { + updateGestureMode(); + } + } + }; sharedPrefs.registerOnSharedPreferenceChangeListener(mPrefListener); mContext = context; } public static boolean areGesturesEnabled() { - Log.d(TAG,"Are gestures enabled:" +mIsGestureEnabled); + Log.d(TAG, "Are gestures enabled:" + mIsGestureEnabled); return mIsGestureEnabled; } @@ -162,17 +160,18 @@ public class CMActionsSettings { if enabled toggle the appropriate bit with ^ XOR operator */ public static void updateGestureMode() { int gesture_mode = 0; + // TODO Configure gesture control bits for better handling if (mIsGestureEnabled) { FileUtils.writeAsByte(TOUCHSCREEN_GESTURE_MODE_NODE, ENABLE_ALL_MASK); - /* TAP_CTR masking */ + // TAP_CTR masking gesture_mode = (gesture_mode ^ KEY_MASK_DTP_CONTROL); if (mIsGesture_DTP_Enabled) gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_DTP); Log.d(TAG, "Gesture mode DoubleTap: " + gesture_mode); FileUtils.writeAsByte(TOUCHSCREEN_GESTURE_MODE_NODE, gesture_mode); gesture_mode = 0; - /* SWIPE_CTR masking */ + // SWIPE_CTR masking gesture_mode = (gesture_mode ^ KEY_MASK_SWIPE_CONTROL); if (mIsGesture_YDOWN_Enabled) gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_YDOWN); @@ -183,18 +182,18 @@ public class CMActionsSettings { Log.d(TAG, "Gesture mode Swipe: " + gesture_mode); FileUtils.writeAsByte(TOUCHSCREEN_GESTURE_MODE_NODE, gesture_mode); gesture_mode = 0; - /* UNICODE_CTR masking */ + // UNICODE_CTR masking gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_CONTROL); if (((gesture_mode & KEY_MASK_GESTURE_C) == 1) != mIsGesture_C_Enabled) gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_C); if (((gesture_mode & KEY_MASK_GESTURE_S) == 1) != mIsGesture_S_Enabled) - gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_S); + gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_S); if (((gesture_mode & KEY_MASK_GESTURE_W) == 1) != mIsGesture_W_Enabled) - gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_W); + gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_W); if (((gesture_mode & KEY_MASK_GESTURE_M) == 1) != mIsGesture_M_Enabled) - gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_M); + gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_M); if (((gesture_mode & KEY_MASK_GESTURE_Z) == 1) != mIsGesture_Z_Enabled) - gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_Z); + gesture_mode = (gesture_mode ^ KEY_MASK_GESTURE_Z); } else { gesture_mode = DISABLE_ALL_MASK; } @@ -203,3 +202,4 @@ public class CMActionsSettings { } } + diff --git a/cmactions/src/com/cyanogenmod/settings/device/TouchscreenGestureSettings.java b/cmactions/src/com/cyanogenmod/settings/device/TouchscreenGestureSettings.java index 44bcc44..fed85fb 100644 --- a/cmactions/src/com/cyanogenmod/settings/device/TouchscreenGestureSettings.java +++ b/cmactions/src/com/cyanogenmod/settings/device/TouchscreenGestureSettings.java @@ -16,44 +16,71 @@ package com.cyanogenmod.settings.device; -import com.android.internal.util.cm.ScreenType; - import android.app.ActionBar; +import android.app.Activity; +import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.os.Bundle; -import android.preference.PreferenceActivity; +import android.preference.ListPreference; +import android.preference.Preference; import android.preference.PreferenceCategory; -import android.view.Menu; +import android.preference.PreferenceFragment; +import android.preference.PreferenceManager; +import android.util.Log; import android.view.MenuItem; -public class TouchscreenGestureSettings extends PreferenceActivity { - public static final String CATEGORY_GESTURES = "category_gestures"; - public static PreferenceCategory gestureCat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class TouchscreenGestureSettings extends Activity { + // M2Note gesture codes + public static final int DOUBLE_TAP = 0xA0; //160 + public static final int SWIPE_X_LEFT = 0xB0; //176 + public static final int SWIPE_X_RIGHT = 0xB1; + public static final int SWIPE_Y_UP = 0xB2; + public static final int SWIPE_Y_DOWN = 0xB3; + + public static final int UNICODE_E = 0xC0; // 192 + public static final int UNICODE_C = 0xC1; + public static final int UNICODE_W = 0xC2; + public static final int UNICODE_M = 0xC3; + public static final int UNICODE_O = 0xC4; + public static final int UNICODE_S = 0xC5; + public static final int UNICODE_V_UP = 0xC6; + public static final int UNICODE_V_DOWN = 0xC7; + public static final int UNICODE_V_L = 0xC8; + public static final int UNICODE_V_R = 0xC9; + public static final int UNICODE_Z = 0xCA; + + private static final int[] supportedGesturesKeys = { + DOUBLE_TAP, + UNICODE_C, + UNICODE_Z, + SWIPE_X_LEFT, + SWIPE_X_RIGHT, + UNICODE_W, + UNICODE_M, + SWIPE_Y_DOWN + }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.touchscreen_panel); - gestureCat = (PreferenceCategory) findPreference(CATEGORY_GESTURES); - if (gestureCat != null) { - gestureCat.setEnabled(CMActionsSettings.areGesturesEnabled()); - } + final ActionBar actionBar = getActionBar(); + //actionBar.setTitle(getString(R.string.appName)); actionBar.setDisplayHomeAsUpEnabled(true); + + getFragmentManager().beginTransaction() + .replace(android.R.id.content, new PrefFragment()) + .commit(); } @Override protected void onResume() { super.onResume(); - - gestureCat = (PreferenceCategory) findPreference(CATEGORY_GESTURES); - if (gestureCat != null) { - gestureCat.setEnabled(CMActionsSettings.areGesturesEnabled()); - } - - // If running on a phone, remove padding around the listview - if (!ScreenType.isTablet(this)) { - getListView().setPadding(0, 0, 0, 0); - } } @Override @@ -64,4 +91,90 @@ public class TouchscreenGestureSettings extends PreferenceActivity { } return false; } + + public static class PrefFragment extends PreferenceFragment implements Preference.OnPreferenceChangeListener { + + public static final String TAG = PrefFragment.class.getSimpleName(); + public static final String CATEGORY_GESTURES = "category_gestures"; + public static PreferenceCategory gestureCat; + + private SharedPreferences sharedPrefs; + private String[] actionTitles; + private String[] actionValues; + private List<String> actionTitlesList; + private List<String> actionValuesList; + private static final List<String> allowedSystemApps = new ArrayList<>(); + + static { + allowedSystemApps.add("com.android.dialer"); + allowedSystemApps.add("com.android.mms"); + allowedSystemApps.add("com.android.settings"); + allowedSystemApps.add("com.android.deskclock"); + allowedSystemApps.add("com.android.calculator2"); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.touchscreen_panel); + sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); + + actionTitlesList = new ArrayList<>(); + actionValuesList = new ArrayList<>(); + actionTitles = this.getResources().getStringArray(R.array.gesture_action_titles); + actionValues = this.getResources().getStringArray(R.array.gesture_action_values); + actionTitlesList.addAll(Arrays.asList(actionTitles)); + actionValuesList.addAll(Arrays.asList(actionValues)); + + List<ApplicationInfo> packages = getActivity().getPackageManager() + .getInstalledApplications(PackageManager.GET_META_DATA); + for (ApplicationInfo appInfo : packages) { + if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0 && + allowedSystemApps.indexOf(appInfo.packageName) == -1) + continue; + actionTitlesList.add(appInfo.loadLabel(getActivity().getPackageManager()).toString()); + actionValuesList.add("launch$" + appInfo.packageName); + } + actionTitles = actionTitlesList.toArray(new String[actionTitlesList.size()]); + actionValues = actionValuesList.toArray(new String[actionValuesList.size()]); + for (int prefKey : supportedGesturesKeys) { + ListPreference preference = (ListPreference) findPreference(String.valueOf(prefKey)); + preference.setEntries(actionTitles); + preference.setEntryValues(actionValues); + preference.setOnPreferenceChangeListener(this); + String prefValue = sharedPrefs.getString(String.valueOf(prefKey), "disabled"); + int i = actionValuesList.indexOf(prefValue); + if (i >= 0) { + preference.setSummary(actionTitles[i]); + preference.setValueIndex(i); + } + } + } + + @Override + public void onResume() { + super.onResume(); + gestureCat = (PreferenceCategory) findPreference(CATEGORY_GESTURES); + if (gestureCat != null) { + gestureCat.setEnabled(CMActionsSettings.areGesturesEnabled()); + } + } + + @Override + public void onStart() { + super.onStart(); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object o) { + String newValue = (String) o; + int i = actionValuesList.indexOf(newValue); + if (i >= 0) + preference.setSummary(actionTitles[i]); + sharedPrefs.edit().putBoolean(preference.getKey() + "_enabled", + !"disabled".equals(newValue)).apply(); + return true; + } + } } + diff --git a/keyhandler/src/com/cyanogenmod/settings/device/KeyHandler.java b/keyhandler/src/com/cyanogenmod/settings/device/KeyHandler.java index 5b4b8bf..20c3199 100644 --- a/keyhandler/src/com/cyanogenmod/settings/device/KeyHandler.java +++ b/keyhandler/src/com/cyanogenmod/settings/device/KeyHandler.java @@ -22,6 +22,7 @@ import android.content.ActivityNotFoundException; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; import android.content.res.Resources; import android.hardware.Sensor; import android.hardware.SensorEvent; @@ -77,13 +78,13 @@ public class KeyHandler implements DeviceKeyHandler { "com.android.keyguard.action.DISMISS_KEYGUARD_SECURELY"; // M2Note gesture codes - public static final int DOUBLE_TAP = 0xA0; - public static final int SWIPE_X_LEFT = 0xB0; + public static final int DOUBLE_TAP = 0xA0; //160 + public static final int SWIPE_X_LEFT = 0xB0; //176 public static final int SWIPE_X_RIGHT = 0xB1; public static final int SWIPE_Y_UP = 0xB2; public static final int SWIPE_Y_DOWN = 0xB3; - public static final int UNICODE_E = 0xC0; + public static final int UNICODE_E = 0xC0; // 192 public static final int UNICODE_C = 0xC1; public static final int UNICODE_W = 0xC2; public static final int UNICODE_M = 0xC3; @@ -104,6 +105,7 @@ public class KeyHandler implements DeviceKeyHandler { private EventHandler mEventHandler; private SensorManager mSensorManager; private TorchManager mTorchManager; + private PackageManager mPackageManager; private Sensor mProximitySensor; private Vibrator mVibrator; private WakeLock mProximityWakeLock; @@ -112,12 +114,13 @@ public class KeyHandler implements DeviceKeyHandler { private boolean mProximityWakeSupported; private Instrumentation m_Instrumentation; private Context cmaContext = null; - + private boolean isLastPressHomeButton = false; - private boolean mNotificationSliderVibrate; + //private boolean mNotificationSliderVibrate; public KeyHandler(Context context) { mContext = context; + mPackageManager = context.getPackageManager(); mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mEventHandler = new EventHandler(); m_Instrumentation = new Instrumentation(); @@ -166,14 +169,22 @@ public class KeyHandler implements DeviceKeyHandler { @Override public void handleMessage(Message msg) { try { + int zenMode = 0; int gestureData = (int) msg.obj; - Log.i(TAG, "Handling gesture: " + gestureData); - switch (gestureData) { - case DOUBLE_TAP: + String prefValue = getCMAStringPref(String.valueOf(gestureData)); + Log.i(TAG, "Handling gesture: " + gestureData + " action: " + prefValue); + switch (prefValue) { + case "wakeUp": mPowerManager.wakeUpWithProximityCheck(SystemClock.uptimeMillis()); - doHapticFeedback(); break; - case UNICODE_C: + case "unlock": + ensureKeyguardManager(); + mGestureWakeLock.acquire(GESTURE_WAKELOCK_DURATION); + mContext.sendBroadcastAsUser(new Intent(ACTION_DISMISS_KEYGUARD), + UserHandle.CURRENT); + mPowerManager.wakeUp(SystemClock.uptimeMillis()); + break; + case "camera": ensureKeyguardManager(); final String action; mGestureWakeLock.acquire(GESTURE_WAKELOCK_DURATION); @@ -187,88 +198,96 @@ public class KeyHandler implements DeviceKeyHandler { mPowerManager.wakeUp(SystemClock.uptimeMillis()); Intent intent = new Intent(action, null); startActivitySafely(intent); - doHapticFeedback(); break; - case UNICODE_Z: + case "play": dispatchMediaKeyWithWakeLockToMediaSession(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE); - doHapticFeedback(); break; - case SWIPE_Y_DOWN: + case "flashlight": ensureTorchManager(); mGestureWakeLock.acquire(GESTURE_WAKELOCK_DURATION); mTorchManager.toggleTorch(); - doHapticFeedback(); break; - case SWIPE_X_LEFT: + case "prev": dispatchMediaKeyWithWakeLockToMediaSession(KeyEvent.KEYCODE_MEDIA_PREVIOUS); - doHapticFeedback(); break; - case SWIPE_X_RIGHT: + case "next": dispatchMediaKeyWithWakeLockToMediaSession(KeyEvent.KEYCODE_MEDIA_NEXT); - doHapticFeedback(); break; - case UNICODE_S: - case UNICODE_W: - case UNICODE_M: - int zenMode = Global.ZEN_MODE_OFF; - if (gestureData == UNICODE_M) { - zenMode = Global.ZEN_MODE_NO_INTERRUPTIONS; - } else if (gestureData == UNICODE_S) { - zenMode = Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; - } + case "doNotDisturb": Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, - zenMode); - if (mNotificationSliderVibrate) { - doHapticFeedback(); + Global.ZEN_MODE_NO_INTERRUPTIONS); + break; + case "normal": + Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, + Global.ZEN_MODE_OFF); + break; + case "mute": + Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, + Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS); + break; + default: + if (prefValue.startsWith("launch$")) { + String packageName = prefValue.replace("launch$", ""); + ensureKeyguardManager(); + mGestureWakeLock.acquire(GESTURE_WAKELOCK_DURATION); + if (!mKeyguardManager.isKeyguardSecure() && mKeyguardManager.isKeyguardLocked()) { + mContext.sendBroadcastAsUser(new Intent(ACTION_DISMISS_KEYGUARD), + UserHandle.CURRENT); + } + mPowerManager.wakeUp(SystemClock.uptimeMillis()); + Intent appIntent = mPackageManager.getLaunchIntentForPackage(packageName); + startActivitySafely(appIntent); } - mNotificationSliderVibrate = true; break; } + doHapticFeedback(); } catch (Exception e) { Log.e(TAG, "Gesture EventHandler", e); - //e.printStackTrace(); } } } + private void setZenMode(int zenMode) { + Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, + zenMode); + } + public boolean handleKeyEvent(KeyEvent event) { boolean isHandled = false; switch (event.getScanCode()) { case 102: // Home button event - if (event.getKeyCode() == KeyEvent.KEYCODE_BACK - && event.getAction() == KeyEvent.ACTION_DOWN - && isLastPressHomeButton) { - isHandled = true; + if (event.getAction() == KeyEvent.ACTION_DOWN) { + if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && isLastPressHomeButton) { + isHandled = true; + } + isLastPressHomeButton = mPowerManager.isInteractive() + && event.getKeyCode() == KeyEvent.KEYCODE_HOME; } - isLastPressHomeButton = event.getKeyCode() == KeyEvent.KEYCODE_HOME; break; case 195: // Gesture event - if (event.getAction() == KeyEvent.ACTION_UP) - return true; - - try { - int gestureData = readGestureData(); - if (gestureData == 0) - return true; - - if (!mEventHandler.hasMessages(GESTURE_REQUEST)) { - Message msg = getGestureMessage(gestureData); - boolean defaultProximity = mContext.getResources().getBoolean( - com.android.internal.R.bool.config_proximityCheckOnWakeEnabledByDefault); - boolean proximityWakeCheckEnabled = Settings.System.getInt(mContext.getContentResolver(), - Settings.System.PROXIMITY_ON_WAKE, defaultProximity ? 1 : 0) == 1; - if (mProximityWakeSupported && proximityWakeCheckEnabled && mProximitySensor != null) { - mEventHandler.sendMessageDelayed(msg, mProximityTimeOut); - processEvent(event); - } else { - mEventHandler.sendMessage(msg); + isHandled = true; + if (event.getAction() == KeyEvent.ACTION_DOWN) { + try { + int gestureData = readGestureData(); + + if (gestureData != 0 && !mEventHandler.hasMessages(GESTURE_REQUEST)) { + Message msg = getGestureMessage(gestureData); + boolean defaultProximity = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_proximityCheckOnWakeEnabledByDefault); + boolean proximityWakeCheckEnabled = Settings.System.getInt(mContext.getContentResolver(), + Settings.System.PROXIMITY_ON_WAKE, defaultProximity ? 1 : 0) == 1; + if (mProximityWakeSupported && proximityWakeCheckEnabled && mProximitySensor != null) { + mEventHandler.sendMessageDelayed(msg, mProximityTimeOut); + processEvent(event); + } else { + mEventHandler.sendMessage(msg); + } } + } catch (Exception e) { + Log.e(TAG, "Gesture handling failed.", e); + isHandled = false; } - return true; - } catch (Exception e) { - // Gesture data read failed - return false; } } return isHandled; @@ -344,6 +363,12 @@ public class KeyHandler implements DeviceKeyHandler { return cmaPrefs.getBoolean(prefKey, defVal); } + private String getCMAStringPref(String prefKey) { + SharedPreferences cmaPrefs = null; + cmaPrefs = cmaContext.getSharedPreferences("com.cyanogenmod.settings.device_preferences", Context.MODE_MULTI_PROCESS); + return cmaPrefs.getString(prefKey, "disabled"); + } + private void doHapticFeedback() { if (mVibrator == null) { return; |
