[2/2] OmniGears: add support Tinted System bar

thanks to ChameleonOs and Thinking Bridge for the base code
also thanks to @MuhammadAG for Actionbar implementation (Xposed-Tinted-Status-Bar)

this allow statusbar an navigationbar background to follow color from Top and Bottom of application

see https://plus.google.com/107971916147063794392/posts/Eaqn5UAvKDt

PS.3 :
    change String (need help here xD)
    hide some option if device unsupport navigation bar
    add more option xD

PS.4 :
    move option into new section
    better string (i hope xD)

PS.5 :
    update strings

PS7:
-fix remove from category
-another string rework

PS. 8 :
    remove gradient option

Change-Id: Ibec4ad643dd447863b476807e6775ccd9aa693b8
diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index e6e40dc..d5906e7 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -278,6 +278,25 @@
         <item>ic_lockscreen_twitter_normal</item>
     </string-array>
 
+    <!-- tinted statusbar -->
+    <string-array name="tinted_statusbar_entries" translatable="false">
+        <item>@string/tinted_statusbar_off</item>
+        <item>@string/tinted_statusbar_actionbar</item>
+        <item>@string/tinted_statusbar_system</item>
+    </string-array>
+
+    <string-array name="tinted_statusbar_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </string-array>
+
+    <string-array name="tinted_statusbar_option_entries" translatable="false">
+        <item>@string/tinted_statusbar_statusbar</item>
+        <item>@string/tinted_statusbar_navbar</item>
+        <item>@string/tinted_statusbar_all</item>
+    </string-array>
+
     <!-- Quick pulldown -->
     <string-array name="quick_pulldown_entries" translatable="false">
         <item>@string/quick_pulldown_off</item>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index dd0e3c8..8deadaa 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -417,6 +417,21 @@
     <string name="icon_picker_sms">Messaging</string>
     <string name="icon_picker_twitter">Twitter</string>
 
+    <!-- Tinted statusbar -->
+    <string name="tinted_statusbar_title">Colors</string>
+    <string name="title_tinted_statusbar">Dynamic color change</string>
+    <string name="title_tinted_statusbar_option">Apply color to</string>
+    <string name="tinted_statusbar_off">Disabled</string>
+    <string name="tinted_statusbar_actionbar">Action bar color</string>
+    <string name="tinted_statusbar_system">Screen color</string>
+    <string name="tinted_statusbar_statusbar">Status bar</string>
+    <string name="tinted_statusbar_navbar">Navigation bar</string>
+    <string name="tinted_statusbar_all">Both</string>
+    <string name="tinted_statusbar_filter_title">Reverse color</string>
+    <string name="tinted_statusbar_filter_summary">Enable using reverse color</string>
+    <string name="tinted_statusbar_transparent_title">Status bar opacity</string>
+    <string name="tinted_navbar_transparent_title">Navigation bar opacity</string>
+
     <string name="quick_settings_category_title">Quick settings</string>
 
     <!-- QuickSettings: Dynamic Row -->
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index 2dba831..80c116b 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -20,6 +20,54 @@
         android:title="@string/interface_bars_title"
         xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
 
+    <!-- Tinted statusbar -->
+    <PreferenceCategory
+            android:key="category_tinted_statusbar"
+            android:title="@string/tinted_statusbar_title">
+
+        <ListPreference
+                android:key="tinted_statusbar"
+                android:title="@string/title_tinted_statusbar"
+                android:entries="@array/tinted_statusbar_entries"
+                android:entryValues="@array/tinted_statusbar_values"
+                android:defaultValue="0"
+                android:persistent="false" />
+
+        <ListPreference
+                android:key="tinted_statusbar_option"
+                android:title="@string/title_tinted_statusbar_option"
+                android:entries="@array/tinted_statusbar_option_entries"
+                android:entryValues="@array/tinted_statusbar_values"
+                android:defaultValue="0"
+                android:persistent="false" />
+
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="status_bar_tinted_filter"
+            android:title="@string/tinted_statusbar_filter_title"
+            android:summary="@string/tinted_statusbar_filter_summary" />
+
+        <org.omnirom.omnigears.chameleonos.SeekBarPreference
+            android:key="tinted_statusbar_transparent"
+            android:persistent="false"
+            android:title="@string/tinted_statusbar_transparent_title"
+            android:max="100"
+            settings:min="0"
+            settings:interval="10"
+            settings:unitsLeft=""
+            settings:unitsRight="%" />
+
+        <org.omnirom.omnigears.chameleonos.SeekBarPreference
+            android:key="tinted_navbar_transparent"
+            android:persistent="false"
+            android:title="@string/tinted_navbar_transparent_title"
+            android:max="100"
+            settings:min="0"
+            settings:interval="10"
+            settings:unitsLeft=""
+            settings:unitsRight="%" />
+
+    </PreferenceCategory>
+
     <!-- Status bar -->
     <PreferenceCategory
             android:key="category_status_bar"
