diff --git a/Clover/app/src/main/java/org/floens/chan/chan/ChanParser.java b/Clover/app/src/main/java/org/floens/chan/chan/ChanParser.java index 8a4e5f67..bfa508b2 100644 --- a/Clover/app/src/main/java/org/floens/chan/chan/ChanParser.java +++ b/Clover/app/src/main/java/org/floens/chan/chan/ChanParser.java @@ -38,7 +38,7 @@ import org.floens.chan.core.model.PostLinkable; import org.floens.chan.core.settings.ChanSettings; import org.floens.chan.utils.AndroidUtils; import org.floens.chan.utils.Logger; -import org.floens.chan.utils.ThemeHelper; +import org.floens.chan.ui.theme.ThemeHelper; import org.jsoup.Jsoup; import org.jsoup.helper.StringUtil; import org.jsoup.nodes.Document; diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java b/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java index e13d2028..e95f627c 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java +++ b/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java @@ -22,7 +22,7 @@ import android.text.TextPaint; import android.text.style.ClickableSpan; import android.view.View; -import org.floens.chan.utils.ThemeHelper; +import org.floens.chan.ui.theme.ThemeHelper; import java.util.ArrayList; import java.util.List; diff --git a/Clover/app/src/main/java/org/floens/chan/test/TestActivity.java b/Clover/app/src/main/java/org/floens/chan/test/TestActivity.java index 075061ce..631eb241 100644 --- a/Clover/app/src/main/java/org/floens/chan/test/TestActivity.java +++ b/Clover/app/src/main/java/org/floens/chan/test/TestActivity.java @@ -34,7 +34,7 @@ import org.floens.chan.core.model.ChanThread; import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Post; import org.floens.chan.utils.Logger; -import org.floens.chan.utils.ThemeHelper; +import org.floens.chan.ui.theme.ThemeHelper; import java.io.File; @@ -56,7 +56,7 @@ public class TestActivity extends Activity implements View.OnClickListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - ThemeHelper.getInstance().reloadPostViewColors(this); + ThemeHelper.getInstance().addContext(this); LinearLayout linearLayout = new LinearLayout(this); linearLayout.setOrientation(LinearLayout.VERTICAL); @@ -93,6 +93,12 @@ public class TestActivity extends Activity implements View.OnClickListener { fileCache = new FileCache(fileCacheDir, 50 * 1024 * 1024, Chan.getInstance().getUserAgent()); } + @Override + protected void onDestroy() { + super.onDestroy(); + ThemeHelper.getInstance().removeContext(this); + } + @Override public void onClick(View v) { if (v == clearCache) { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java index c5557abc..0d28c5d5 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java @@ -33,12 +33,12 @@ import org.floens.chan.core.model.Board; import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Pin; import org.floens.chan.core.settings.ChanSettings; +import org.floens.chan.ui.theme.ThemeHelper; import org.floens.chan.ui.controller.BrowseController; import org.floens.chan.ui.controller.RootNavigationController; import org.floens.chan.ui.controller.ViewThreadController; import org.floens.chan.ui.state.ChanState; import org.floens.chan.utils.Logger; -import org.floens.chan.utils.ThemeHelper; import java.util.ArrayList; import java.util.List; @@ -58,8 +58,7 @@ public class StartActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setTheme(R.style.Chan_Theme); - ThemeHelper.getInstance().reloadPostViewColors(this); + ThemeHelper.getInstance().addContext(this); contentView = (ViewGroup) findViewById(android.R.id.content); @@ -111,6 +110,12 @@ public class StartActivity extends AppCompatActivity { } } + public void restart() { + Intent intent = getIntent(); + finish(); + startActivity(intent); + } + @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); @@ -206,6 +211,8 @@ public class StartActivity extends AppCompatActivity { stackTop().onDestroy(); stack.clear(); + + ThemeHelper.getInstance().removeContext(this); } @Override diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java index 9981f5eb..4cf41724 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java @@ -56,7 +56,7 @@ import org.floens.chan.ui.helper.PostHelper; import org.floens.chan.ui.view.FloatingMenu; import org.floens.chan.ui.view.FloatingMenuItem; import org.floens.chan.ui.view.ThumbnailView; -import org.floens.chan.utils.ThemeHelper; +import org.floens.chan.ui.theme.ThemeHelper; import org.floens.chan.utils.Time; import java.util.ArrayList; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java index 6164e112..6b685018 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java @@ -31,6 +31,9 @@ import org.floens.chan.core.model.SavedReply; import java.util.Random; +import static org.floens.chan.utils.AndroidUtils.dp; +import static org.floens.chan.utils.AndroidUtils.getAttrColor; + public class DeveloperSettingsController extends Controller { private TextView summaryText; @@ -46,7 +49,6 @@ public class DeveloperSettingsController extends Controller { LinearLayout wrapper = new LinearLayout(context); wrapper.setOrientation(LinearLayout.VERTICAL); - wrapper.setBackgroundColor(0xffffffff); Button crashButton = new Button(context); @@ -61,7 +63,7 @@ public class DeveloperSettingsController extends Controller { wrapper.addView(crashButton); summaryText = new TextView(context); - summaryText.setPadding(0, 25, 0, 0); + summaryText.setPadding(0, dp(25), 0, 0); wrapper.addView(summaryText); setDbSummary(); @@ -107,6 +109,7 @@ public class DeveloperSettingsController extends Controller { ScrollView scrollView = new ScrollView(context); scrollView.addView(wrapper); view = scrollView; + view.setBackgroundColor(getAttrColor(context, R.attr.backcolor)); } private void setDbSummary() { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java index b15ea100..324fb215 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java @@ -126,7 +126,7 @@ public class ImageViewerController extends Controller implements View.OnClickLis view.setOnClickListener(this); previewImage = (TransitionImageView) view.findViewById(R.id.preview_image); pager = (OptionalSwipeViewPager) view.findViewById(R.id.pager); - pager.setOnPageChangeListener(presenter); + pager.addOnPageChangeListener(presenter); loadingBar = (LoadingBar) view.findViewById(R.id.loading_bar); AndroidUtils.waitForMeasure(view, new AndroidUtils.OnMeasuredCallback() { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java index a59b73c0..6b39cc1d 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java @@ -25,6 +25,7 @@ import android.widget.Toast; import org.floens.chan.R; import org.floens.chan.core.settings.ChanSettings; +import org.floens.chan.ui.activity.StartActivity; import org.floens.chan.ui.settings.BooleanSettingView; import org.floens.chan.ui.settings.LinkSettingView; import org.floens.chan.ui.settings.ListSettingView; @@ -50,6 +51,7 @@ public class MainSettingsController extends SettingsController implements Toolba private LinkSettingView passLink; private int clickCount; private SettingView developerView; + private SettingView theme; public MainSettingsController(Context context) { super(context); @@ -99,6 +101,8 @@ public class MainSettingsController extends SettingsController implements Toolba if (item == imageAutoLoadView) { videoAutoLoadView.setEnabled(ChanSettings.imageAutoLoad.get()); + } else if (item == theme) { + ((StartActivity)context).restart(); } } @@ -141,7 +145,7 @@ public class MainSettingsController extends SettingsController implements Toolba // Browsing group SettingsGroup browsing = new SettingsGroup(s(R.string.settings_group_browsing)); - browsing.add(new ListSettingView(this, ChanSettings.theme, s(R.string.setting_theme), new ListSettingView.Item[]{ + theme = browsing.add(new ListSettingView(this, ChanSettings.theme, s(R.string.setting_theme), new ListSettingView.Item[]{ new ListSettingView.Item(s(R.string.setting_theme_light), "light"), new ListSettingView.Item(s(R.string.setting_theme_dark), "dark"), new ListSettingView.Item(s(R.string.setting_theme_black), "black") diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java index bdf7a4f1..ac6a54b6 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java @@ -42,7 +42,7 @@ import org.floens.chan.ui.cell.PostCell; import org.floens.chan.ui.helper.PostPopupHelper; import org.floens.chan.ui.view.LoadView; import org.floens.chan.ui.view.ThumbnailView; -import org.floens.chan.utils.ThemeHelper; +import org.floens.chan.ui.theme.ThemeHelper; public class PostRepliesController extends Controller { private static final int TRANSITION_DURATION = 200; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/RootNavigationController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/RootNavigationController.java index 1ceb303c..5ee3f217 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/RootNavigationController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/RootNavigationController.java @@ -34,6 +34,7 @@ import org.floens.chan.core.manager.WatchManager; import org.floens.chan.core.model.Pin; import org.floens.chan.ui.adapter.PinAdapter; import org.floens.chan.ui.helper.SwipeListener; +import org.floens.chan.ui.theme.ThemeHelper; import org.floens.chan.ui.toolbar.Toolbar; import org.floens.chan.utils.AndroidUtils; @@ -67,6 +68,8 @@ public class RootNavigationController extends NavigationController implements Pi recyclerView = (RecyclerView) view.findViewById(R.id.drawer_recycler_view); recyclerView.setHasFixedSize(true); + toolbar.setBackgroundColor(ThemeHelper.getInstance().getTheme().primaryColor.color); + pinAdapter = new PinAdapter(this); recyclerView.setAdapter(pinAdapter); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java index 1e1640dd..8797c711 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java @@ -35,6 +35,8 @@ import org.floens.chan.utils.AndroidUtils; import java.util.Arrays; +import static org.floens.chan.utils.AndroidUtils.getAttrColor; + public class ViewThreadController extends ThreadController implements ThreadLayout.ThreadLayoutCallback, ToolbarMenuItem.ToolbarMenuItemCallback { private static final int POST_ID = 1; private static final int PIN_ID = 2; @@ -57,7 +59,7 @@ public class ViewThreadController extends ThreadController implements ThreadLayo public void onCreate() { super.onCreate(); - view.setBackgroundColor(0xffffffff); + view.setBackgroundColor(getAttrColor(context, R.attr.backcolor)); navigationItem.hasDrawer = true; navigationItem.menu = new ToolbarMenu(context); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/fragment/FolderPickFragment.java b/Clover/app/src/main/java/org/floens/chan/ui/fragment/FolderPickFragment.java index 2f7dbe0f..ad160752 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/fragment/FolderPickFragment.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/fragment/FolderPickFragment.java @@ -29,7 +29,7 @@ import android.widget.ListView; import android.widget.TextView; import org.floens.chan.R; -import org.floens.chan.utils.ThemeHelper; +import org.floens.chan.ui.theme.ThemeHelper; import java.io.File; import java.util.ArrayList; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java index fe42e2e1..72114168 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java @@ -43,7 +43,7 @@ import org.floens.chan.ui.view.SelectionListeningEditText; import org.floens.chan.utils.AndroidUtils; import org.floens.chan.utils.AnimationUtils; import org.floens.chan.utils.ImageDecoder; -import org.floens.chan.utils.ThemeHelper; +import org.floens.chan.ui.theme.ThemeHelper; import java.io.File; @@ -133,7 +133,7 @@ public class ReplyLayout extends LoadView implements View.OnClickListener, Anima setView(replyInputLayout); - setBackgroundColor(0xffffffff); + setBackgroundColor(getAttrColor(getContext(), R.attr.backcolor)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setElevation(dp(4f)); } 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 new file mode 100644 index 00000000..607219a0 --- /dev/null +++ b/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java @@ -0,0 +1,32 @@ +/* + * Clover - 4chan browser https://github.com/Floens/Clover/ + * Copyright (C) 2014 Floens + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.floens.chan.ui.theme; + +public class Theme { + public final String name; + public final int resValue; + public final boolean isLightTheme; + public final ThemeHelper.PrimaryColor primaryColor; + + public Theme(String name, int resValue, boolean isLightTheme, ThemeHelper.PrimaryColor primaryColor) { + this.name = name; + this.resValue = resValue; + this.isLightTheme = isLightTheme; + this.primaryColor = primaryColor; + } +} 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 new file mode 100644 index 00000000..5c17b7af --- /dev/null +++ b/Clover/app/src/main/java/org/floens/chan/ui/theme/ThemeHelper.java @@ -0,0 +1,174 @@ +/* + * Clover - 4chan browser https://github.com/Floens/Clover/ + * Copyright (C) 2014 Floens + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.floens.chan.ui.theme; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Build; + +import org.floens.chan.R; +import org.floens.chan.core.settings.ChanSettings; +import org.floens.chan.utils.Logger; + +import java.util.ArrayList; +import java.util.List; + +public class ThemeHelper { + private static final String TAG = "ThemeHelper"; + + public static ThemeHelper instance = new ThemeHelper(); + + public static ThemeHelper getInstance() { + return instance; + } + + private List contexts = new ArrayList<>(); + + private List themes = new ArrayList<>(); + + private Theme theme; + + private int quoteColor; + private int highlightQuoteColor; + private int linkColor; + private int spoilerColor; + private int inlineQuoteColor; + + public ThemeHelper() { + themes.add(new Theme("light", R.style.Chan_Theme, true, PrimaryColor.GREEN)); + themes.add(new Theme("dark", R.style.Chan_Theme_Dark, false, PrimaryColor.DARK)); + themes.add(new Theme("black", R.style.Chan_Theme_Black, false, PrimaryColor.BLACK)); + } + + public void updateCurrentTheme() { + String settingTheme = ChanSettings.theme.get(); + for (Theme theme : themes) { + if (theme.name.equals(settingTheme)) { + this.theme = theme; + return; + } + } + + Logger.e(TAG, "No theme found for setting " + settingTheme + ", using the first one"); + theme = themes.get(0); + } + + public Theme getTheme() { + return theme; + } + + public Context getThemedContext() { + return contexts.size() > 0 ? contexts.get(contexts.size() - 1) : null; + } + + public void addContext(Activity context) { + if (contexts.contains(context)) { + Logger.e(TAG, "addContext: context already added"); + } else { + contexts.add(context); + } + + updateCurrentTheme(); + context.setTheme(theme.resValue); + + TypedArray ta = context.obtainStyledAttributes(new int[]{ + R.attr.post_quote_color, + R.attr.post_highlight_quote_color, + R.attr.post_link_color, + R.attr.post_spoiler_color, + R.attr.post_inline_quote_color + }); + + quoteColor = ta.getColor(0, 0); + highlightQuoteColor = ta.getColor(1, 0); + linkColor = ta.getColor(2, 0); + spoilerColor = ta.getColor(3, 0); + inlineQuoteColor = ta.getColor(4, 0); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + context.getWindow().setStatusBarColor(theme.primaryColor.dark); + context.getWindow().setNavigationBarColor(0xff000000); + context.setTaskDescription(new ActivityManager.TaskDescription(null, null, theme.primaryColor.color)); + } + + ta.recycle(); + } + + public void removeContext(Activity context) { + if (!contexts.remove(context)) { + Logger.e(TAG, "removeContext: context not found"); + } + } + + public int getQuoteColor() { + return quoteColor; + } + + public int getHighlightQuoteColor() { + return highlightQuoteColor; + } + + public int getLinkColor() { + return linkColor; + } + + public int getSpoilerColor() { + return spoilerColor; + } + + public int getInlineQuoteColor() { + return inlineQuoteColor; + } + + public enum PrimaryColor { + RED("red", 0xFF44336, 0xFFD32F2F), + PINK("pink", 0xFFE91E63, 0xFFC2185B), + PURPLE("purple", 0xFF9C27B0, 0xFF7B1FA2), + DEEP_PURPLE("deep purple", 0xFF673AB7, 0xFF512DA8), + INDIGO("indigo", 0xFF3F51B5, 0xFF303F9F), + BLUE("blue", 0xFF2196F3, 0xFF1976D2), + LIGHT_BLUE("light blue", 0xFF03A9F4, 0xFF0288D1), + CYAN("cyan", 0xFF00BCD4, 0xFF0097A7), + TEAL("teal", 0xFF009688, 0xFF00796B), + GREEN("green", 0xFF4CAF50, 0xFF388E3C), + LIGHT_GREEN("light green", 0xFF8BC34A, 0xFF689F38), + LIME("lime", 0xFFCDDC39, 0xFFAFB42B), + YELLOW("yellow", 0xFFFFEB3B, 0xFFFBC02D), + AMBER("amber", 0xFFFFC107, 0xFFFFA000), + ORANGE("orange", 0xFFFF9800, 0xFFF57C00), + DEEP_ORANGE("deep orange", 0xFFFF5722, 0xFFE64A19), + BROWN("brown", 0xFF795548, 0xFF5D4037), + GREY("grey", 0xFF9E9E9E, 0xFF616161), + BLUE_GREY("blue grey", 0xFF607D8B, 0xFF455A64), + + DARK("dark", 0xff212121, 0xff000000), + BLACK("black", 0xff000000, 0xff000000); + + public final String name; + public final int color; + public final int dark; + + PrimaryColor(String name, int color, int dark) { + this.name = name; + this.color = color; + this.dark= dark; + } + } +} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/Toolbar.java b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/Toolbar.java index 33497ef3..a0542b94 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/Toolbar.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/Toolbar.java @@ -357,7 +357,7 @@ public class Toolbar extends LinearLayout implements View.OnClickListener, LoadV final TextView titleView = (TextView) menu.findViewById(R.id.title); titleView.setTypeface(AndroidUtils.ROBOTO_MEDIUM); titleView.setText(item.title); - // black: titleView.setTextColor(Color.argb((int)(0.87 * 255.0), 0, 0, 0)); + titleView.setTextColor(0xffffffff); if (item.middleMenu != null) { item.middleMenu.setAnchor(titleView, Gravity.LEFT, dp(5), dp(5)); diff --git a/Clover/app/src/main/java/org/floens/chan/utils/ThemeHelper.java b/Clover/app/src/main/java/org/floens/chan/utils/ThemeHelper.java deleted file mode 100644 index e69227f8..00000000 --- a/Clover/app/src/main/java/org/floens/chan/utils/ThemeHelper.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Clover - 4chan browser https://github.com/Floens/Clover/ - * Copyright (C) 2014 Floens - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.floens.chan.utils; - -import android.app.Activity; -import android.content.Context; -import android.content.res.TypedArray; - -import org.floens.chan.R; -import org.floens.chan.core.settings.ChanSettings; - -public class ThemeHelper { - public enum Theme { - LIGHT("light", R.style.Chan_Theme, true), - DARK("dark", R.style.Chan_Theme_Dark, false), - BLACK("black", R.style.Chan_Theme_Black, false); - - public String name; - public int resValue; - public boolean isLightTheme; - - Theme(String name, int resValue, boolean isLightTheme) { - this.name = name; - this.resValue = resValue; - this.isLightTheme = isLightTheme; - } - } - - private static ThemeHelper instance; - private Context context; - private int quoteColor; - private int highlightQuoteColor; - private int linkColor; - private int spoilerColor; - private int inlineQuoteColor; - - public static ThemeHelper getInstance() { - if (instance == null) { - instance = new ThemeHelper(); - } - - return instance; - } - - public static void setTheme(Activity activity) { - activity.setTheme(ThemeHelper.getInstance().getTheme().resValue); - } - - public ThemeHelper() { - } - - public Theme getTheme() { - String themeName = ChanSettings.theme.get(); - - Theme theme = null; - switch (themeName) { - case "light": - theme = Theme.LIGHT; - break; - case "dark": - theme = Theme.DARK; - break; - case "black": - theme = Theme.BLACK; - break; - } - - return theme; - } - - public Context getThemedContext() { - return context; - } - - public void reloadPostViewColors(Context context) { - this.context = context; - - TypedArray ta = context.obtainStyledAttributes(new int[]{ - R.attr.post_quote_color, - R.attr.post_highlight_quote_color, - R.attr.post_link_color, - R.attr.post_spoiler_color, - R.attr.post_inline_quote_color - }); - - quoteColor = ta.getColor(0, 0); - highlightQuoteColor = ta.getColor(1, 0); - linkColor = ta.getColor(2, 0); - spoilerColor = ta.getColor(3, 0); - inlineQuoteColor = ta.getColor(4, 0); - - ta.recycle(); - } - - public int getQuoteColor() { - return quoteColor; - } - - public int getHighlightQuoteColor() { - return highlightQuoteColor; - } - - public int getLinkColor() { - return linkColor; - } - - public int getSpoilerColor() { - return spoilerColor; - } - - public int getInlineQuoteColor() { - return inlineQuoteColor; - } -} diff --git a/Clover/app/src/main/res/drawable/setting_description_bottom.xml b/Clover/app/src/main/res/drawable/setting_description_bottom.xml index 5c2cc907..8829d5b5 100644 --- a/Clover/app/src/main/res/drawable/setting_description_bottom.xml +++ b/Clover/app/src/main/res/drawable/setting_description_bottom.xml @@ -16,6 +16,6 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . --> - + diff --git a/Clover/app/src/main/res/drawable/setting_description_bottom_dark.xml b/Clover/app/src/main/res/drawable/setting_description_bottom_dark.xml new file mode 100644 index 00000000..103f74c0 --- /dev/null +++ b/Clover/app/src/main/res/drawable/setting_description_bottom_dark.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/Clover/app/src/main/res/drawable/setting_description_top.xml b/Clover/app/src/main/res/drawable/setting_description_top.xml index 30e597b3..c276a4fe 100644 --- a/Clover/app/src/main/res/drawable/setting_description_top.xml +++ b/Clover/app/src/main/res/drawable/setting_description_top.xml @@ -17,5 +17,5 @@ along with this program. If not, see . --> - + diff --git a/Clover/app/src/main/res/drawable/setting_description_top_dark.xml b/Clover/app/src/main/res/drawable/setting_description_top_dark.xml new file mode 100644 index 00000000..d0168da8 --- /dev/null +++ b/Clover/app/src/main/res/drawable/setting_description_top_dark.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/Clover/app/src/main/res/layout/cell_board_edit.xml b/Clover/app/src/main/res/layout/cell_board_edit.xml index 98eb674c..31d5b5e0 100644 --- a/Clover/app/src/main/res/layout/cell_board_edit.xml +++ b/Clover/app/src/main/res/layout/cell_board_edit.xml @@ -42,7 +42,7 @@ along with this program. If not, see . android:paddingLeft="16dp" android:paddingRight="16dp" android:singleLine="true" - android:textColor="#ff212121" + android:textColor="?text_color_primary" android:textSize="14sp" /> diff --git a/Clover/app/src/main/res/layout/cell_board_edit_header.xml b/Clover/app/src/main/res/layout/cell_board_edit_header.xml index e2d05605..7b616df0 100644 --- a/Clover/app/src/main/res/layout/cell_board_edit_header.xml +++ b/Clover/app/src/main/res/layout/cell_board_edit_header.xml @@ -28,7 +28,7 @@ along with this program. If not, see . android:layout_weight="1" android:gravity="center_vertical" android:padding="16dp" - android:textColor="#ff757575" + android:textColor="?text_color_primary" android:textSize="14sp" /> diff --git a/Clover/app/src/main/res/layout/cell_header.xml b/Clover/app/src/main/res/layout/cell_header.xml index 9ccba44d..e2770c41 100644 --- a/Clover/app/src/main/res/layout/cell_header.xml +++ b/Clover/app/src/main/res/layout/cell_header.xml @@ -31,7 +31,7 @@ along with this program. If not, see . android:paddingLeft="16dp" android:paddingRight="16dp" android:singleLine="true" - android:textColor="#ff757575" + android:textColor="?text_color_primary" android:textSize="14sp" /> . android:paddingLeft="16dp" android:paddingRight="16dp" android:singleLine="true" - android:textColor="#ff212121" + android:textColor="?text_color_primary" android:textSize="14sp" /> diff --git a/Clover/app/src/main/res/layout/cell_pin.xml b/Clover/app/src/main/res/layout/cell_pin.xml index da247404..257cb680 100644 --- a/Clover/app/src/main/res/layout/cell_pin.xml +++ b/Clover/app/src/main/res/layout/cell_pin.xml @@ -40,7 +40,7 @@ along with this program. If not, see . android:paddingLeft="16dp" android:paddingRight="16dp" android:singleLine="true" - android:textColor="#ff212121" + android:textColor="?text_color_primary" android:textSize="14sp" /> . android:gravity="center" android:paddingRight="16dp" android:singleLine="true" - android:textColor="#ff000000" + android:textColor="?text_color_primary" android:textSize="14sp" /> diff --git a/Clover/app/src/main/res/layout/cell_thread_status.xml b/Clover/app/src/main/res/layout/cell_thread_status.xml index 02ac1d40..c16dba90 100644 --- a/Clover/app/src/main/res/layout/cell_thread_status.xml +++ b/Clover/app/src/main/res/layout/cell_thread_status.xml @@ -25,6 +25,6 @@ along with this program. If not, see . android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" - android:textColor="#ff757575" /> + android:textColor="?text_color_primary" /> diff --git a/Clover/app/src/main/res/layout/controller_board_edit.xml b/Clover/app/src/main/res/layout/controller_board_edit.xml index 51e68433..0cf9020b 100644 --- a/Clover/app/src/main/res/layout/controller_board_edit.xml +++ b/Clover/app/src/main/res/layout/controller_board_edit.xml @@ -18,7 +18,7 @@ along with this program. If not, see . . android:id="@+id/root_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#ffffffff" + android:background="?backcolor" android:orientation="vertical"> @@ -49,7 +48,7 @@ along with this program. If not, see . android:layout_width="200dp" android:layout_height="match_parent" android:layout_gravity="left" - android:background="#ffffffff"> + android:background="?backcolor"> . android:layout_width="match_parent" android:layout_height="0dp" android:padding="8dp" - android:textColor="#ffff0000" + android:textColor="#fff44336" android:visibility="gone" /> . android:id="@+id/search_status" android:layout_width="match_parent" android:layout_height="0dp" - android:background="#ffffffff" + android:background="?backcolor" android:elevation="4dp" android:gravity="center" android:padding="8dp" android:singleLine="true" - android:textColor="#ff757575" + android:textColor="?text_color_secondary" android:visibility="gone" tools:ignore="UnusedAttribute" /> diff --git a/Clover/app/src/main/res/layout/setting_description.xml b/Clover/app/src/main/res/layout/setting_description.xml index 9047d8a9..0d1d0ebf 100644 --- a/Clover/app/src/main/res/layout/setting_description.xml +++ b/Clover/app/src/main/res/layout/setting_description.xml @@ -26,7 +26,7 @@ along with this program. If not, see . android:paddingLeft="16dp" android:paddingRight="16dp" android:singleLine="true" - android:textColor="@drawable/setting_description_top" + android:textColor="?setting_description_top" android:textSize="16sp" /> . android:paddingLeft="16dp" android:paddingRight="16dp" android:singleLine="true" - android:textColor="@drawable/setting_description_bottom" + android:textColor="?setting_description_bottom" android:textSize="14sp" /> diff --git a/Clover/app/src/main/res/layout/setting_divider.xml b/Clover/app/src/main/res/layout/setting_divider.xml index e93e2b8b..9ec4b8b4 100644 --- a/Clover/app/src/main/res/layout/setting_divider.xml +++ b/Clover/app/src/main/res/layout/setting_divider.xml @@ -19,4 +19,4 @@ along with this program. If not, see . android:id="@+id/divider" android:layout_width="match_parent" android:layout_height="1px" - android:background="#22000000" /> + android:background="?divider_color" /> diff --git a/Clover/app/src/main/res/layout/setting_group.xml b/Clover/app/src/main/res/layout/setting_group.xml index c3ea7ae7..3a10d058 100644 --- a/Clover/app/src/main/res/layout/setting_group.xml +++ b/Clover/app/src/main/res/layout/setting_group.xml @@ -22,7 +22,7 @@ along with this program. If not, see . android:layout_height="wrap_content" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" - android:background="#ffffffff" + android:background="?backcolor" android:elevation="4dp" android:orientation="vertical" tools:ignore="UnusedAttribute"> @@ -37,7 +37,7 @@ along with this program. If not, see . android:paddingRight="16dp" android:paddingTop="16dp" android:singleLine="true" - android:textColor="#89000000" + android:textColor="?text_color_secondary" android:textSize="16sp" /> diff --git a/Clover/app/src/main/res/layout/settings_layout.xml b/Clover/app/src/main/res/layout/settings_layout.xml index d8df1c86..07299f24 100644 --- a/Clover/app/src/main/res/layout/settings_layout.xml +++ b/Clover/app/src/main/res/layout/settings_layout.xml @@ -18,7 +18,7 @@ along with this program. If not, see . + android:background="?backcolor_secondary"> . + android:background="?backcolor"> . android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/setting_pass_authenticated" - android:textColor="#dd000000" + android:textColor="?text_color_primary" android:textSize="20sp" /> @@ -92,7 +92,7 @@ along with this program. If not, see . android:paddingLeft="4dp" android:paddingRight="4dp" android:paddingTop="16dp" - android:textColor="#dd000000" + android:textColor="?text_color_primary" android:textSize="14sp" /> diff --git a/Clover/app/src/main/res/layout/settings_watch.xml b/Clover/app/src/main/res/layout/settings_watch.xml index dfa7a256..6a699047 100644 --- a/Clover/app/src/main/res/layout/settings_watch.xml +++ b/Clover/app/src/main/res/layout/settings_watch.xml @@ -19,7 +19,7 @@ along with this program. If not, see . android:id="@+id/crossfade" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#ffe5e5e5"> + android:background="?backcolor_secondary"> diff --git a/Clover/app/src/main/res/layout/toolbar_menu.xml b/Clover/app/src/main/res/layout/toolbar_menu.xml index d798cedf..2953dde5 100644 --- a/Clover/app/src/main/res/layout/toolbar_menu.xml +++ b/Clover/app/src/main/res/layout/toolbar_menu.xml @@ -41,7 +41,7 @@ along with this program. If not, see . android:minWidth="150dp" android:paddingLeft="16dp" android:singleLine="true" - android:textColor="#ffffffff" + android:textColor="?text_color_primary" android:textSize="20dp" /> . android:paddingLeft="16dp" android:paddingTop="29dp" android:singleLine="true" - android:textColor="#ffededed" + android:textColor="?text_color_secondary" android:textSize="14dp" /> diff --git a/Clover/app/src/main/res/layout/toolbar_menu_item.xml b/Clover/app/src/main/res/layout/toolbar_menu_item.xml index 9ab12086..11b92f65 100644 --- a/Clover/app/src/main/res/layout/toolbar_menu_item.xml +++ b/Clover/app/src/main/res/layout/toolbar_menu_item.xml @@ -24,5 +24,5 @@ along with this program. If not, see . android:paddingLeft="16dp" android:paddingRight="16dp" android:singleLine="true" - android:textColor="#ff000000" + android:textColor="?text_color_primary" android:textSize="16sp" /> diff --git a/Clover/app/src/main/res/values/attrs.xml b/Clover/app/src/main/res/values/attrs.xml index e8b50032..b6cd1486 100644 --- a/Clover/app/src/main/res/values/attrs.xml +++ b/Clover/app/src/main/res/values/attrs.xml @@ -21,6 +21,7 @@ along with this program. If not, see . + @@ -44,4 +45,7 @@ along with this program. If not, see . + + + diff --git a/Clover/app/src/main/res/values/styles.xml b/Clover/app/src/main/res/values/styles.xml index df2d8559..8e2fe846 100644 --- a/Clover/app/src/main/res/values/styles.xml +++ b/Clover/app/src/main/res/values/styles.xml @@ -22,17 +22,20 @@ along with this program. If not, see . -