[1/2] OmniGears: Active Display add shake event

PS11: Fix strings

- correct dependency option
- added option to bypass Quiet Hours (default now is not , that is 'privacy is first' decision)
- added option to configure time between shakes
- added option to set disable timeout
- added option to run like "PA PEEK"

PS12:
-disable default event with the other shake settings
-simplify titles

Change-Id: Ibdf35b1e323fa15bf2e5da9ca8225533cd4c42c4
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 10948ca..f56e144 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -239,7 +239,7 @@
     <string name="ad_enable_summary_on">Active display enabled</string>
     <string name="ad_enable_summary_off">Active display disabled</string>
     <string name="ad_bypass_title">Bypass mode</string>
-    <string name="ad_bypass_summary">Pocket mode will launch the lockscreen when no notifications exist</string>
+    <string name="ad_bypass_summary">Pocket mode will launch the lockscreen when no notifications exist and lockscreen secure enabled</string>
     <string name="ad_text_title">Notification text</string>
     <string name="ad_text_summary">Show the notification text around the ring</string>
     <string name="ad_content_title">Custom notification view</string>
@@ -248,6 +248,19 @@
     <string name="ad_annoying_summary">Limit the notification to once per time period</string>
     <string name="ad_double_tap_title">Double tap to sleep</string>
     <string name="ad_double_tap_summary">Turn screen off with double tap</string>
+    <string name="ad_shake_event_settings_title">Shake settings</string>
+    <string name="ad_shake_event_title">Shake to redisplay</string>
+    <string name="ad_shake_event_summary">Shake device to redisplay notifications</string>
+    <string name="ad_shake_force_title">Default event</string>
+    <string name="ad_shake_force_summary">After receive a notification won\'t run active display until user shakes</string>
+    <string name="ad_shake_threshold_title">Intensity</string>
+    <string name="ad_shake_threshold_summary">Intensity of shake needed to display notifications</string>
+    <string name="ad_shake_timeout_title">Timeout</string>
+    <string name="ad_shake_timeout_summary">Seconds that shake is active after receiving a notification, 0 means always active.</string>
+    <string name="ad_shake_quiet_hours_title">Bypass Quiet Hours</string>
+    <string name="ad_shake_quiet_hours_summary">Allow shake during Quiet Hours</string>
+    <string name="ad_shake_long_threshold_title">Interval</string>
+    <string name="ad_shake_long_threshold_summary">Minimum time between consecutive shakes</string>
     <string name="ad_all_notifications_title">Show ongoing</string>
     <string name="ad_all_notifications_summary">Show non-clearable notifications</string>
     <string name="ad_hide_low_priority_title">Hide low priority</string>
diff --git a/res/xml/active_display_settings.xml b/res/xml/active_display_settings.xml
index 3b615cc..9a0f588 100644
--- a/res/xml/active_display_settings.xml
+++ b/res/xml/active_display_settings.xml
@@ -31,6 +31,13 @@
         android:summary="@string/ad_content_summary"
         android:dependency="ad_enable"/>
 
+    <CheckBoxPreference
+        android:key="ad_bypass"
+        android:persistent="false"
+        android:title="@string/ad_bypass_title"
+        android:summary="@string/ad_bypass_summary"
+        android:dependency="ad_enable"/>
+
     <org.omnirom.omnigears.preference.SystemCheckBoxPreference
         android:key="active_display_text"
         android:title="@string/ad_text_title"
@@ -59,13 +66,6 @@
         android:dependency="ad_enable"/>
 
     <CheckBoxPreference
-        android:key="ad_bypass"
-        android:persistent="false"
-        android:title="@string/ad_bypass_title"
-        android:summary="@string/ad_bypass_summary"
-        android:dependency="ad_enable"/>
-
-    <CheckBoxPreference
         android:key="ad_sunlight_mode"
         android:persistent="false"
         android:title="@string/ad_sunlight_mode_title"
