From 49a3d0b28a94376bc76b6a95b46b78d7f46ebca3 Mon Sep 17 00:00:00 2001 From: Adrian Campos Date: Sat, 18 Mar 2017 17:47:11 -0700 Subject: [PATCH] Support theme colors in AppShortcut icons --- .../AppShortcutIconGenerator.java | 54 +++++++++++++++++++ .../appshortcuts/DynamicShortcutManager.java | 15 ++---- .../shortcuttype/LastAddedShortcutType.java | 4 +- .../shortcuttype/ShuffleAllShortcutType.java | 4 +- .../shortcuttype/TopTracksShortcutType.java | 4 +- .../ui/activities/MainActivity.java | 2 +- .../ui/activities/SettingsActivity.java | 12 +++++ .../drawable/ic_app_shortcut_background.xml | 18 +++++++ .../drawable/ic_app_shortcut_last_added.xml | 10 ---- .../drawable/ic_app_shortcut_shuffle_all.xml | 10 ---- .../drawable/ic_app_shortcut_top_tracks.xml | 10 ---- 11 files changed, 95 insertions(+), 48 deletions(-) create mode 100644 app/src/main/java/com/kabouzeid/gramophone/appshortcuts/AppShortcutIconGenerator.java create mode 100644 app/src/main/res/drawable/ic_app_shortcut_background.xml diff --git a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/AppShortcutIconGenerator.java b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/AppShortcutIconGenerator.java new file mode 100644 index 00000000..4a6d3ab0 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/AppShortcutIconGenerator.java @@ -0,0 +1,54 @@ +package com.kabouzeid.gramophone.appshortcuts; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; +import android.graphics.drawable.LayerDrawable; +import android.os.Build; +import android.support.annotation.RequiresApi; +import android.util.TypedValue; + +import com.kabouzeid.appthemehelper.ThemeStore; +import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.util.Util; + +/** + * @author Adrian Campos + */ + +@RequiresApi(Build.VERSION_CODES.N_MR1) +public final class AppShortcutIconGenerator { + public static Icon generateThemedIcon(Context context, int iconId) { + //Get background color from context's theme + final TypedValue typedColorBackground = new TypedValue(); + context.getTheme().resolveAttribute(android.R.attr.colorBackground, typedColorBackground, true); + + //Return an Icon of iconId with those colors + return generateThemedIcon(context, iconId, + ThemeStore.primaryColor(context), + typedColorBackground.data + ); + } + + public static Icon generateThemedIcon(Context context, int iconId, int foregroundColor, int backgroundColor) { + //Get and tint foreground and background drawables + Drawable vectorDrawable = Util.getTintedVectorDrawable(context, iconId, foregroundColor); + Drawable backgroundDrawable = Util.getTintedVectorDrawable(context, R.drawable.ic_app_shortcut_background, backgroundColor); + + //Squash the two drawables together + LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{backgroundDrawable, vectorDrawable}); + + //Return as an Icon + return Icon.createWithBitmap(drawableToBitmap(layerDrawable)); + } + + private static Bitmap drawableToBitmap(Drawable drawable) { + Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + return bitmap; + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/DynamicShortcutManager.java b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/DynamicShortcutManager.java index 7b174dba..64b9d3c4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/DynamicShortcutManager.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/DynamicShortcutManager.java @@ -47,6 +47,10 @@ public class DynamicShortcutManager { } } + public void updateDynamicShortcuts() { + shortcutManager.updateShortcuts(getDefaultShortcuts()); + } + public List getDefaultShortcuts() { return (Arrays.asList( new ShuffleAllShortcutType(mContext).getShortcutInfo(), @@ -54,15 +58,4 @@ public class DynamicShortcutManager { new LastAddedShortcutType(mContext).getShortcutInfo() )); } - - public void tintShortcutIcons(ArrayList shortcutInfos, Color color) { - for (ShortcutInfo shortcutInfo : shortcutInfos) { - tintShortcutIcon(shortcutInfo, color); - } - } - - public void tintShortcutIcon(ShortcutInfo shortcutInfo, Color color) { - //TODO Tint icons here - } - } diff --git a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/LastAddedShortcutType.java b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/LastAddedShortcutType.java index af638e68..fcb632c8 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/LastAddedShortcutType.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/LastAddedShortcutType.java @@ -3,9 +3,9 @@ package com.kabouzeid.gramophone.appshortcuts.shortcuttype; import android.annotation.TargetApi; import android.content.Context; import android.content.pm.ShortcutInfo; -import android.graphics.drawable.Icon; import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.appshortcuts.AppShortcutIconGenerator; import com.kabouzeid.gramophone.appshortcuts.AppShortcutLauncherActivity; /** @@ -22,7 +22,7 @@ public final class LastAddedShortcutType extends BaseShortcutType { return new ShortcutInfo.Builder(mContext, ID_PREFIX + "last_added") .setShortLabel(mContext.getString(R.string.app_shortcut_last_added_short)) .setLongLabel(mContext.getString(R.string.app_shortcut_last_added_long)) - .setIcon(Icon.createWithResource(mContext, R.drawable.ic_app_shortcut_last_added)) + .setIcon(AppShortcutIconGenerator.generateThemedIcon(mContext, R.drawable.ic_app_shortcut_last_added)) .setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.ShortcutType.LAST_ADDED)) .build(); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/ShuffleAllShortcutType.java b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/ShuffleAllShortcutType.java index 4b36de6b..868a0670 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/ShuffleAllShortcutType.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/ShuffleAllShortcutType.java @@ -3,9 +3,9 @@ package com.kabouzeid.gramophone.appshortcuts.shortcuttype; import android.annotation.TargetApi; import android.content.Context; import android.content.pm.ShortcutInfo; -import android.graphics.drawable.Icon; import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.appshortcuts.AppShortcutIconGenerator; import com.kabouzeid.gramophone.appshortcuts.AppShortcutLauncherActivity; /** @@ -22,7 +22,7 @@ public final class ShuffleAllShortcutType extends BaseShortcutType { return new ShortcutInfo.Builder(mContext, ID_PREFIX + "shuffle_all") .setShortLabel(mContext.getString(R.string.app_shortcut_shuffle_all_short)) .setLongLabel(mContext.getString(R.string.app_shortcut_shuffle_all_long)) - .setIcon(Icon.createWithResource(mContext, R.drawable.ic_app_shortcut_shuffle_all)) + .setIcon(AppShortcutIconGenerator.generateThemedIcon(mContext, R.drawable.ic_app_shortcut_shuffle_all)) .setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.ShortcutType.SHUFFLE_ALL)) .build(); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/TopTracksShortcutType.java b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/TopTracksShortcutType.java index 5a77768e..db3b114b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/TopTracksShortcutType.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/shortcuttype/TopTracksShortcutType.java @@ -3,9 +3,9 @@ package com.kabouzeid.gramophone.appshortcuts.shortcuttype; import android.annotation.TargetApi; import android.content.Context; import android.content.pm.ShortcutInfo; -import android.graphics.drawable.Icon; import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.appshortcuts.AppShortcutIconGenerator; import com.kabouzeid.gramophone.appshortcuts.AppShortcutLauncherActivity; /** @@ -22,7 +22,7 @@ public final class TopTracksShortcutType extends BaseShortcutType { return new ShortcutInfo.Builder(mContext, ID_PREFIX + "top_tracks") .setShortLabel(mContext.getString(R.string.app_shortcut_top_tracks_short)) .setLongLabel(mContext.getString(R.string.app_shortcut_top_tracks_long)) - .setIcon(Icon.createWithResource(mContext, R.drawable.ic_app_shortcut_top_tracks)) + .setIcon(AppShortcutIconGenerator.generateThemedIcon(mContext, R.drawable.ic_app_shortcut_top_tracks)) .setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.ShortcutType.TOP_TRACKS)) .build(); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index ae80b7c1..0aacf197 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -116,7 +116,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity { //Set up dynamic shortcuts if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { - new DynamicShortcutManager(getApplicationContext()).initDynamicShortcuts(); + new DynamicShortcutManager(this).initDynamicShortcuts(); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java index 858c28c8..1fc3f83a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java @@ -25,6 +25,7 @@ import com.kabouzeid.appthemehelper.common.prefs.supportv7.ATEColorPreference; import com.kabouzeid.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat; import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.appshortcuts.DynamicShortcutManager; import com.kabouzeid.gramophone.preferences.NowPlayingScreenPreference; import com.kabouzeid.gramophone.preferences.NowPlayingScreenPreferenceDialog; import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity; @@ -78,6 +79,10 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia .commit(); break; } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + new DynamicShortcutManager(this).updateDynamicShortcuts(); + } recreate(); } @@ -171,6 +176,13 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia ThemeStore.editTheme(getActivity()) .activityTheme(PreferenceUtil.getThemeResFromPrefValue((String) o)) .commit(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + //Set the new theme so that updateAppShortcuts can pull it + getActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue((String) o)); + new DynamicShortcutManager(getActivity()).updateDynamicShortcuts(); + } + getActivity().recreate(); return true; } diff --git a/app/src/main/res/drawable/ic_app_shortcut_background.xml b/app/src/main/res/drawable/ic_app_shortcut_background.xml new file mode 100644 index 00000000..a70803c2 --- /dev/null +++ b/app/src/main/res/drawable/ic_app_shortcut_background.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_app_shortcut_last_added.xml b/app/src/main/res/drawable/ic_app_shortcut_last_added.xml index 0ea8f9cc..4170be5a 100644 --- a/app/src/main/res/drawable/ic_app_shortcut_last_added.xml +++ b/app/src/main/res/drawable/ic_app_shortcut_last_added.xml @@ -5,16 +5,6 @@ android:viewportHeight="176" android:viewportWidth="176"> - - - - - - - - -