diff --git a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/AppShortcutIconGenerator.java b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/AppShortcutIconGenerator.java index 4a6d3ab0..6984edf7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/AppShortcutIconGenerator.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appshortcuts/AppShortcutIconGenerator.java @@ -12,6 +12,7 @@ import android.util.TypedValue; import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.Util; /** @@ -21,6 +22,22 @@ import com.kabouzeid.gramophone.util.Util; @RequiresApi(Build.VERSION_CODES.N_MR1) public final class AppShortcutIconGenerator { public static Icon generateThemedIcon(Context context, int iconId) { + if (PreferenceUtil.getInstance(context).coloredAppShortcuts()){ + return generateUserThemedIcon(context, iconId); + } else { + return generateDefaultThemedIcon(context, iconId); + } + } + + private static Icon generateDefaultThemedIcon(Context context, int iconId) { + //Return an Icon of iconId with default colors + return generateThemedIcon(context, iconId, + context.getColor(R.color.app_shortcut_default_foreground), + context.getColor(R.color.app_shortcut_default_background) + ); + } + + private static Icon generateUserThemedIcon(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); @@ -32,7 +49,7 @@ public final class AppShortcutIconGenerator { ); } - public static Icon generateThemedIcon(Context context, int iconId, int foregroundColor, int backgroundColor) { + private 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); 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 1fc3f83a..58725a0d 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 @@ -248,6 +248,28 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia }); } + TwoStatePreference colorAppShortcuts = (TwoStatePreference) findPreference("should_color_app_shortcuts"); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) { + colorAppShortcuts.setEnabled(false); + colorAppShortcuts.setSummary(R.string.pref_only_nougat_mr1); + } else { + colorAppShortcuts.setChecked(PreferenceUtil.getInstance(getActivity()).coloredAppShortcuts()); + colorAppShortcuts.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + //Save preference + PreferenceUtil.getInstance(getActivity()).setColoredAppShortcuts((Boolean)newValue); + + //Update app shortcuts + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + new DynamicShortcutManager(getActivity()).updateDynamicShortcuts(); + } + + return true; + } + }); + } + Preference equalizer = findPreference("equalizer"); if (!hasEqualizer()) { equalizer.setEnabled(false); diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java index bd8168ff..63deb986 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java @@ -44,6 +44,7 @@ public final class PreferenceUtil { public static final String FORCE_SQUARE_ALBUM_COVER = "force_square_album_art"; public static final String COLORED_NOTIFICATION = "colored_notification"; + public static final String COLORED_APP_SHORTCUTS = "colored_app_shortcuts"; public static final String AUDIO_DUCKING = "audio_ducking"; public static final String GAPLESS_PLAYBACK = "gapless_playback"; @@ -148,6 +149,16 @@ public final class PreferenceUtil { return mPreferences.getBoolean(COLORED_NOTIFICATION, true); } + public void setColoredAppShortcuts(final boolean value) { + final SharedPreferences.Editor editor = mPreferences.edit(); + editor.putBoolean(COLORED_APP_SHORTCUTS, value); + editor.apply(); + } + + public final boolean coloredAppShortcuts() { + return mPreferences.getBoolean(COLORED_APP_SHORTCUTS, true); + } + public final boolean gaplessPlayback() { return mPreferences.getBoolean(GAPLESS_PLAYBACK, false); } diff --git a/app/src/main/res/drawable/ic_app_shortcut_background.xml b/app/src/main/res/drawable/ic_app_shortcut_background.xml index a70803c2..914648b4 100644 --- a/app/src/main/res/drawable/ic_app_shortcut_background.xml +++ b/app/src/main/res/drawable/ic_app_shortcut_background.xml @@ -12,7 +12,7 @@ android:scaleY="0.916"> 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 4170be5a..b80363f4 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 @@ -14,7 +14,7 @@ android:translateY="-8"> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_app_shortcut_shuffle_all.xml b/app/src/main/res/drawable/ic_app_shortcut_shuffle_all.xml index f229db9e..33fccfc9 100644 --- a/app/src/main/res/drawable/ic_app_shortcut_shuffle_all.xml +++ b/app/src/main/res/drawable/ic_app_shortcut_shuffle_all.xml @@ -14,7 +14,7 @@ android:translateY="-8"> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_app_shortcut_top_tracks.xml b/app/src/main/res/drawable/ic_app_shortcut_top_tracks.xml index 889e90b4..02fa94e2 100644 --- a/app/src/main/res/drawable/ic_app_shortcut_top_tracks.xml +++ b/app/src/main/res/drawable/ic_app_shortcut_top_tracks.xml @@ -14,7 +14,7 @@ android:translateY="-8"> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a422df29..bf20dbcd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,4 +1,7 @@ #34000000 + + #607d8b + #f5f5f5 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e0d40984..f25d3c27 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -119,6 +119,7 @@ Images Lockscreen Colored navigation bar + Colored app shortcuts Start page Show album cover Auto download artist images @@ -158,6 +159,7 @@ Playlist name Song "Only available on Lollipop." + "Only available on Nougat 7.1." Uses the current songs album cover as lockscreen wallpaper. Blurs the album cover on the lockscreen. Can cause problems with third party apps and widgets. "Colors the notification in the album cover\u2019s vibrant color." @@ -171,6 +173,7 @@ Can increase the album cover quality but causes slower image loading times. Only enable this if you have problems with low resolution artworks. Colors play/pause, shuffle and repeat as well as the progress slider in the album cover\u2019s vibrant color. Colors the navigation bar in the primary color. + Colors the app shortcuts in the primary color. Notifications, navigation etc. "Couldn\u2019t download a matching album cover." Search your library… diff --git a/app/src/main/res/xml/pref_colors.xml b/app/src/main/res/xml/pref_colors.xml index d172658f..4ec32d77 100644 --- a/app/src/main/res/xml/pref_colors.xml +++ b/app/src/main/res/xml/pref_colors.xml @@ -27,6 +27,12 @@ android:summary="@string/pref_summary_colored_navigation_bar" android:title="@string/pref_title_navigation_bar" /> + +