[2/2] OmniGears: custom header image provider

reads image uri and saves it in the file custom_file_header_image
in /data/user_de/0/com.android.systemui/files/file_header_image
must be copied else loading on reboot will fail cause storage
may not be mounted

Change-Id: I1304f686102924275fa6ecdbc369e55df82987c3
diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index a3c062b..3601e49 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -285,11 +285,13 @@
     <string-array name="custom_header_provider_entries" translatable="false">
         <item>@string/daylight_header_provider_title</item>
         <item>@string/static_header_provider_title</item>
+        <item>@string/file_header_provider_title</item>
     </string-array>
 
     <string-array name="custom_header_provider_values" translatable="false">
         <item>@string/daylight_header_provider</item>
         <item>@string/static_header_provider</item>
+        <item>@string/file_header_provider</item>
     </string-array>
 
     <!-- Possible values for user theme in Display Settings.
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index d45aac5..133f03d 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -253,25 +253,29 @@
 
     <string name="notification_title">Notification panel</string>
     <string name="status_bar_custom_header_title">Enable</string>
-    <string name="daylight_header_pack_title">Header image pack</string>
+    <string name="daylight_header_pack_title">Header image collection</string>
     <string name="status_bar_custom_header_shadow_title">Header image shadow</string>
     <string name="status_bar_custom_header_shadow_summary">For better visibility on bright images</string>
     <string name="unit_percent">\u0025</string>
     <string name="static_header_provider" translatable="false">static</string>
     <string name="daylight_header_provider" translatable="false">daylight</string>
-    <string name="static_header_provider_title">Static</string>
-    <string name="daylight_header_provider_title">Dynamic</string>
+    <string name="static_header_provider_title">Static image</string>
+    <string name="daylight_header_provider_title">Image collection</string>
     <string name="custom_header_provider_title">Header provider</string>
     <string name="custom_header_browse_title">Browse installed headers</string>
     <string name="custom_header_browse_summary">Click on any image to use for static mode</string>
-    <string name="custom_header_browse_summary_new">Browse all available header packages</string>
+    <string name="custom_header_browse_summary_new">Browse all available header collections</string>
     <string name="custom_header_pick_title">Select header image</string>
     <string name="custom_header_pick_summary">Select an image to use for static mode</string>
     <string name="style_enabled_summary">Custom header image is ON</string>
     <string name="style_disabled_summary">Custom header image is OFF</string>
     <string name="header_provider_disabled">Disabled</string>
     <string name="custom_header_title">Custom header image</string>
-    
+    <string name="file_header_select_title">Select image</string>
+    <string name="file_header_select_summary">Select custom image</string>
+    <string name="file_header_provider_title">Custom image</string>
+    <string name="file_header_provider" translatable="false">file</string>
+
     <!-- Network traffic -->
     <string name="network_traffic_title">Network traffic</string>
     <string name="network_traffic_summary">Status bar traffic monitor</string>
diff --git a/res/xml/style_settings.xml b/res/xml/style_settings.xml
index af018ae..06b8cd7 100644
--- a/res/xml/style_settings.xml
+++ b/res/xml/style_settings.xml
@@ -74,6 +74,14 @@
                     android:targetClass="org.omnirom.omnistyle.PickHeaderActivity" />
         </Preference>
 
+        <Preference
+            android:key="file_header_select"
+            android:title="@string/file_header_select_title"
+            android:summary="@string/file_header_select_summary"
+            android:persistent="false"
+            android:dependency="status_bar_custom_header" >
+        </Preference>
+
         <org.omnirom.omnigears.preference.SeekBarPreference
             android:key="status_bar_custom_header_shadow"
             android:title="@string/status_bar_custom_header_shadow_title"
diff --git a/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java b/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java
index 980a16a..d1ceb1a 100644
--- a/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java
@@ -17,6 +17,7 @@
 */
 package org.omnirom.omnigears.interfacesettings;
 
+import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -62,6 +63,9 @@
     private static final String STATUS_BAR_CUSTOM_HEADER = "status_bar_custom_header";
     private static final String CUSTOM_HEADER_ENABLED = "status_bar_custom_header";
     private static final String SYSTEMUI_THEME_STYLE = "systemui_theme_style";
