[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