diff --git a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
index c1ffc63..ba7effd 100644
--- a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
@@ -34,9 +34,12 @@
 import android.preference.Preference;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
+import android.preference.PreferenceCategory;
 import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
 
+import org.omnirom.omnigears.preference.SystemCheckBoxPreference;
+import org.omnirom.omnigears.chameleonos.SeekBarPreference;
 import com.android.internal.util.omni.DeviceUtils;
 import com.android.settings.Utils;
 
@@ -55,11 +58,19 @@
     private static final String NETWORK_TRAFFIC_PERIOD = "network_traffic_period";
     private static final String STATUS_BAR_NETWORK_ACTIVITY = "status_bar_network_activity";
     private static final String SOFT_BACK_KILL_APP = "soft_back_kill_app";
+    private static final String TINTED_STATUSBAR = "tinted_statusbar";
+    private static final String TINTED_STATUSBAR_OPTION = "tinted_statusbar_option";
+    private static final String TINTED_STATUSBAR_FILTER = "status_bar_tinted_filter";
+    private static final String TINTED_STATUSBAR_TRANSPARENT = "tinted_statusbar_transparent";
+    private static final String TINTED_NAVBAR_TRANSPARENT = "tinted_navbar_transparent";
     private static final String EMULATE_MENU_KEY = "emulate_menu_key";
+    private static final String CATEGORY_TINTED = "category_tinted_statusbar";
 
     private CheckBoxPreference mStatusBarBrightnessControl;
     private CheckBoxPreference mStatusBarNotifCount;
     private CheckBoxPreference mQuickSettingsDynamic;
+    private ListPreference mTintedStatusbar;
+    private ListPreference mTintedStatusbarOption;
     private ListPreference mQuickPulldown;
     private ListPreference mSmartPulldown;
     private ListPreference mNetTrafficState;
@@ -68,6 +79,9 @@
     private CheckBoxPreference mStatusBarNetworkActivity;
     private CheckBoxPreference mSoftBackKillApp;
     private CheckBoxPreference mEmulateMenuKey;
+    private SystemCheckBoxPreference mTintedStatusbarFilter;
+    private SeekBarPreference mTintedStatusbarTransparency;
+    private SeekBarPreference mTintedNavbarTransparency;
 
     private int mNetTrafficVal;
     private int MASK_UP;
@@ -105,6 +119,28 @@
                 Settings.System.STATUS_BAR_NOTIF_COUNT, 0) == 1);
         mStatusBarNotifCount.setOnPreferenceChangeListener(this);
 
+        final PreferenceCategory tintedCategory =
+                     (PreferenceCategory) prefSet.findPreference(CATEGORY_TINTED);
+
+        mTintedStatusbar = (ListPreference) findPreference(TINTED_STATUSBAR);
+        int tintedStatusbar = Settings.System.getInt(resolver,
+                    Settings.System.STATUS_BAR_TINTED_COLOR, 0);
+        mTintedStatusbar.setValue(String.valueOf(tintedStatusbar));
+        mTintedStatusbar.setSummary(mTintedStatusbar.getEntry());
+        mTintedStatusbar.setOnPreferenceChangeListener(this);
+
+        mTintedStatusbarFilter = (SystemCheckBoxPreference) findPreference(TINTED_STATUSBAR_FILTER);
+        mTintedStatusbarFilter.setEnabled(tintedStatusbar != 0);
+
+        mTintedStatusbarTransparency = (SeekBarPreference) findPreference(TINTED_STATUSBAR_TRANSPARENT);
+        mTintedStatusbarTransparency.setValue(Settings.System.getInt(resolver,
+                Settings.System.STATUS_BAR_TINTED_STATBAR_TRANSPARENT, 100));
+        mTintedStatusbarTransparency.setEnabled(tintedStatusbar != 0);
+        mTintedStatusbarTransparency.setOnPreferenceChangeListener(this);
+
+        mTintedStatusbarOption = (ListPreference) findPreference(TINTED_STATUSBAR_OPTION);
+        mTintedNavbarTransparency = (SeekBarPreference) findPreference(TINTED_NAVBAR_TRANSPARENT);
+
         mQuickPulldown = (ListPreference) findPreference(QUICK_PULLDOWN);
         mSmartPulldown = (ListPreference) findPreference(SMART_PULLDOWN);
 
