[2/2] OmniGears: add back qs header images
Change-Id: Ib474f6ee53f5f2601b882af74771dc00f57b2f0e
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index bf09749..105b4e2 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -251,8 +251,7 @@
<string name="lockscreen_category_title">Lock screen</string>
<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="status_bar_custom_header_title">Enable</string>
<string name="daylight_header_pack_title">Header image pack</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>
@@ -263,13 +262,15 @@
<string name="daylight_header_provider_title">Dynamic</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">Long press on any image to use for static mode</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_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>
+
<!-- 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 09a8a1b..94c25df 100644
--- a/res/xml/style_settings.xml
+++ b/res/xml/style_settings.xml
@@ -31,6 +31,53 @@
android:targetClass="org.omnirom.omnistyle.BrowseWallsActivity" />
</Preference>
</PreferenceCategory>
+
+ <PreferenceCategory
+ android:key="category_custom_header"
+ android:title="@string/custom_header_title">
+
+ <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
+ android:key="status_bar_custom_header"
+ android:title="@string/status_bar_custom_header_title"
+ android:defaultValue="false" />
+
+ <ListPreference
+ android:key="custom_header_provider"
+ android:title="@string/custom_header_provider_title"
+ android:persistent="false"
+ android:entries="@array/custom_header_provider_entries"
+ android:entryValues="@array/custom_header_provider_values"
+ android:dependency="status_bar_custom_header" />
+
+ <ListPreference
+ android:key="daylight_header_pack"
+ android:title="@string/daylight_header_pack_title"
+ android:persistent="false"
+ android:dependency="status_bar_custom_header" />
+
+ <Preference
+ android:key="custom_header_browse"
+ android:title="@string/custom_header_browse_title"
+ android:summary="@string/custom_header_browse_summary"
+ android:persistent="false"
+ android:dependency="status_bar_custom_header" >
+ <intent android:action="android.intent.action.MAIN"
+ android:targetPackage="org.omnirom.omnistyle"
+ android:targetClass="org.omnirom.omnistyle.PickHeaderActivity" />
+ </Preference>
+
+ <org.omnirom.omnigears.preference.SeekBarPreference
+ android:key="status_bar_custom_header_shadow"
+ android:title="@string/status_bar_custom_header_shadow_title"
+ android:summary="@string/status_bar_custom_header_shadow_summary"
+ android:max="100"
+ settings:min="0"
+ settings:unitsLeft=""
+ settings:unitsRight="@string/unit_percent"
+ android:persistent="false"
+ android:dependency="status_bar_custom_header" />
+
+ </PreferenceCategory>
<PreferenceCategory
android:key="category_statusbar"
diff --git a/src/org/omnirom/omnigears/PackageUtils.java b/src/org/omnirom/omnigears/PackageUtils.java
deleted file mode 100644
index 5f7c25f..0000000
--- a/src/org/omnirom/omnigears/PackageUtils.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-* Copyright (C) 2014 The OmniROM Project
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.omnirom.omnigears;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-
-public class PackageUtils {
-
- public static boolean isAppInstalled(Context context, String appUri) {
- try {
- PackageManager pm = context.getPackageManager();
- pm.getPackageInfo(appUri, PackageManager.GET_ACTIVITIES);
- return true;
- } catch (Exception e) {
- return false;
- }
- }
-
- public static boolean isAvailableApp(String packageName, Context context) {
- Context mContext = context;
- final PackageManager pm = mContext.getPackageManager();
- try {
- pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
- int enabled = pm.getApplicationEnabledSetting(packageName);
- return enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED &&
- enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
- } catch (NameNotFoundException e) {
- return false;
- }
- }
-}
diff --git a/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java b/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java
index 46d038b..9876b0a 100644
--- a/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java
@@ -20,9 +20,11 @@
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
+import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
@@ -30,6 +32,7 @@
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.util.omni.PackageUtils;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.R;
@@ -38,17 +41,34 @@
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
-import java.util.List;
-import java.util.ArrayList;
+import org.omnirom.omnigears.preference.SystemSettingSwitchPreference;
+import org.omnirom.omnigears.preference.SeekBarPreference;
-import org.omnirom.omnigears.PackageUtils;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public class StyleSettings extends SettingsPreferenceFragment implements
Preference.OnPreferenceChangeListener, Indexable {
private static final String TAG = "StyleSettings";
private static final String CUSTOM_WALL_BROWSE = "custom_wall_browse";
-
+ private static final String CUSTOM_HEADER_BROWSE = "custom_header_browse";
+ 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 CUSTOM_HEADER_IMAGE_SHADOW = "status_bar_custom_header_shadow";
+ private static final String CUSTOM_HEADER_PROVIDER = "custom_header_provider";
+ private static final String STATUS_BAR_CUSTOM_HEADER = "status_bar_custom_header";
+ private static final String CUSTOM_HEADER_ENABLED = "status_bar_custom_header";
+
private Preference mWallBrowse;
+ private Preference mHeaderBrowse;
+ private ListPreference mDaylightHeaderPack;
+ private SeekBarPreference mHeaderShadow;
+ private ListPreference mHeaderProvider;
+ private String mDaylightHeaderProvider;
+ private SystemSettingSwitchPreference mHeaderEnabled;
@Override
public int getMetricsCategory() {
@@ -62,6 +82,61 @@
mWallBrowse = findPreference(CUSTOM_WALL_BROWSE);
mWallBrowse.setEnabled(isBrowseWallsAvailable());
+
+ mHeaderBrowse = findPreference(CUSTOM_HEADER_BROWSE);
+ mHeaderBrowse.setEnabled(isBrowseHeaderAvailable());
+
+ mHeaderEnabled = (SystemSettingSwitchPreference) findPreference(CUSTOM_HEADER_ENABLED);
+ mHeaderEnabled.setOnPreferenceChangeListener(this);
+
+ mDaylightHeaderPack = (ListPreference) findPreference(DAYLIGHT_HEADER_PACK);
+
+ List<String> entries = new ArrayList<String>();
+ List<String> values = new ArrayList<String>();
+ getAvailableHeaderPacks(entries, values);
+ mDaylightHeaderPack.setEntries(entries.toArray(new String[entries.size()]));
+ mDaylightHeaderPack.setEntryValues(values.toArray(new String[values.size()]));
+
+ boolean headerEnabled = Settings.System.getInt(getContentResolver(),
+ Settings.System.STATUS_BAR_CUSTOM_HEADER, 0) != 0;
+ updateHeaderProviderSummary(headerEnabled);
+ mDaylightHeaderPack.setOnPreferenceChangeListener(this);
+
+ mHeaderShadow = (SeekBarPreference) findPreference(CUSTOM_HEADER_IMAGE_SHADOW);
+ final int headerShadow = Settings.System.getInt(getContentResolver(),
+ Settings.System.STATUS_BAR_CUSTOM_HEADER_SHADOW, 0);
+ mHeaderShadow.setValue((int)(((double) headerShadow / 255) * 100));
+ mHeaderShadow.setOnPreferenceChangeListener(this);
+
+ mDaylightHeaderProvider = getResources().getString(R.string.daylight_header_provider);
+ String providerName = Settings.System.getString(getContentResolver(),
+ Settings.System.STATUS_BAR_CUSTOM_HEADER_PROVIDER);
+ if (providerName == null) {
+ providerName = mDaylightHeaderProvider;
+ }
+ mHeaderProvider = (ListPreference) findPreference(CUSTOM_HEADER_PROVIDER);
+ int valueIndex = mHeaderProvider.findIndexOfValue(providerName);
+ mHeaderProvider.setValueIndex(valueIndex >= 0 ? valueIndex : 0);
+ mHeaderProvider.setSummary(mHeaderProvider.getEntry());
+ mHeaderProvider.setOnPreferenceChangeListener(this);
+ mDaylightHeaderPack.setEnabled(providerName.equals(mDaylightHeaderProvider));
+ }
+
+ private void updateHeaderProviderSummary(boolean headerEnabled) {
+ mDaylightHeaderPack.setSummary(getResources().getString(R.string.header_provider_disabled));
+ if (headerEnabled) {
+ String settingHeaderPackage = Settings.System.getString(getContentResolver(),
+ Settings.System.STATUS_BAR_DAYLIGHT_HEADER_PACK);
+ int valueIndex = mDaylightHeaderPack.findIndexOfValue(settingHeaderPackage);
+ if (valueIndex == -1) {
+ // no longer found
+ Settings.System.putInt(getContentResolver(),
+ Settings.System.STATUS_BAR_CUSTOM_HEADER, 0);
+ } else {
+ mDaylightHeaderPack.setValueIndex(valueIndex >= 0 ? valueIndex : 0);
+ mDaylightHeaderPack.setSummary(mDaylightHeaderPack.getEntry());
+ }
+ }
}
@Override
@@ -71,6 +146,30 @@
@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]);
+ } else if (preference == mHeaderShadow) {
+ Integer headerShadow = (Integer) newValue;
+ int realHeaderValue = (int) (((double) headerShadow / 100) * 255);
+ Settings.System.putInt(getContentResolver(),
+ Settings.System.STATUS_BAR_CUSTOM_HEADER_SHADOW, realHeaderValue);
+ } else if (preference == mHeaderProvider) {
+ String value = (String) newValue;
+ Settings.System.putString(getContentResolver(),
+ Settings.System.STATUS_BAR_CUSTOM_HEADER_PROVIDER, value);
+ int valueIndex = mHeaderProvider.findIndexOfValue(value);
+ mHeaderProvider.setSummary(mHeaderProvider.getEntries()[valueIndex]);
+ mDaylightHeaderPack.setEnabled(value.equals(mDaylightHeaderProvider));
+ 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);
+ } else if (preference == mHeaderEnabled) {
+ Boolean headerEnabled = (Boolean) newValue;
+ updateHeaderProviderSummary(headerEnabled);
+ }
return true;
}
@@ -81,6 +180,47 @@
return pm.resolveActivity(browse, 0) != null;
}
+ private boolean isBrowseHeaderAvailable() {
+ PackageManager pm = getPackageManager();
+ Intent browse = new Intent();
+ browse.setClassName("org.omnirom.omnistyle", "org.omnirom.omnistyle.PickHeaderActivity");
+ return pm.resolveActivity(browse, 0) != null;
+ }
+
+ private void getAvailableHeaderPacks(List<String> entries, List<String> values) {
+ Map<String, String> headerMap = new HashMap<String, 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;
+ }
+ headerMap.put(label, packageName);
+ }
+ i.setAction("org.omnirom.DaylightHeaderPack1");
+ for (ResolveInfo r : packageManager.queryIntentActivities(i, 0)) {
+ String packageName = r.activityInfo.packageName;
+ String label = r.activityInfo.loadLabel(getPackageManager()).toString();
+ if (r.activityInfo.name.endsWith(".theme")) {
+ continue;
+ }
+ if (label == null) {
+ label = packageName;
+ }
+ headerMap.put(label, packageName + "/" + r.activityInfo.name);
+ }
+ List<String> labelList = new ArrayList<String>();
+ labelList.addAll(headerMap.keySet());
+ Collections.sort(labelList);
+ for (String label : labelList) {
+ entries.add(label);
+ values.add(headerMap.get(label));
+ }
+ }
+
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override