@@ -94,6 +94,64 @@
         android:dependency="ad_enable" />
 
     <PreferenceCategory
+        android:key="ad_shake_event"
+        android:title="@string/ad_shake_event_settings_title" />
+
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="active_display_shake_event"
+            android:title="@string/ad_shake_event_title"
+            android:summary="@string/ad_shake_event_summary"
+            android:dependency="ad_enable"/>
+
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="active_display_shake_force"
+            android:title="@string/ad_shake_force_title"
+            android:summary="@string/ad_shake_force_summary"
+            android:dependency="active_display_shake_event"/>
+
+        <org.omnirom.omnigears.chameleonos.SeekBarPreference
+            android:key="ad_shake_threshold"
+            android:persistent="false"
+            android:title="@string/ad_shake_threshold_title"
+            android:summary="@string/ad_shake_threshold_summary"
+            android:max="20"
+            settings:min="5"
+            settings:interval="1"
+            settings:unitsLeft=""
+            settings:unitsRight=""
+            android:dependency="active_display_shake_event" />
+
+        <org.omnirom.omnigears.chameleonos.SeekBarPreference
+            android:key="ad_shake_long_threshold"
+            android:persistent="false"
+            android:title="@string/ad_shake_long_threshold_title"
+            android:summary="@string/ad_shake_long_threshold_summary"
+            android:max="5"
+            settings:min="1"
+            settings:interval="1"
+            settings:unitsLeft=""
+            settings:unitsRight="s"
+            android:dependency="active_display_shake_event" />
+
+        <org.omnirom.omnigears.chameleonos.SeekBarPreference
+            android:key="ad_shake_timeout"
+            android:persistent="false"
+            android:title="@string/ad_shake_timeout_title"
+            android:summary="@string/ad_shake_timeout_summary"
+            android:max="120"
+            settings:min="0"
+            settings:interval="1"
+            settings:unitsLeft=""
+            settings:unitsRight="s"
+            android:dependency="active_display_shake_event" />
+
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="active_display_shake_quiet_hours"
+            android:title="@string/ad_shake_quiet_hours_title"
+            android:summary="@string/ad_shake_quiet_hours_summary"
+            android:dependency="active_display_shake_event"/>
+
+    <PreferenceCategory
         android:key="ad_customizations"
         android:title="@string/ad_customizations_title" />
 
diff --git a/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java b/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
index 2002c64..5de3a49 100644
--- a/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
+++ b/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
@@ -40,8 +40,6 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import android.util.Log;
-
 public class ActiveDisplaySettings extends SettingsPreferenceFragment implements
         OnPreferenceChangeListener {
     private static final String TAG = "ActiveDisplaySettings";
@@ -59,6 +57,9 @@
     private static final String KEY_TIMEOUT = "ad_timeout";
     private static final String KEY_THRESHOLD = "ad_threshold";
     private static final String KEY_TURNOFF_MODE = "ad_turnoff_mode";
+    private static final String KEY_SHAKE_THRESHOLD = "ad_shake_threshold";
+    private static final String KEY_SHAKE_LONGTHRESHOLD = "ad_shake_long_threshold";
+    private static final String KEY_SHAKE_TIMEOUT = "ad_shake_timeout";
 
     private ContentResolver mResolver;
     private Context mContext;
@@ -72,6 +73,9 @@
     private CheckBoxPreference mTurnOffModePref;
     private SeekBarPreference mBrightnessLevel;
     private SeekBarPreference mAnnoyingNotification;
+    private SeekBarPreference mShakeThreshold;
+    private SeekBarPreference mShakeLongThreshold;
+    private SeekBarPreference mShakeTimeout;
     private ListPreference mDisplayTimeout;
     private ListPreference mPocketModePref;
     private ListPreference mProximityThreshold;
@@ -79,7 +83,6 @@
     private int mMinimumBacklight;
     private int mMaximumBacklight;
 
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -146,6 +149,21 @@
                 Settings.System.ACTIVE_DISPLAY_ANNOYING, 0));
         mAnnoyingNotification.setOnPreferenceChangeListener(this);
 
