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 .
-