@@ -173,8 +209,22 @@
 
         // Hide navigation bar category on devices without navigation bar
         if (!hasNavBar) {
+            tintedCategory.removePreference(mTintedStatusbarOption);
+            tintedCategory.removePreference(mTintedNavbarTransparency);
             prefSet.removePreference(findPreference(CATEGORY_NAVBAR));
         } else {
+            int tintedStatusbarOption = Settings.System.getInt(resolver,
+                    Settings.System.STATUS_BAR_TINTED_OPTION, 0);
+            mTintedStatusbarOption.setValue(String.valueOf(tintedStatusbarOption));
+            mTintedStatusbarOption.setSummary(mTintedStatusbarOption.getEntry());
+            mTintedStatusbarOption.setEnabled(tintedStatusbar != 0);
+            mTintedStatusbarOption.setOnPreferenceChangeListener(this);
+
+            mTintedNavbarTransparency.setValue(Settings.System.getInt(resolver,
+                    Settings.System.STATUS_BAR_TINTED_NAVBAR_TRANSPARENT, 100));
+            mTintedNavbarTransparency.setEnabled(tintedStatusbar != 0);
+            mTintedNavbarTransparency.setOnPreferenceChangeListener(this);
+
             mSoftBackKillApp = (CheckBoxPreference) prefSet.findPreference(SOFT_BACK_KILL_APP);
             mSoftBackKillApp.setChecked(Settings.System.getInt(resolver,
                     Settings.System.SOFT_BACK_KILL_APP_ENABLE, 0) == 1);
@@ -207,6 +257,36 @@
             boolean value = (Boolean) objValue;
             Settings.System.putInt(resolver,
                 Settings.System.QUICK_SETTINGS_TILES_ROW, value ? 1 : 0);
+        } else if (preference == mTintedStatusbar) {
+            int val = Integer.parseInt((String) objValue);
+            int index = mTintedStatusbar.findIndexOfValue((String) objValue);
+            Settings.System.putInt(resolver,
+                Settings.System.STATUS_BAR_TINTED_COLOR, val);
+            mTintedStatusbar.setSummary(mTintedStatusbar.getEntries()[index]);
+            if (mTintedStatusbarOption != null) {
+                mTintedStatusbarOption.setEnabled(val != 0);
+            }
+            mTintedStatusbarFilter.setEnabled(val != 0);
+            mTintedStatusbarTransparency.setEnabled(val != 0);
+            if (mTintedNavbarTransparency != null) {
+                mTintedNavbarTransparency.setEnabled(val != 0);
+            }
+        } else if (preference == mTintedStatusbarOption) {
+            int val = Integer.parseInt((String) objValue);
+            int index = mTintedStatusbarOption.findIndexOfValue((String) objValue);
+            Settings.System.putInt(resolver,
+                Settings.System.STATUS_BAR_TINTED_OPTION, val);
+            mTintedStatusbarOption.setSummary(mTintedStatusbarOption.getEntries()[index]);
+        } else if (preference == mTintedStatusbarTransparency) {
+            int val = ((Integer)objValue).intValue();
+            Settings.System.putInt(resolver,
+                    Settings.System.STATUS_BAR_TINTED_STATBAR_TRANSPARENT, val);
+            return true;
+        } else if (preference == mTintedNavbarTransparency) {
+            int val = ((Integer)objValue).intValue();
+            Settings.System.putInt(resolver,
+                    Settings.System.STATUS_BAR_TINTED_NAVBAR_TRANSPARENT, val);
+            return true;
         } else if (preference == mQuickPulldown) {
             int val = Integer.parseInt((String) objValue);
             int index = mQuickPulldown.findIndexOfValue((String) objValue);