From b8d459d14297534165783787ff70676aea0e6086 Mon Sep 17 00:00:00 2001 From: Floens Date: Sat, 16 Jan 2016 23:56:16 +0100 Subject: [PATCH] Allow the FAB color to be changed --- .../chan/core/settings/ChanSettings.java | 20 +- .../controller/AlbumDownloadController.java | 2 + .../ui/controller/BoardEditController.java | 2 + .../chan/ui/controller/FiltersController.java | 1 + .../controller/ThemeSettingsController.java | 197 ++++++++++++------ .../floens/chan/ui/layout/ThreadLayout.java | 2 + .../java/org/floens/chan/ui/theme/Theme.java | 8 + .../org/floens/chan/ui/theme/ThemeHelper.java | 105 ++++++---- .../org/floens/chan/ui/view/FloatingMenu.java | 12 ++ .../src/main/res/layout/controller_theme.xml | 4 +- Clover/app/src/main/res/values/strings.xml | 3 +- Clover/app/src/main/res/values/styles.xml | 8 +- 12 files changed, 249 insertions(+), 115 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java index 391ea272..1b3d8d05 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java +++ b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java @@ -19,6 +19,7 @@ package org.floens.chan.core.settings; import android.content.SharedPreferences; import android.os.Environment; +import android.text.TextUtils; import org.floens.chan.Chan; import org.floens.chan.R; @@ -235,22 +236,25 @@ public class ChanSettings { String theme = themeRaw; String color = null; + String accentColor = null; String[] splitted = themeRaw.split(","); - if (splitted.length == 2) { + if (splitted.length >= 2) { theme = splitted[0]; color = splitted[1]; + if (splitted.length == 3) { + accentColor = splitted[2]; + } } - return new ThemeColor(theme, color); + return new ThemeColor(theme, color, accentColor); } public static void setThemeAndColor(ThemeColor themeColor) { - if (themeColor.color != null) { - ChanSettings.theme.set(themeColor.theme + "," + themeColor.color); - } else { - ChanSettings.theme.set(themeColor.theme); + if (TextUtils.isEmpty(themeColor.color) || TextUtils.isEmpty(themeColor.accentColor)) { + throw new IllegalArgumentException(); } + ChanSettings.theme.set(themeColor.theme + "," + themeColor.color + "," + themeColor.accentColor); } /** @@ -273,10 +277,12 @@ public class ChanSettings { public static class ThemeColor { public String theme; public String color; + public String accentColor; - public ThemeColor(String theme, String color) { + public ThemeColor(String theme, String color, String accentColor) { this.theme = theme; this.color = color; + this.accentColor = accentColor; } } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/AlbumDownloadController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/AlbumDownloadController.java index 52d7a688..21a530f9 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/AlbumDownloadController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/AlbumDownloadController.java @@ -48,6 +48,7 @@ import org.floens.chan.utils.RecyclerUtils; import java.util.ArrayList; import java.util.List; +import static org.floens.chan.ui.theme.ThemeHelper.theme; import static org.floens.chan.utils.AndroidUtils.dp; public class AlbumDownloadController extends Controller implements ToolbarMenuItem.ToolbarMenuItemCallback, View.OnClickListener { @@ -83,6 +84,7 @@ public class AlbumDownloadController extends Controller implements ToolbarMenuIt download = (FloatingActionButton) view.findViewById(R.id.download); download.setOnClickListener(this); + theme().applyFabColor(download); recyclerView = (GridRecyclerView) view.findViewById(R.id.recycler_view); recyclerView.setHasFixedSize(true); gridLayoutManager = new GridLayoutManager(context, 3); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardEditController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardEditController.java index 4996b67d..4541df37 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardEditController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardEditController.java @@ -58,6 +58,7 @@ import java.util.Comparator; import java.util.List; import java.util.Locale; +import static org.floens.chan.ui.theme.ThemeHelper.theme; import static org.floens.chan.utils.AndroidUtils.dp; import static org.floens.chan.utils.AndroidUtils.fixSnackbarText; import static org.floens.chan.utils.AndroidUtils.getString; @@ -95,6 +96,7 @@ public class BoardEditController extends Controller implements View.OnClickListe recyclerView.setLayoutManager(new LinearLayoutManager(context)); add = (FloatingActionButton) view.findViewById(R.id.add); add.setOnClickListener(this); + theme().applyFabColor(add); boards = boardManager.getSavedBoards(); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java index 5509b221..7f170d52 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java @@ -115,6 +115,7 @@ public class FiltersController extends Controller implements ToolbarMenuItem.Too add = (FloatingActionButton) view.findViewById(R.id.add); add.setOnClickListener(this); + theme().applyFabColor(add); adapter = new FilterAdapter(); recyclerView.setAdapter(adapter); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java index 1219ae60..42fefd81 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java @@ -19,10 +19,15 @@ package org.floens.chan.ui.controller; import android.annotation.SuppressLint; import android.content.Context; +import android.content.res.ColorStateList; import android.graphics.Color; import android.support.design.widget.FloatingActionButton; import android.support.v4.view.ViewPager; import android.support.v7.view.ContextThemeWrapper; +import android.text.SpannableString; +import android.text.TextUtils; +import android.text.method.LinkMovementMethod; +import android.text.style.ClickableSpan; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; @@ -57,58 +62,60 @@ import java.util.List; import static org.floens.chan.utils.AndroidUtils.dp; import static org.floens.chan.utils.AndroidUtils.getAttrColor; +import static org.floens.chan.utils.AndroidUtils.getString; public class ThemeSettingsController extends Controller implements View.OnClickListener { - private ViewPager pager; - private FloatingActionButton done; - - private Adapter adapter; - private ThemeHelper themeHelper; + private static PostCell.PostCellCallback DUMMY_POST_CALLBACK = new PostCell.PostCellCallback() { + private Loadable loadable = new Loadable("g", 1234); - private List colors = new ArrayList<>(); + @Override + public Loadable getLoadable() { + return loadable; + } - private PostCell.PostCellCallback DUMMY_POST_CALLBACK; + @Override + public void onPostClicked(Post post) { + } - public ThemeSettingsController(Context context) { - super(context); + @Override + public void onThumbnailClicked(Post post, ThumbnailView thumbnail) { + } - DUMMY_POST_CALLBACK = new PostCell.PostCellCallback() { - private Loadable loadable = new Loadable("g", 1234); + @Override + public void onShowPostReplies(Post post) { + } - @Override - public Loadable getLoadable() { - return loadable; - } + @Override + public void onPopulatePostOptions(Post post, List menu) { + menu.add(new FloatingMenuItem(1, "Option")); + } - @Override - public void onPostClicked(Post post) { - } + @Override + public void onPostOptionClicked(Post post, Object id) { + } - @Override - public void onThumbnailClicked(Post post, ThumbnailView thumbnail) { - } + @Override + public void onPostLinkableClicked(PostLinkable linkable) { + } - @Override - public void onShowPostReplies(Post post) { - } + @Override + public void onPostNoClicked(Post post) { + } + }; - @Override - public void onPopulatePostOptions(Post post, List menu) { - menu.add(new FloatingMenuItem(1, "Option")); - } + private ViewPager pager; + private FloatingActionButton done; + private TextView textView; - @Override - public void onPostOptionClicked(Post post, Object id) { - } + private Adapter adapter; + private ThemeHelper themeHelper; - @Override - public void onPostLinkableClicked(PostLinkable linkable) { - } + private List themes; + private List selectedPrimaryColors = new ArrayList<>(); + private ThemeHelper.PrimaryColor selectedAccentColor; - @Override - public void onPostNoClicked(Post post) { - } - }; + public ThemeSettingsController(Context context) { + super(context); } @Override @@ -120,42 +127,101 @@ public class ThemeSettingsController extends Controller implements View.OnClickL view = inflateRes(R.layout.controller_theme); themeHelper = ThemeHelper.getInstance(); + themes = themeHelper.getThemes(); pager = (ViewPager) view.findViewById(R.id.pager); done = (FloatingActionButton) view.findViewById(R.id.add); done.setOnClickListener(this); + textView = (TextView) view.findViewById(R.id.text); + + SpannableString changeAccentColor = new SpannableString(getString(R.string.setting_theme_accent)); + changeAccentColor.setSpan(new ClickableSpan() { + @Override + public void onClick(View widget) { + showAccentColorPicker(); + } + }, 0, changeAccentColor.length(), 0); + + textView.setText(TextUtils.concat(getString(R.string.setting_theme_explanation), changeAccentColor)); + textView.setMovementMethod(LinkMovementMethod.getInstance()); + adapter = new Adapter(); pager.setAdapter(adapter); ChanSettings.ThemeColor currentSettingsTheme = ChanSettings.getThemeAndColor(); for (int i = 0; i < themeHelper.getThemes().size(); i++) { Theme theme = themeHelper.getThemes().get(i); - ThemeHelper.PrimaryColor color = theme.primaryColor; + ThemeHelper.PrimaryColor primaryColor = theme.primaryColor; + if (theme.name.equals(currentSettingsTheme.theme)) { + // Current theme pager.setCurrentItem(i, false); - if (currentSettingsTheme.color != null) { - color = themeHelper.getColor(currentSettingsTheme.color); - } } - colors.add(color); + selectedPrimaryColors.add(primaryColor); } + selectedAccentColor = themeHelper.getTheme().accentColor; + done.setBackgroundTintList(ColorStateList.valueOf(selectedAccentColor.color)); } @Override public void onClick(View v) { if (v == done) { - Theme theme = themeHelper.getThemes().get(pager.getCurrentItem()); - themeHelper.changeTheme(theme, colors.get(pager.getCurrentItem())); - ((StartActivity) context).restart(); + saveTheme(); } } - private class Adapter extends ViewPagerAdapter { - private List themes; + private void saveTheme() { + int currentItem = pager.getCurrentItem(); + Theme selectedTheme = themeHelper.getThemes().get(currentItem); + ThemeHelper.PrimaryColor selectedColor = selectedPrimaryColors.get(currentItem); + themeHelper.changeTheme(selectedTheme, selectedColor, selectedAccentColor); + ((StartActivity) context).restart(); + } + + private void showAccentColorPicker() { + List items = new ArrayList<>(); + FloatingMenuItem selected = null; + for (ThemeHelper.PrimaryColor color : themeHelper.getColors()) { + FloatingMenuItem floatingMenuItem = new FloatingMenuItem(new ColorsAdapterItem(color, color.color), color.displayName); + items.add(floatingMenuItem); + if (color == selectedAccentColor) { + selected = floatingMenuItem; + } + } + + FloatingMenu menu = getColorsMenu(items, selected, textView); + menu.setCallback(new FloatingMenu.FloatingMenuCallback() { + @Override + public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { + ColorsAdapterItem colorItem = (ColorsAdapterItem) item.getId(); + selectedAccentColor = colorItem.color; + done.setBackgroundTintList(ColorStateList.valueOf(selectedAccentColor.color)); + } + + @Override + public void onFloatingMenuDismissed(FloatingMenu menu) { + + } + }); + menu.setPopupWidth(dp(200)); + menu.setPopupHeight(dp(300)); + menu.show(); + } + + private FloatingMenu getColorsMenu(List items, FloatingMenuItem selected, View anchor) { + FloatingMenu menu = new FloatingMenu(context); + menu.setItems(items); + menu.setAdapter(new ColorsAdapter(items)); + menu.setSelectedItem(selected); + menu.setAnchor(anchor, Gravity.CENTER, 0, dp(5)); + menu.setPopupWidth(anchor.getWidth()); + return menu; + } + + private class Adapter extends ViewPagerAdapter { public Adapter() { - themes = themeHelper.getThemes(); } @Override @@ -197,25 +263,20 @@ public class ThemeSettingsController extends Controller implements View.OnClickL List items = new ArrayList<>(); FloatingMenuItem selected = null; for (ThemeHelper.PrimaryColor color : themeHelper.getColors()) { - FloatingMenuItem floatingMenuItem = new FloatingMenuItem(color, color.displayName); + FloatingMenuItem floatingMenuItem = new FloatingMenuItem(new ColorsAdapterItem(color, color.color500), color.displayName); items.add(floatingMenuItem); - if (color == colors.get(position)) { + if (color == selectedPrimaryColors.get(position)) { selected = floatingMenuItem; } } - FloatingMenu menu = new FloatingMenu(context); - menu.setItems(items); - menu.setAdapter(new ColorsAdapter(items)); - menu.setSelectedItem(selected); - menu.setAnchor(toolbar, Gravity.CENTER, 0, dp(5)); - menu.setPopupWidth(toolbar.getWidth()); + FloatingMenu menu = getColorsMenu(items, selected, toolbar); menu.setCallback(new FloatingMenu.FloatingMenuCallback() { @Override public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - ThemeHelper.PrimaryColor primaryColor = (ThemeHelper.PrimaryColor) item.getId(); - colors.set(position, primaryColor); - toolbar.setBackgroundColor(primaryColor.color); + ColorsAdapterItem colorItem = (ColorsAdapterItem) item.getId(); + selectedPrimaryColors.set(position, colorItem.color); + toolbar.setBackgroundColor(colorItem.color.color); } @Override @@ -281,10 +342,10 @@ public class ThemeSettingsController extends Controller implements View.OnClickL textView.setText(getItem(position)); textView.setTypeface(AndroidUtils.ROBOTO_MEDIUM); - ThemeHelper.PrimaryColor color = (ThemeHelper.PrimaryColor) items.get(position).getId(); + ColorsAdapterItem color = (ColorsAdapterItem) items.get(position).getId(); - textView.setBackgroundColor(color.color); - boolean lightColor = (Color.red(color.color) * 0.299f) + (Color.green(color.color) * 0.587f) + (Color.blue(color.color) * 0.114f) > 125f; + textView.setBackgroundColor(color.bg); + boolean lightColor = (Color.red(color.bg) * 0.299f) + (Color.green(color.bg) * 0.587f) + (Color.blue(color.bg) * 0.114f) > 125f; textView.setTextColor(lightColor ? 0xff000000 : 0xffffffff); return textView; @@ -305,4 +366,14 @@ public class ThemeSettingsController extends Controller implements View.OnClickL return position; } } + + private static class ColorsAdapterItem { + public ThemeHelper.PrimaryColor color; + public int bg; + + public ColorsAdapterItem(ThemeHelper.PrimaryColor color, int bg) { + this.color = color; + this.bg = bg; + } + } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java index e7652857..f4d4d827 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java @@ -69,6 +69,7 @@ import java.util.List; import javax.net.ssl.SSLException; +import static org.floens.chan.ui.theme.ThemeHelper.theme; import static org.floens.chan.utils.AndroidUtils.fixSnackbarText; import static org.floens.chan.utils.AndroidUtils.getString; @@ -144,6 +145,7 @@ public class ThreadLayout extends CoordinatorLayout implements ThreadPresenter.T } else { replyButton.setOnClickListener(this); replyButton.setToolbar(callback.getToolbar()); + theme().applyFabColor(replyButton); } switchVisible(Visible.LOADING); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java b/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java index ecdcf78b..52aa2af0 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java @@ -18,9 +18,11 @@ package org.floens.chan.ui.theme; import android.content.Context; +import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; +import android.support.design.widget.FloatingActionButton; import android.widget.ImageView; import org.floens.chan.R; @@ -37,6 +39,7 @@ public class Theme { public final int resValue; public boolean isLightTheme = true; public ThemeHelper.PrimaryColor primaryColor; + public ThemeHelper.PrimaryColor accentColor; public int textPrimary; public int textSecondary; @@ -71,6 +74,7 @@ public class Theme { this.name = name; this.resValue = resValue; this.primaryColor = primaryColor; + accentColor = ThemeHelper.PrimaryColor.TEAL; resolveSpanColors(); resolveDrawables(); @@ -88,6 +92,10 @@ public class Theme { helpDrawable = new ThemeDrawable(R.drawable.ic_help_outline_black_24dp, 0.54f); } + public void applyFabColor(FloatingActionButton fab) { + fab.setBackgroundTintList(ColorStateList.valueOf(accentColor.color)); + } + private void resolveSpanColors() { Resources.Theme theme = AndroidUtils.getAppContext().getResources().newTheme(); theme.applyStyle(R.style.Chan_Theme, true); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/theme/ThemeHelper.java b/Clover/app/src/main/java/org/floens/chan/ui/theme/ThemeHelper.java index 6911caba..967898a3 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/theme/ThemeHelper.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/theme/ThemeHelper.java @@ -58,21 +58,20 @@ public class ThemeHelper { themes.add(new Theme("Photon", "photon", R.style.Chan_Theme_Photon, PrimaryColor.ORANGE)); ChanSettings.ThemeColor settingTheme = ChanSettings.getThemeAndColor(); - if (settingTheme.color != null) { - for (Theme theme : themes) { - if (theme.name.equals(settingTheme.theme)) { - theme.primaryColor = getColor(settingTheme.color); - break; - } + for (Theme theme : themes) { + if (theme.name.equals(settingTheme.theme)) { + patchTheme(theme, settingTheme); + break; } } updateCurrentTheme(); } - public void changeTheme(Theme theme, PrimaryColor primaryColor) { - ChanSettings.setThemeAndColor(new ChanSettings.ThemeColor(theme.name, primaryColor.name)); - theme.primaryColor = primaryColor; + public void changeTheme(Theme theme, PrimaryColor primaryColor, PrimaryColor accentColor) { + ChanSettings.ThemeColor setting = new ChanSettings.ThemeColor(theme.name, primaryColor.name, accentColor.name); + ChanSettings.setThemeAndColor(setting); + patchTheme(theme, setting); updateCurrentTheme(); } @@ -89,6 +88,16 @@ public class ThemeHelper { theme = themes.get(0); } + private void patchTheme(Theme theme, ChanSettings.ThemeColor setting) { + // Patch the theme primary and accent color when set in the settings + if (setting.color != null) { + theme.primaryColor = getColor(setting.color, PrimaryColor.BLACK); + } + if (setting.accentColor != null) { + theme.accentColor = getColor(setting.accentColor, PrimaryColor.TEAL); + } + } + public Theme getTheme() { return theme; } @@ -110,15 +119,15 @@ public class ThemeHelper { } } - public PrimaryColor getColor(String name) { + public PrimaryColor getColor(String name, PrimaryColor defaultColor) { for (PrimaryColor primaryColor : PrimaryColor.values()) { if (primaryColor.name.equals(name)) { return primaryColor; } } - Logger.e(TAG, "No color found for setting " + name + ", using a default color"); - return PrimaryColor.BLACK; + Logger.e(TAG, "No color found for setting " + name); + return defaultColor; } public List getColors() { @@ -126,39 +135,59 @@ public class ThemeHelper { } public enum PrimaryColor { - RED("Red", "red", 0xFFF44336, 0xFFD32F2F), - PINK("Pink", "pink", 0xFFE91E63, 0xFFC2185B), - PURPLE("Purple", "purple", 0xFF9C27B0, 0xFF7B1FA2), - DEEP_PURPLE("Deep purple", "deep_purple", 0xFF673AB7, 0xFF512DA8), - INDIGO("Indigo", "indigo", 0xFF3F51B5, 0xFF303F9F), - BLUE("Blue", "blue", 0xFF2196F3, 0xFF1976D2), - LIGHT_BLUE("Light blue", "light_blue", 0xFF03A9F4, 0xFF0288D1), - CYAN("Cyan", "cyan", 0xFF00BCD4, 0xFF0097A7), - TEAL("Teal", "teal", 0xFF009688, 0xFF00796B), - GREEN("Green", "green", 0xFF4CAF50, 0xFF388E3C), - LIGHT_GREEN("Light green", "light_green", 0xFF8BC34A, 0xFF689F38), - LIME("Lime", "lime", 0xFFCDDC39, 0xFFAFB42B), - YELLOW("Yellow", "yellow", 0xFFFFEB3B, 0xFFFBC02D), - AMBER("Amber", "amber", 0xFFFFC107, 0xFFFFA000), - ORANGE("Orange", "orange", 0xFFFF9800, 0xFFF57C00), - DEEP_ORANGE("Deep orange", "deep_orange", 0xFFFF5722, 0xFFE64A19), - BROWN("Brown", "brown", 0xFF795548, 0xFF5D4037), - GREY("Grey", "grey", 0xFF9E9E9E, 0xFF616161), - BLUE_GREY("Blue grey", "blue_grey", 0xFF607D8B, 0xFF455A64), - - DARK("Dark", "dark", 0xff212121, 0xff000000), - BLACK("Black", "black", 0xff000000, 0xff000000); + RED("Red", "red", 0xFFFFEBEE, 0xFFFFCDD2, 0xFFEF9A9A, 0xFFE57373, 0xFFEF5350, 0xFFF44336, 0xFFE53935, 0xFFD32F2F, 0xFFD32F2F, 0xFFB71C1C), + PINK("Pink", "pink", 0xFFFCE4EC, 0xFFF8BBD0, 0xFFF48FB1, 0xFFF06292, 0xFFEC407A, 0xFFE91E63, 0xFFD81B60, 0xFFC2185B, 0xFFC2185B, 0xFF880E4F), + PURPLE("Purple", "purple", 0xFFF3E5F5, 0xFFE1BEE7, 0xFFCE93D8, 0xFFBA68C8, 0xFFAB47BC, 0xFF9C27B0, 0xFF8E24AA, 0xFF7B1FA2, 0xFF7B1FA2, 0xFF4A148C), + DEEP_PURPLE("Deep Purple", "deep_purple", 0xFFEDE7F6, 0xFFD1C4E9, 0xFFB39DDB, 0xFF9575CD, 0xFF7E57C2, 0xFF673AB7, 0xFF5E35B1, 0xFF512DA8, 0xFF512DA8, 0xFF311B92), + INDIGO("Indigo", "indigo", 0xFFE8EAF6, 0xFFC5CAE9, 0xFF9FA8DA, 0xFF7986CB, 0xFF5C6BC0, 0xFF3F51B5, 0xFF3949AB, 0xFF303F9F, 0xFF303F9F, 0xFF1A237E), + BLUE("Blue", "blue", 0xFFE3F2FD, 0xFFBBDEFB, 0xFF90CAF9, 0xFF64B5F6, 0xFF42A5F5, 0xFF2196F3, 0xFF1E88E5, 0xFF1976D2, 0xFF1976D2, 0xFF0D47A1), + LIGHT_BLUE("Light Blue", "light_blue", 0xFFE1F5FE, 0xFFB3E5FC, 0xFF81D4FA, 0xFF4FC3F7, 0xFF29B6F6, 0xFF03A9F4, 0xFF039BE5, 0xFF0288D1, 0xFF0288D1, 0xFF01579B), + CYAN("Cyan", "cyan", 0xFFE0F7FA, 0xFFB2EBF2, 0xFF80DEEA, 0xFF4DD0E1, 0xFF26C6DA, 0xFF00BCD4, 0xFF00ACC1, 0xFF0097A7, 0xFF0097A7, 0xFF006064), + TEAL("Teal", "teal", 0xFFE0F2F1, 0xFFB2DFDB, 0xFF80CBC4, 0xFF4DB6AC, 0xFF26A69A, 0xFF009688, 0xFF00897B, 0xFF00796B, 0xFF00796B, 0xFF004D40), + GREEN("Green", "green", 0xFFE8F5E9, 0xFFC8E6C9, 0xFFA5D6A7, 0xFF81C784, 0xFF66BB6A, 0xFF4CAF50, 0xFF43A047, 0xFF388E3C, 0xFF388E3C, 0xFF1B5E20), + LIGHT_GREEN("Light Green", "light_green", 0xFFF1F8E9, 0xFFDCEDC8, 0xFFC5E1A5, 0xFFAED581, 0xFF9CCC65, 0xFF8BC34A, 0xFF7CB342, 0xFF689F38, 0xFF689F38, 0xFF33691E), + LIME("Lime", "lime", 0xFFF9FBE7, 0xFFF0F4C3, 0xFFE6EE9C, 0xFFDCE775, 0xFFD4E157, 0xFFCDDC39, 0xFFC0CA33, 0xFFAFB42B, 0xFFAFB42B, 0xFF827717), + YELLOW("Yellow", "yellow", 0xFFFFFDE7, 0xFFFFF9C4, 0xFFFFF59D, 0xFFFFF176, 0xFFFFEE58, 0xFFFFEB3B, 0xFFFDD835, 0xFFFBC02D, 0xFFFBC02D, 0xFFF57F17), + AMBER("Amber", "amber", 0xFFFFF8E1, 0xFFFFECB3, 0xFFFFE082, 0xFFFFD54F, 0xFFFFCA28, 0xFFFFC107, 0xFFFFB300, 0xFFFFA000, 0xFFFFA000, 0xFFFF6F00), + ORANGE("Orange", "orange", 0xFFFFF3E0, 0xFFFFE0B2, 0xFFFFCC80, 0xFFFFB74D, 0xFFFFA726, 0xFFFF9800, 0xFFFB8C00, 0xFFF57C00, 0xFFF57C00, 0xFFE65100), + DEEP_ORANGE("Deep Orange", "deep_orange", 0xFFFBE9E7, 0xFFFFCCBC, 0xFFFFAB91, 0xFFFF8A65, 0xFFFF7043, 0xFFFF5722, 0xFFF4511E, 0xFFE64A19, 0xFFE64A19, 0xFFBF360C), + BROWN("Brown", "brown", 0xFFEFEBE9, 0xFFD7CCC8, 0xFFBCAAA4, 0xFFA1887F, 0xFF8D6E63, 0xFF795548, 0xFF6D4C41, 0xFF5D4037, 0xFF5D4037, 0xFF3E2723), + GREY("Grey", "grey", 0xFFFAFAFA, 0xFFF5F5F5, 0xFFEEEEEE, 0xFFE0E0E0, 0xFFBDBDBD, 0xFF9E9E9E, 0xFF757575, 0xFF616161, 0xFF616161, 0xFF212121), + BLUE_GREY("Blue Grey", "blue_grey", 0xFFECEFF1, 0xFFCFD8DC, 0xFFB0BEC5, 0xFF90A4AE, 0xFF78909C, 0xFF607D8B, 0xFF546E7A, 0xFF455A64, 0xFF455A64, 0xFF263238), + + DARK("Dark", "dark", 0xff212121, 0xff212121, 0xff212121, 0xff212121, 0xff212121, 0xff212121, 0xff000000, 0xff000000, 0xff000000, 0xff000000), + BLACK("Black", "black", 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000); public final String displayName; public final String name; public final int color; public final int dark; - - PrimaryColor(String displayName, String name, int color, int dark) { + public final int color50; + public final int color100; + public final int color200; + public final int color300; + public final int color400; + public final int color500; + public final int color600; + public final int color700; + public final int color800; + public final int color900; + + PrimaryColor(String displayName, String name, int color50, int color100, int color200, int color300, int color400, int color500, int color600, int color700, int color800, int color900) { this.displayName = displayName; this.name = name; - this.color = color; - this.dark = dark; + this.color = color500; + this.dark = color700; + this.color50 = color50; + this.color100 = color100; + this.color200 = color200; + this.color300 = color300; + this.color400 = color400; + this.color500 = color500; + this.color600 = color600; + this.color700 = color700; + this.color800 = color800; + this.color900 = color900; } } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/FloatingMenu.java b/Clover/app/src/main/java/org/floens/chan/ui/view/FloatingMenu.java index b859f7e5..8fd9c36a 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/view/FloatingMenu.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/view/FloatingMenu.java @@ -49,6 +49,7 @@ public class FloatingMenu { private int anchorOffsetX; private int anchorOffsetY; private int popupWidth = POPUP_WIDTH_AUTO; + private int popupHeight = -1; private List items; private FloatingMenuItem selectedItem; private ListAdapter adapter; @@ -84,6 +85,13 @@ public class FloatingMenu { } } + public void setPopupHeight(int height) { + this.popupHeight = height; + if (popupWindow != null) { + popupWindow.setHeight(height); + } + } + public void setItems(List items) { this.items = items; if (popupWindow != null) { @@ -118,6 +126,10 @@ public class FloatingMenu { popupWindow.setContentWidth(popupWidth); } + if (popupHeight > 0) { + popupWindow.setHeight(popupHeight); + } + int selectedPosition = 0; for (int i = 0; i < items.size(); i++) { if (items.get(i) == selectedItem) { diff --git a/Clover/app/src/main/res/layout/controller_theme.xml b/Clover/app/src/main/res/layout/controller_theme.xml index 79279c93..551f7d9a 100644 --- a/Clover/app/src/main/res/layout/controller_theme.xml +++ b/Clover/app/src/main/res/layout/controller_theme.xml @@ -27,10 +27,10 @@ along with this program. If not, see . android:orientation="vertical"> + android:padding="16dp" /> . Browsing Theme - Swipe to change the theme.\nTap the toolbar to change its color. + Swipe to change the theme.\nTap the toolbar to change its color.\n + Click here to change the FAB color Font size (default) Use condensed font diff --git a/Clover/app/src/main/res/values/styles.xml b/Clover/app/src/main/res/values/styles.xml index f384986d..12086844 100644 --- a/Clover/app/src/main/res/values/styles.xml +++ b/Clover/app/src/main/res/values/styles.xml @@ -16,13 +16,13 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . --> - #ff4caf50 - #ff388e3c - #ff009688 + + +