[2/2] OmniGears: header image packs

Change-Id: I7281fb35fe57fd65cba19e5e242647fa54ebfd63
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 49fcb44..4aae610 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -198,6 +198,7 @@
    <string name="notification_title">Notification panel</string>
    <string name="status_bar_custom_header_title">Custom header image</string>
    <string name="status_bar_custom_header_summary">Enable notification panel header image</string>
+   <string name="daylight_header_pack_title">Header image pack</string>
 
     <!-- Network traffic -->
     <string name="network_traffic_title">Network traffic</string>
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index 663ea0e..9d1c4b0 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -52,12 +52,17 @@
             android:key="notification_category"
             android:title="@string/notification_title" >
 
-            <com.android.settings.preference.SystemCheckBoxPreference
+            <CheckBoxPreference
                     android:key="status_bar_custom_header"
                     android:title="@string/status_bar_custom_header_title"
                     android:summary="@string/status_bar_custom_header_summary"
                     android:defaultValue="false"/>
 
+            <ListPreference
+                android:key="daylight_header_pack"
+                android:title="@string/daylight_header_pack_title"
+                android:persistent="false" />
+
             <PreferenceScreen
                     android:title="@string/quick_settings_title"
                     android:summary="@string/quick_settings_summary" >
diff --git a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
index fffa58a..c94238e 100644
--- a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
@@ -22,10 +22,14 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.content.res.Resources;
 import android.net.TrafficStats;
 import android.os.Bundle;
 import android.os.RemoteException;
+import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceGroup;
@@ -53,6 +57,12 @@
     private static final String TAG = "BarsSettings";
 
     private static final String NETWORK_TRAFFIC_ROOT = "category_network_traffic";
+    private static final String CUSTOM_HEADER_IMAGE = "status_bar_custom_header";
+    private static final String DAYLIGHT_HEADER_PACK = "daylight_header_pack";
+    private static final String DEFAULT_HEADER_PACKAGE = "com.android.systemui";
+
+    private ListPreference mDaylightHeaderPack;
+    private CheckBoxPreference mCustomHeaderImage;
 
     @Override
     protected int getMetricsCategory() {
@@ -71,19 +81,96 @@
                 TrafficStats.getTotalRxBytes() == TrafficStats.UNSUPPORTED) {
             prefScreen.removePreference(findPreference(NETWORK_TRAFFIC_ROOT));
         }
+
+        final boolean customHeaderImage = Settings.System.getInt(getContentResolver(),
+                Settings.System.STATUS_BAR_CUSTOM_HEADER, 0) == 1;
+        mCustomHeaderImage = (CheckBoxPreference) findPreference(CUSTOM_HEADER_IMAGE);
+        mCustomHeaderImage.setChecked(customHeaderImage);
+
+        String settingHeaderPackage = Settings.System.getString(getContentResolver(),
+                Settings.System.STATUS_BAR_DAYLIGHT_HEADER_PACK);
+        if (settingHeaderPackage == null) {
+            settingHeaderPackage = DEFAULT_HEADER_PACKAGE;
+        }
+        mDaylightHeaderPack = (ListPreference) findPreference(DAYLIGHT_HEADER_PACK);
+        mDaylightHeaderPack.setEntries(getAvailableHeaderPacksEntries());
+        mDaylightHeaderPack.setEntryValues(getAvailableHeaderPacksValues());
+
+        int valueIndex = mDaylightHeaderPack.findIndexOfValue(settingHeaderPackage);
+        if (valueIndex == -1) {
+            // no longer found
+            settingHeaderPackage = DEFAULT_HEADER_PACKAGE;
+            Settings.System.putString(getContentResolver(),
+                    Settings.System.STATUS_BAR_DAYLIGHT_HEADER_PACK, settingHeaderPackage);
+            valueIndex = mDaylightHeaderPack.findIndexOfValue(settingHeaderPackage);
+        }
+        mDaylightHeaderPack.setValueIndex(valueIndex >= 0 ? valueIndex : 0);
+        mDaylightHeaderPack.setSummary(mDaylightHeaderPack.getEntry());
+        mDaylightHeaderPack.setOnPreferenceChangeListener(this);
+        mDaylightHeaderPack.setEnabled(customHeaderImage);
     }
 
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        if (preference == mCustomHeaderImage) {
+            final boolean value = ((CheckBoxPreference)preference).isChecked();
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.STATUS_BAR_CUSTOM_HEADER, value ? 1 : 0);
+            mDaylightHeaderPack.setEnabled(value);
+            return true;
+        }
         // If we didn't handle it, let preferences handle it.
         return super.onPreferenceTreeClick(preferenceScreen, preference);
     }
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
+        if (preference == mDaylightHeaderPack) {
+            String value = (String) newValue;
+            Settings.System.putString(getContentResolver(),
+                    Settings.System.STATUS_BAR_DAYLIGHT_HEADER_PACK, value);
+            int valueIndex = mDaylightHeaderPack.findIndexOfValue(value);
+            mDaylightHeaderPack.setSummary(mDaylightHeaderPack.getEntries()[valueIndex]);
+        }
         return true;
     }
 
+    private String[] getAvailableHeaderPacksValues() {
+        List<String> headerPacks = new ArrayList<String>();
+        Intent i = new Intent();
+        PackageManager packageManager = getPackageManager();
+        i.setAction("org.omnirom.DaylightHeaderPack");
+        for (ResolveInfo r : packageManager.queryIntentActivities(i, 0)) {
+            String packageName = r.activityInfo.packageName;
+            if (packageName.equals(DEFAULT_HEADER_PACKAGE)) {
+                headerPacks.add(0, packageName);
+            } else {
+                headerPacks.add(packageName);
+            }
+        }
+        return headerPacks.toArray(new String[headerPacks.size()]);
+    }
+
+    private String[] getAvailableHeaderPacksEntries() {
+        List<String> headerPacks = new ArrayList<String>();
+        Intent i = new Intent();
+        PackageManager packageManager = getPackageManager();
+        i.setAction("org.omnirom.DaylightHeaderPack");
+        for (ResolveInfo r : packageManager.queryIntentActivities(i, 0)) {
+            String packageName = r.activityInfo.packageName;
+            String label = r.activityInfo.loadLabel(getPackageManager()).toString();
+            if (label == null) {
+                label = r.activityInfo.packageName;
+            }
+            if (packageName.equals(DEFAULT_HEADER_PACKAGE)) {
+                headerPacks.add(0, label);
+            } else {
+                headerPacks.add(label);
+            }
+        }
+        return headerPacks.toArray(new String[headerPacks.size()]);
+    }
+
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
                 @Override