[2/2] OmniGears: quick settings pull down [CM based]

Change-Id: Ie06ac5eb49db1f33a64154c68e29402338f34694
diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index adfe514..46f1bc7 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -235,4 +235,17 @@
         <item>1000</item>
         <item>1500</item>
     </string-array>
+
+    <!-- Quick pulldown -->
+    <string-array name="status_bar_quick_qs_pulldown_entries" translatable="false">
+        <item>@string/status_bar_quick_qs_pulldown_off</item>
+        <item>@string/status_bar_quick_qs_pulldown_right</item>
+        <item>@string/status_bar_quick_qs_pulldown_left</item>
+    </string-array>
+
+    <string-array name="status_bar_quick_qs_pulldown_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </string-array>
 </resources>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 9c061cd..8c641c1 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -336,4 +336,11 @@
     <string name="lockscreen_qs_disabled_title">Disable quick settings when locked</string>
     <string name="lockscreen_qs_disabled_summary">Disable expanding quick settings on secure lock screens</string>
 
+    <string name="status_bar_quick_qs_pulldown_title">Quick pulldown</string>
+    <string name="status_bar_quick_qs_pulldown_summary">%1$s edge of the status bar pulls down Quick Settings</string>
+    <string name="status_bar_quick_qs_pulldown_summary_left">Left</string>
+    <string name="status_bar_quick_qs_pulldown_summary_right">Right</string>
+    <string name="status_bar_quick_qs_pulldown_off">Off</string>
+    <string name="status_bar_quick_qs_pulldown_left">Left</string>
+    <string name="status_bar_quick_qs_pulldown_right">Right</string>
 </resources>
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index 80bd7b2..c9f192a 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -47,13 +47,21 @@
                         android:targetPackage="com.android.systemui"
                         android:targetClass="com.android.systemui.tuner.StatusBarActivity" />
             </PreferenceScreen>
+
+            <!-- Network traffic meter -->
+            <PreferenceScreen
+                android:key="category_network_traffic"
+                android:title="@string/network_traffic_title"
+                android:fragment="org.omnirom.omnigears.interfacesettings.NetworkTraffic" />
+
+            <ListPreference
+                android:key="status_bar_quick_qs_pulldown"
+                android:title="@string/status_bar_quick_qs_pulldown_title"
+                android:entries="@array/status_bar_quick_qs_pulldown_entries"
+                android:entryValues="@array/status_bar_quick_qs_pulldown_values"
+                android:persistent="false" />
+
         </PreferenceCategory>
- 
-       <!-- Network traffic meter -->
-        <PreferenceScreen
-            android:key="category_network_traffic"
-            android:title="@string/network_traffic_title"
-            android:fragment="org.omnirom.omnigears.interfacesettings.NetworkTraffic" />
 
         <PreferenceCategory
             android:key="category_navigationbar"
diff --git a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
index 604ecb2..f93ffe9 100644
--- a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
@@ -64,10 +64,12 @@
     private static final String NAVIGATIONBAR_ROOT = "category_navigationbar";
     private static final String TABLET_NAVIGATION_BAR = "enable_tablet_navigation";
     private static final String CUSTOM_HEADER_IMAGE_SHADOW = "status_bar_custom_header_shadow";
+    private static final String QUICK_SETTTINGS_PULLDOWN = "status_bar_quick_qs_pulldown";
 
     private ListPreference mDaylightHeaderPack;
     private CheckBoxPreference mCustomHeaderImage;
     private SeekBarPreference mHeaderShadow;
+    private ListPreference mQuickPulldown;
 
     @Override
     protected int getMetricsCategory() {
@@ -128,6 +130,12 @@
                 Settings.System.STATUS_BAR_CUSTOM_HEADER_SHADOW, 0);
         mHeaderShadow.setValue((int)(((double) headerShadow / 255) * 100));
         mHeaderShadow.setOnPreferenceChangeListener(this);
+
+        mQuickPulldown = (ListPreference) findPreference(QUICK_SETTTINGS_PULLDOWN);
+        mQuickPulldown.setOnPreferenceChangeListener(this);
+        int quickPullDownValue = Settings.System.getInt(getContentResolver(), Settings.System.STATUS_BAR_QUICK_QS_PULLDOWN, 0);
+        mQuickPulldown.setValue(String.valueOf(quickPullDownValue));
+        updatePulldownSummary(quickPullDownValue);
     }
 
     @Override
@@ -155,6 +163,11 @@
             int realHeaderValue = (int) (((double) headerShadow / 100) * 255);
             Settings.System.putInt(getContentResolver(),
                     Settings.System.STATUS_BAR_CUSTOM_HEADER_SHADOW, realHeaderValue);
+        } else if (preference == mQuickPulldown) {
+            int quickPullDownValue = Integer.valueOf((String) newValue);
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.STATUS_BAR_QUICK_QS_PULLDOWN, quickPullDownValue);
+            updatePulldownSummary(quickPullDownValue);
         }
         return true;
     }
@@ -193,6 +206,20 @@
         }
     }
 
+    private void updatePulldownSummary(int value) {
+        Resources res = getResources();
+
+        if (value == 0) {
+            // quick pulldown deactivated
+            mQuickPulldown.setSummary(res.getString(R.string.status_bar_quick_qs_pulldown_off));
+        } else {
+            String direction = res.getString(value == 2
+                    ? R.string.status_bar_quick_qs_pulldown_summary_left
+                    : R.string.status_bar_quick_qs_pulldown_summary_right);
+            mQuickPulldown.setSummary(res.getString(R.string.status_bar_quick_qs_pulldown_summary, direction));
+        }
+    }
+
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
                 @Override