+    private static final String FILE_HEADER_SELECT = "file_header_select";
+
+    private static final int REQUEST_PICK_IMAGE = 0;
 
     private Preference mWallBrowse;
     private Preference mHeaderBrowse;
@@ -71,6 +75,8 @@
     private String mDaylightHeaderProvider;
     private SystemSettingSwitchPreference mHeaderEnabled;
     private ListPreference mSystemUIThemeStyle;
+    private Preference mFileHeader;
+    private String mFileHeaderProvider;
 
     @Override
     public int getMetricsCategory() {
@@ -86,7 +92,6 @@
         mWallBrowse.setEnabled(isBrowseWallsAvailable());
 
         mHeaderBrowse = findPreference(CUSTOM_HEADER_BROWSE);
-        mHeaderBrowse.setEnabled(isBrowseHeaderAvailable());
 
         mHeaderEnabled = (SystemSettingSwitchPreference) findPreference(CUSTOM_HEADER_ENABLED);
         mHeaderEnabled.setOnPreferenceChangeListener(this);
@@ -111,11 +116,14 @@
         mHeaderShadow.setOnPreferenceChangeListener(this);
 
         mDaylightHeaderProvider = getResources().getString(R.string.daylight_header_provider);
+        mFileHeaderProvider = getResources().getString(R.string.file_header_provider);
         String providerName = Settings.System.getString(getContentResolver(),
                 Settings.System.STATUS_BAR_CUSTOM_HEADER_PROVIDER);
         if (providerName == null) {
             providerName = mDaylightHeaderProvider;
         }
+        mHeaderBrowse.setEnabled(isBrowseHeaderAvailable() && !providerName.equals(mFileHeaderProvider));
+
         mHeaderProvider = (ListPreference) findPreference(CUSTOM_HEADER_PROVIDER);
         int valueIndex = mHeaderProvider.findIndexOfValue(providerName);
         mHeaderProvider.setValueIndex(valueIndex >= 0 ? valueIndex : 0);
@@ -130,6 +138,9 @@
         mSystemUIThemeStyle.setValueIndex(valueIndex >= 0 ? valueIndex : 0);
         mSystemUIThemeStyle.setSummary(mSystemUIThemeStyle.getEntry());
         mSystemUIThemeStyle.setOnPreferenceChangeListener(this);
+
+        mFileHeader = findPreference(FILE_HEADER_SELECT);
+        mFileHeader.setEnabled(providerName.equals(mFileHeaderProvider));
     }
 
     private void updateHeaderProviderSummary(boolean headerEnabled) {
@@ -151,6 +162,12 @@
 
     @Override
     public boolean onPreferenceTreeClick(Preference preference) {
+        if (preference == mFileHeader) {
+            Intent intent = new Intent(Intent.ACTION_PICK);
+            intent.setType("image/*");
+            startActivityForResult(intent, REQUEST_PICK_IMAGE);
+            return true;
+        }
         return super.onPreferenceTreeClick(preference);
     }
 
@@ -174,8 +191,10 @@
             int valueIndex = mHeaderProvider.findIndexOfValue(value);
             mHeaderProvider.setSummary(mHeaderProvider.getEntries()[valueIndex]);
             mDaylightHeaderPack.setEnabled(value.equals(mDaylightHeaderProvider));
+            mHeaderBrowse.setEnabled(!value.equals(mFileHeaderProvider));
             mHeaderBrowse.setTitle(valueIndex == 0 ? R.string.custom_header_browse_title : R.string.custom_header_pick_title);
             mHeaderBrowse.setSummary(valueIndex == 0 ? R.string.custom_header_browse_summary_new : R.string.custom_header_pick_summary);
+            mFileHeader.setEnabled(value.equals(mFileHeaderProvider));
         } else if (preference == mHeaderEnabled) {
             Boolean headerEnabled = (Boolean) newValue;
             updateHeaderProviderSummary(headerEnabled);
@@ -236,6 +255,17 @@
         }
     }
 
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent result) {
+        if (requestCode == REQUEST_PICK_IMAGE) {
+            if (resultCode != Activity.RESULT_OK) {
+                return;
+            }
+            final Uri imageUri = result.getData();
+            Settings.System.putString(getContentResolver(), Settings.System.STATUS_BAR_FILE_HEADER_IMAGE, imageUri.toString());
+        }
+    }
+
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
                 @Override