summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoyster <oysterized@gmail.com>2016-09-30 13:35:07 +0200
committerMoyster <oysterized@gmail.com>2016-09-30 13:35:07 +0200
commit1a5977d9434208fb9e81c250e7b4998eb9bef50d (patch)
tree932bf4c818b2de264c3fa40980b94bfa9362b66a
parent6c12f43b6f21ae667432697dbde58e60a9ec8c7c (diff)
parente9320124b3c6e83f419d56c134a362c8afc99672 (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.xml31
-rw-r--r--cmactions/res/values/strings.xml21
-rw-r--r--cmactions/res/xml/touchscreen_panel.xml83
-rw-r--r--cmactions/src/com/cyanogenmod/settings/device/CMActionsSettings.java114
-rw-r--r--cmactions/src/com/cyanogenmod/settings/device/TouchscreenGestureSettings.java157
-rw-r--r--keyhandler/src/com/cyanogenmod/settings/device/KeyHandler.java147
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;