+        mShakeThreshold = (SeekBarPreference) prefSet.findPreference(KEY_SHAKE_THRESHOLD);
+        mShakeThreshold.setValue(Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_SHAKE_THRESHOLD, 10));
+        mShakeThreshold.setOnPreferenceChangeListener(this);
+
+        mShakeLongThreshold = (SeekBarPreference) prefSet.findPreference(KEY_SHAKE_LONGTHRESHOLD);
+        mShakeLongThreshold.setValue(Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_SHAKE_LONGTHRESHOLD, 2));
+        mShakeLongThreshold.setOnPreferenceChangeListener(this);
+
+        mShakeTimeout = (SeekBarPreference) prefSet.findPreference(KEY_SHAKE_TIMEOUT);
+        mShakeTimeout.setValue(Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_SHAKE_TIMEOUT, 10));
+        mShakeTimeout.setOnPreferenceChangeListener(this);
+
         mExcludedAppsPref = (AppMultiSelectListPreference) prefSet.findPreference(KEY_EXCLUDED_APPS);
         Set<String> excludedApps = getExcludedApps();
         if (excludedApps != null) {
@@ -163,6 +181,7 @@
         mShowAmPmPref = (CheckBoxPreference) prefSet.findPreference(KEY_SHOW_AMPM);
         mShowAmPmPref.setChecked((Settings.System.getInt(mResolver,
                 Settings.System.ACTIVE_DISPLAY_SHOW_AMPM, 0) == 1));
+        mShowAmPmPref.setEnabled(!is24Hour());
 
         PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
         mMinimumBacklight = pm.getMinimumScreenBrightnessSetting();
@@ -173,7 +192,16 @@
                 Settings.System.ACTIVE_DISPLAY_BRIGHTNESS, mMaximumBacklight);
         int realBrightness =  Math.round(((float)brightness / (float)mMaximumBacklight) * 100);
         mBrightnessLevel.setValue(realBrightness);
-        mBrightnessLevel.setOnPreferenceChangeListener(this); 
+        mBrightnessLevel.setOnPreferenceChangeListener(this);
+
+        try {
+            if (Settings.System.getInt(mResolver,
+                    Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
+                mBrightnessLevel.setEnabled(false);
+                mBrightnessLevel.setSummary(R.string.status_bar_toggle_info);
+            }
+        } catch (SettingNotFoundException e) {
+        }
 
         mDisplayTimeout = (ListPreference) prefSet.findPreference(KEY_TIMEOUT);
         timeout = Settings.System.getLong(mResolver,
@@ -215,6 +243,21 @@
             Settings.System.putInt(mResolver,
                     Settings.System.ACTIVE_DISPLAY_ANNOYING, annoying);
             return true;
+        } else if (preference == mShakeThreshold) {
+            int threshold = ((Integer)newValue).intValue();
+            Settings.System.putInt(mResolver,
+                    Settings.System.ACTIVE_DISPLAY_SHAKE_THRESHOLD, threshold);
+            return true;
+        } else if (preference == mShakeLongThreshold) {
+            int longThreshold = ((Integer)newValue).intValue();
+            Settings.System.putInt(mResolver,
+                    Settings.System.ACTIVE_DISPLAY_SHAKE_LONGTHRESHOLD, longThreshold);
+            return true;
+        } else if (preference == mShakeTimeout) {
+            int timeout = ((Integer)newValue).intValue();
+            Settings.System.putInt(mResolver,
+                    Settings.System.ACTIVE_DISPLAY_SHAKE_TIMEOUT, timeout);
+            return true;
         } else if (preference == mBrightnessLevel) {
             int brightness = ((Integer)newValue).intValue();
             int realBrightness =  Math.max(mMinimumBacklight, Math.round(((float)brightness / (float)100) * mMaximumBacklight));