[2/2] OmniGears: Pimp up ActiveDisplay

Base part: https://gerrit.omnirom.org/#/c/2819/

Change-Id: I8abf7a3018e7e0168860861ac240975cd1f8a2b0
diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index af57919..0c28d0b 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -146,6 +146,24 @@
         <item>18000000</item>
     </string-array>
 
+    <string-array name="ad_timeout_entries" translatable="false">
+        <item>@string/ad_timeout_3s</item>
+        <item>@string/ad_timeout_5s</item>
+        <item>@string/ad_timeout_8s</item>
+        <item>@string/ad_timeout_10s</item>
+        <item>@string/ad_timeout_15s</item>
+        <item>@string/ad_timeout_25s</item>
+    </string-array>
+
+    <string-array name="ad_timeout_values" translatable="false">
+        <item>3000</item>
+        <item>5000</item>
+        <item>8000</item>
+        <item>10000</item>
+        <item>15000</item>
+        <item>25000</item>
+    </string-array>
+
     <string-array name="ad_pocket_mode_entries" translatable="false">
         <item>@string/ad_pocket_mode_off</item>
         <item>@string/ad_pocket_mode_notifications</item>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index ce949ee..d157acf 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -215,6 +215,7 @@
     <string name="ad_pocket_mode_title">Pocket mode</string>
     <string name="ad_pocket_mode_summary">Show active display notifications when you take the device out of your pocket.</string>
     <string name="ad_redisplay_title">Redisplay notifications</string>
+    <string name="ad_timeout_title">Display timeout</string>
     <string name="ad_brightness_title">Notification brightness</string>
     <string name="ad_customizations_title">Customizations</string>
     <string name="ad_excluded_apps_title">Excluded applications</string>
@@ -234,6 +235,12 @@
     <string name="ad_redisplay_1h">1 hour</string>
     <string name="ad_redisplay_2h">2 hours</string>
     <string name="ad_redisplay_5h">5 hours</string>
+    <string name="ad_timeout_3s">3 seconds</string>
+    <string name="ad_timeout_5s">5 seconds</string>
+    <string name="ad_timeout_8s">8 seconds</string>
+    <string name="ad_timeout_10s">10 seconds</string>
+    <string name="ad_timeout_15s">15 seconds</string>
+    <string name="ad_timeout_25s">25 seconds</string>
     <string name="ad_pocket_mode_off">Off</string>
     <string name="ad_pocket_mode_notifications">Notifications only</string>
     <string name="ad_pocket_mode_always">Always</string>
diff --git a/res/xml/active_display_settings.xml b/res/xml/active_display_settings.xml
index 2f55c2f..325c84e 100644
--- a/res/xml/active_display_settings.xml
+++ b/res/xml/active_display_settings.xml
@@ -95,6 +95,15 @@
             android:summary="@string/ad_show_ampm_summary"
             android:dependency="ad_enable"/>
 
+        <ListPreference
+            android:key="ad_timeout"
+            android:persistent="false"
+            android:dialogTitle="@string/ad_timeout_title"
+            android:title="@string/ad_timeout_title"
+            android:entries="@array/ad_timeout_entries"
+            android:entryValues="@array/ad_timeout_values"
+            android:dependency="ad_enable"/>
+
         <org.omnirom.omnigears.chameleonos.SeekBarPreference
             android:key="ad_brightness"
             android:persistent="false"
@@ -107,4 +116,4 @@
             android:defaultValue="100"
             android:dependency="ad_enable" />
 
-</PreferenceScreen>
\ No newline at end of file
+</PreferenceScreen>
diff --git a/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java b/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
index f758881..bf03a9f 100644
--- a/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
+++ b/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
@@ -52,6 +52,7 @@
     private static final String KEY_SHOW_DATE = "ad_show_date";
     private static final String KEY_SHOW_AMPM = "ad_show_ampm";
     private static final String KEY_BRIGHTNESS = "ad_brightness";
+    private static final String KEY_TIMEOUT = "ad_timeout";
 
     private SwitchPreference mEnabledPref;
     private CheckBoxPreference mShowTextPref;
@@ -64,6 +65,7 @@
     private CheckBoxPreference mShowDatePref;
     private CheckBoxPreference mShowAmPmPref;
     private SeekBarPreference mBrightnessLevel;
+    private ListPreference mDisplayTimeout;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -129,6 +131,13 @@
         mBrightnessLevel.setValue(Settings.System.getInt(getContentResolver(),
                 Settings.System.ACTIVE_DISPLAY_BRIGHTNESS, 100));
         mBrightnessLevel.setOnPreferenceChangeListener(this);
+
+        mDisplayTimeout = (ListPreference) prefSet.findPreference(KEY_TIMEOUT);
+        mDisplayTimeout.setOnPreferenceChangeListener(this);
+        timeout = Settings.System.getLong(getContentResolver(),
+                Settings.System.ACTIVE_DISPLAY_TIMEOUT, 8000L);
+        mDisplayTimeout.setValue(String.valueOf(timeout));
+        updateTimeoutSummary(timeout);
     }
 
     public boolean onPreferenceChange(Preference preference, Object newValue) {
@@ -153,6 +162,10 @@
             Settings.System.putInt(getContentResolver(),
                     Settings.System.ACTIVE_DISPLAY_BRIGHTNESS, brightness);
             return true;
+        } else if (preference == mDisplayTimeout) {
+            long timeout = Integer.valueOf((String) newValue);
+            updateTimeoutSummary(timeout);
+            return true;
         }
         return false;
     }
@@ -211,6 +224,15 @@
                 Settings.System.ACTIVE_DISPLAY_REDISPLAY, value);
     }
 
+    private void updateTimeoutSummary(long value) {
+        try {
+            mDisplayTimeout.setSummary(mDisplayTimeout.getEntries()[mDisplayTimeout.findIndexOfValue("" + value)]);
+            Settings.System.putLong(getContentResolver(),
+                    Settings.System.ACTIVE_DISPLAY_TIMEOUT, value);
+        } catch (ArrayIndexOutOfBoundsException e) {
+        }
+    }
+
     private boolean hasProximitySensor() {
         SensorManager sm = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
         return sm.getDefaultSensor(TYPE_PROXIMITY) != null;