diff --git a/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt b/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt index 5b507cb6f..2d55545c0 100644 --- a/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt +++ b/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt @@ -8,6 +8,7 @@ import android.content.Intent import android.os.Bundle import android.os.Parcelable import android.view.LayoutInflater +import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.recyclerview.widget.RecyclerView import butterknife.BindView @@ -90,11 +91,15 @@ class ColorPalettePicker : InjectingDialogFragment() { ButterKnife.bind(this, view) palette = arguments!!.getSerializable(EXTRA_PALETTE) as ColorPickerAdapter.Palette colors = when (palette) { - ColorPickerAdapter.Palette.COLORS -> themeCache.colors + ColorPickerAdapter.Palette.COLORS -> ThemeColor.COLORS.mapIndexed { index, color -> + ThemeColor(context, index, ContextCompat.getColor(context!!, color)) + } ColorPickerAdapter.Palette.ACCENTS -> ThemeAccent.ACCENTS.mapIndexed { index, _ -> ThemeAccent(context, index) } - ColorPickerAdapter.Palette.LAUNCHERS -> themeCache.colors.dropLast(1) + ColorPickerAdapter.Palette.LAUNCHERS -> ThemeColor.LAUNCHER_COLORS.mapIndexed { index, color -> + ThemeColor(context, index, ContextCompat.getColor(context!!, color)) + } ColorPickerAdapter.Palette.WIDGET_BACKGROUND -> themeCache.widgetThemes } diff --git a/app/src/main/java/org/tasks/themes/ThemeCache.java b/app/src/main/java/org/tasks/themes/ThemeCache.java index 78c975ab4..a737f3ae9 100644 --- a/app/src/main/java/org/tasks/themes/ThemeCache.java +++ b/app/src/main/java/org/tasks/themes/ThemeCache.java @@ -24,16 +24,17 @@ public class ThemeCache { public static final String EXTRA_THEME_OVERRIDE = "extra_theme_override"; private final List themes = new ArrayList<>(); - private final List colors = new ArrayList<>(); private final List widgetThemes = new ArrayList<>(); private final ThemeColor untaggedColor; private final Preferences preferences; private final Inventory inventory; + private final Context context; @Inject public ThemeCache(Preferences preferences, Inventory inventory, @ForApplication Context context) { this.preferences = preferences; this.inventory = inventory; + this.context = context; Resources resources = context.getResources(); themes.add( @@ -72,11 +73,6 @@ public class ThemeCache { 5, getColor(context, android.R.color.white), AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)); - - for (int i = 0; i < ThemeColor.COLORS.length; i++) { - colors.add( - new ThemeColor(context, i, ContextCompat.getColor(context, ThemeColor.COLORS[i]))); - } String[] widgetBackgroundNames = resources.getStringArray(R.array.widget_background); for (int i = 0; i < WidgetTheme.BACKGROUNDS.length; i++) { widgetThemes.add( @@ -114,17 +110,14 @@ public class ThemeCache { } public ThemeColor getThemeColor(int index) { - return colors.get(index); + return new ThemeColor( + context, index, ContextCompat.getColor(context, ThemeColor.COLORS[index])); } public ThemeColor getUntaggedColor() { return untaggedColor; } - public List getColors() { - return copyOf(colors); - } - public List getWidgetThemes() { return copyOf(widgetThemes); } diff --git a/app/src/main/java/org/tasks/themes/ThemeColor.java b/app/src/main/java/org/tasks/themes/ThemeColor.java index d4ca90fd5..d1e2a6bca 100644 --- a/app/src/main/java/org/tasks/themes/ThemeColor.java +++ b/app/src/main/java/org/tasks/themes/ThemeColor.java @@ -78,6 +78,31 @@ public class ThemeColor implements Pickable { }; public static final int[] COLORS = + new int[] { + R.color.theme_blue_grey, + R.color.theme_dark_grey, + R.color.theme_red, + R.color.theme_pink, + R.color.theme_purple, + R.color.theme_deep_purple, + R.color.theme_indigo, + R.color.theme_blue, + R.color.theme_light_blue, + R.color.theme_cyan, + R.color.theme_teal, + R.color.theme_green, + R.color.theme_light_green, + R.color.theme_lime, + R.color.theme_yellow, + R.color.theme_amber, + R.color.theme_orange, + R.color.theme_deep_orange, + R.color.theme_brown, + R.color.theme_grey, + R.color.theme_day_night + }; + + public static final int[] LAUNCHER_COLORS = new int[] { R.color.blue_grey_500, R.color.grey_900, @@ -98,8 +123,7 @@ public class ThemeColor implements Pickable { R.color.orange_500, R.color.deep_orange_500, R.color.brown_500, - R.color.grey_500, - R.color.white_100 + R.color.grey_500 }; public static final Parcelable.Creator CREATOR = @@ -120,23 +144,11 @@ public class ThemeColor implements Pickable { private final int colorPrimaryVariant; private final boolean isDark; - public static ThemeColor newThemeColor(Context context, int color) { - try { - return new ThemeColor(context, color); - } catch (Exception e) { - Timber.e(e); - return new ThemeColor(context, 0); - } - } - public ThemeColor(Context context, int color) { this(context, -1, color == 0 ? ContextCompat.getColor(context, R.color.blue_500) : color); } - public ThemeColor( - Context context, - int index, - int colorPrimary) { + public ThemeColor(Context context, int index, int colorPrimary) { this.index = index; colorPrimary |= 0xFF000000; // remove alpha this.colorPrimary = colorPrimary; @@ -156,6 +168,40 @@ public class ThemeColor implements Pickable { isDark = source.readInt() == 1; } + public static ThemeColor newThemeColor(Context context, int color) { + try { + return new ThemeColor(context, color); + } catch (Exception e) { + Timber.e(e); + return new ThemeColor(context, 0); + } + } + + private static void colorMenu(Menu menu, int color) { + for (int i = 0, size = menu.size(); i < size; i++) { + final MenuItem menuItem = menu.getItem(i); + colorMenuItem(menuItem, color); + if (menuItem.hasSubMenu()) { + final SubMenu subMenu = menuItem.getSubMenu(); + for (int j = 0; j < subMenu.size(); j++) { + colorMenuItem(subMenu.getItem(j), color); + } + } + } + } + + private static void colorMenuItem(final MenuItem menuItem, final int color) { + colorDrawable(menuItem.getIcon(), color); + } + + private static Drawable colorDrawable(Drawable drawable, int color) { + if (drawable != null) { + drawable.mutate(); + drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN); + } + return drawable; + } + public void applyToSystemBars(Activity activity) { setStatusBarColor(activity); @@ -285,31 +331,6 @@ public class ThemeColor implements Pickable { colorMenu(menu, colorOnPrimary); } - private static void colorMenu(Menu menu, int color) { - for (int i = 0, size = menu.size(); i < size; i++) { - final MenuItem menuItem = menu.getItem(i); - colorMenuItem(menuItem, color); - if (menuItem.hasSubMenu()) { - final SubMenu subMenu = menuItem.getSubMenu(); - for (int j = 0; j < subMenu.size(); j++) { - colorMenuItem(subMenu.getItem(j), color); - } - } - } - } - - private static void colorMenuItem(final MenuItem menuItem, final int color) { - colorDrawable(menuItem.getIcon(), color); - } - - private static Drawable colorDrawable(Drawable drawable, int color) { - if (drawable != null) { - drawable.mutate(); - drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN); - } - return drawable; - } - @Override public boolean equals(Object o) { if (this == o) { diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 571b7e92c..a85135b8a 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -10,4 +10,26 @@ @color/white_60 @color/white_38 @color/overdue_87 + + @color/blue_grey_200 + @color/grey_900 + @color/red_200 + @color/pink_200 + @color/purple_200 + @color/deep_purple_200 + @color/indigo_200 + @color/blue_200 + @color/light_blue_200 + @color/cyan_200 + @color/teal_200 + @color/green_200 + @color/light_green_200 + @color/lime_200 + @color/yellow_200 + @color/amber_200 + @color/orange_200 + @color/deep_orange_200 + @color/brown_200 + @color/grey_200 + @color/black_100 \ 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 62e576827..43c70c670 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,80 +6,122 @@ --> + @color/blue_grey_500 + @color/grey_800 + @color/red_500 + @color/pink_500 + @color/purple_500 + @color/deep_purple_500 + @color/indigo_500 + @color/blue_500 + @color/light_blue_500 + @color/cyan_500 + @color/teal_500 + @color/green_500 + @color/light_green_500 + @color/lime_500 + @color/yellow_500 + @color/amber_500 + @color/orange_500 + @color/deep_orange_500 + @color/brown_500 + @color/grey_500 + @color/white_100 + + #EF9A9A #f44336 #ff1744 #FF8A80 + #F48FB1 #e91e63 #f50057 #FF80AB + #CE93D8 #9c27b0 #d500f9 #EA80FC + #B39DDB #673ab7 #651fff #B388FF + #9FA8DA #3f51b5 #3d5afe #8C9EFF + #90CAF9 #2196f3 #2979ff #82B1FF + #81D4FA #03a9f4 #00b0ff #80D8FF + #80DEEA #00bcd4 #00e5ff #84FFFF + #80CBC4 #009688 #1de9b6 #A7FFEB + #A5D6A7 #4caf50 #00e676 #B9F6CA + #C5E1A5 #8bc34a #76ff03 #CCFF90 + #E6EE9C #cddc39 #c6ff00 #F4FF81 + #FFF59D #ffeb3b #ffea00 #FFFF8D + #FFE082 #ffc107 #ffc400 #FFE57F + #FFCC80 #ff9800 #ff9100 #FFD180 + #FFAB91 #ff5722 #ff3d00 #FF9E80 + #BCAAA4 #795548 + #EEEEEE #9e9e9e #424242 #212121 #CFD8DC + #B0BEC5 #78909c #607d8b + #ff000000 #de000000 #8a000000 #61000000