use of me.ccrama.redditslide.Visuals.ColorPreferences in project Slide by ccrama.
the class SubredditListView method onCreateView.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), new ColorPreferences(inflater.getContext()).getThemeSubreddit(where));
View v = LayoutInflater.from(contextThemeWrapper).inflate(R.layout.fragment_verticalcontent, container, false);
rv = v.findViewById(R.id.vertical_content);
final RecyclerView.LayoutManager mLayoutManager = new PreCachingLayoutManager(getActivity());
rv.setLayoutManager(mLayoutManager);
rv.setItemAnimator(new SlideUpAlphaAnimator().withInterpolator(new LinearOutSlowInInterpolator()));
mSwipeRefreshLayout = v.findViewById(R.id.activity_main_swipe_refresh_layout);
mSwipeRefreshLayout.setColorSchemeColors(Palette.getColors("no sub", getContext()));
// If we use 'findViewById(R.id.header).getMeasuredHeight()', 0 is always returned.
// So, we estimate the height of the header in dp
mSwipeRefreshLayout.setProgressViewOffset(false, Constants.TAB_HEADER_VIEW_OFFSET - Constants.PTR_OFFSET_TOP, Constants.TAB_HEADER_VIEW_OFFSET + Constants.PTR_OFFSET_BOTTOM);
v.findViewById(R.id.post_floating_action_button).setVisibility(View.GONE);
doAdapter();
return v;
}
use of me.ccrama.redditslide.Visuals.ColorPreferences in project Slide by ccrama.
the class SettingsThemeFragment method setupSettingsThemeAccent.
private void setupSettingsThemeAccent() {
final LinearLayout accentLayout = (LinearLayout) context.findViewById(R.id.settings_theme_accent);
accentLayout.setOnClickListener(v -> {
final ChooseaccentBinding chooseaccentBinding = ChooseaccentBinding.inflate(context.getLayoutInflater());
final TextView title = chooseaccentBinding.title;
title.setBackgroundColor(Palette.getDefaultColor());
final LineColorPicker colorPicker = chooseaccentBinding.picker3;
int[] arrs = new int[ColorPreferences.getNumColorsFromThemeType(0)];
int i = 0;
for (ColorPreferences.Theme type : ColorPreferences.Theme.values()) {
if (type.getThemeType() == ColorPreferences.ColorThemeOptions.Dark.getValue()) {
arrs[i] = ContextCompat.getColor(context, type.getColor());
i++;
}
}
colorPicker.setColors(arrs);
colorPicker.setSelectedColor(ContextCompat.getColor(context, new ColorPreferences(context).getFontStyle().getColor()));
chooseaccentBinding.ok.setOnClickListener(v1 -> {
SettingsThemeFragment.changed = true;
int color = colorPicker.getColor();
ColorPreferences.Theme t = null;
for (ColorPreferences.Theme type : ColorPreferences.Theme.values()) {
if (ContextCompat.getColor(context, type.getColor()) == color && back == type.getThemeType()) {
t = type;
LogUtil.v("Setting to " + t.getTitle());
break;
}
}
new ColorPreferences(context).setFontStyle(t);
context.restartActivity();
});
new AlertDialog.Builder(context).setView(chooseaccentBinding.getRoot()).show();
});
}
use of me.ccrama.redditslide.Visuals.ColorPreferences in project Slide by ccrama.
the class SettingsThemeFragment method setupSettingsThemeBase.
void setupSettingsThemeBase() {
final LinearLayout themeBase = (LinearLayout) context.findViewById(R.id.settings_theme_base);
themeBase.setOnClickListener(v -> {
final ChoosethemesmallBinding choosethemesmallBinding = ChoosethemesmallBinding.inflate(context.getLayoutInflater());
final View root = choosethemesmallBinding.getRoot();
final TextView title = choosethemesmallBinding.title;
title.setBackgroundColor(Palette.getDefaultColor());
if (SettingValues.isNight()) {
choosethemesmallBinding.nightmsg.setVisibility(View.VISIBLE);
}
for (final Pair<Integer, Integer> pair : ColorPreferences.themePairList) {
root.findViewById(pair.first).setOnClickListener(v1 -> {
SettingsThemeFragment.changed = true;
final String[] names = new ColorPreferences(context).getFontStyle().getTitle().split("_");
final String name = names[names.length - 1];
final String newName = name.replace("(", "");
for (final ColorPreferences.Theme theme : ColorPreferences.Theme.values()) {
if (theme.toString().contains(newName) && theme.getThemeType() == pair.second) {
back = theme.getThemeType();
new ColorPreferences(context).setFontStyle(theme);
context.restartActivity();
break;
}
}
});
}
new AlertDialog.Builder(context).setView(root).show();
});
}
use of me.ccrama.redditslide.Visuals.ColorPreferences in project Slide by ccrama.
the class SettingsThemeFragment method Bind.
public void Bind() {
final RelativeLayout colorTintModeLayout = (RelativeLayout) context.findViewById(R.id.settings_theme_colorTintMode);
final TextView currentTintTextView = (TextView) context.findViewById(R.id.settings_theme_tint_current);
final SwitchCompat tintEverywhereSwitch = (SwitchCompat) context.findViewById(R.id.settings_theme_tint_everywhere);
final SwitchCompat colorNavbarSwitch = (SwitchCompat) context.findViewById(R.id.settings_theme_colorNavbar);
final SwitchCompat colorIconSwitch = (SwitchCompat) context.findViewById(R.id.settings_theme_colorAppIcon);
back = new ColorPreferences(context).getFontStyle().getThemeType();
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// * App Theme */
setupSettingsThemePrimary();
setupSettingsThemeAccent();
setupSettingsThemeBase();
setupSettingsThemeNight();
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// * Tinting */
colorTintModeLayout.setOnClickListener(v -> {
final PopupMenu popup = new PopupMenu(context, v);
popup.getMenuInflater().inflate(R.menu.color_tinting_mode_settings, popup.getMenu());
popup.setOnMenuItemClickListener(item -> {
switch(item.getItemId()) {
case R.id.none:
setTintingMode(false, false);
break;
case R.id.background:
setTintingMode(true, false);
break;
case R.id.name:
setTintingMode(true, true);
break;
}
currentTintTextView.setText(SettingValues.colorBack ? SettingValues.colorSubName ? context.getString(R.string.subreddit_name_tint) : context.getString(R.string.card_background_tint) : context.getString(R.string.misc_none));
boolean enabled = !currentTintTextView.getText().equals(context.getString(R.string.misc_none));
tintEverywhereSwitch.setEnabled(enabled);
tintEverywhereSwitch.setChecked(SettingValues.colorEverywhere);
tintEverywhereSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
SettingValues.colorEverywhere = isChecked;
editSharedBooleanPreference(SettingValues.PREF_COLOR_EVERYWHERE, isChecked);
});
return true;
});
popup.show();
});
// Color tinting mode
currentTintTextView.setText(SettingValues.colorBack ? SettingValues.colorSubName ? context.getString(R.string.subreddit_name_tint) : context.getString(R.string.card_background_tint) : context.getString(R.string.misc_none));
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
boolean enabled = !currentTintTextView.getText().equals(context.getString(R.string.misc_none));
tintEverywhereSwitch.setEnabled(enabled);
tintEverywhereSwitch.setChecked(SettingValues.colorEverywhere);
tintEverywhereSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
SettingValues.colorEverywhere = isChecked;
editSharedBooleanPreference(SettingValues.PREF_COLOR_EVERYWHERE, isChecked);
});
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
colorNavbarSwitch.setChecked(SettingValues.colorNavBar);
colorNavbarSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
SettingsThemeFragment.changed = true;
SettingValues.colorNavBar = isChecked;
editSharedBooleanPreference(SettingValues.PREF_COLOR_NAV_BAR, isChecked);
context.themeSystemBars("");
if (!isChecked) {
context.getWindow().setNavigationBarColor(Color.TRANSPARENT);
}
});
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
colorIconSwitch.setChecked(SettingValues.colorIcon);
colorIconSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
SettingValues.colorIcon = isChecked;
editSharedBooleanPreference(SettingValues.PREF_COLOR_ICON, isChecked);
if (isChecked) {
setComponentState(Slide.class.getPackage().getName() + ".Slide", PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
setComponentState(ColorPreferences.getIconName(context, Reddit.colors.getInt("DEFAULTCOLOR", 0)), PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
} else {
setComponentState(ColorPreferences.getIconName(context, Reddit.colors.getInt("DEFAULTCOLOR", 0)), PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
setComponentState(Slide.class.getPackage().getName() + ".Slide", PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
}
});
}
use of me.ccrama.redditslide.Visuals.ColorPreferences in project Slide by ccrama.
the class SettingsSubAdapter method showSubThemeEditor.
/**
* Displays the subreddit color chooser
* It is possible to color multiple subreddits at the same time
*
* @param subreddits Subreddits as an array
* @param context Context for getting colors
* @param dialoglayout The subchooser layout (R.layout.colorsub)
*/
public static void showSubThemeEditor(final ArrayList<String> subreddits, final Activity context, View dialoglayout) {
if (subreddits.isEmpty()) {
return;
}
final boolean multipleSubs = (subreddits.size() > 1);
boolean isAlternateLayout;
int currentColor;
int currentAccentColor;
final ColorPreferences colorPrefs = new ColorPreferences(context);
final String subreddit = multipleSubs ? null : subreddits.get(0);
final SwitchCompat bigPics = dialoglayout.findViewById(R.id.bigpics);
final SwitchCompat selftext = dialoglayout.findViewById(R.id.selftext);
// Selected multiple subreddits
if (multipleSubs) {
// Check if all selected subs have the same settings
int previousSubColor = 0;
int previousSubAccent = 0;
bigPics.setChecked(SettingValues.bigPicEnabled);
selftext.setChecked(SettingValues.cardText);
boolean sameMainColor = true;
boolean sameAccentColor = true;
for (String sub : subreddits) {
int currentSubColor = Palette.getColor(sub);
int currentSubAccent = colorPrefs.getColor("");
if (previousSubColor != 0 && previousSubAccent != 0) {
if (currentSubColor != previousSubColor) {
sameMainColor = false;
} else if (currentSubAccent != previousSubAccent) {
sameAccentColor = false;
}
}
if (!sameMainColor && !sameAccentColor) {
break;
}
previousSubAccent = currentSubAccent;
previousSubColor = currentSubColor;
}
currentColor = Palette.getDefaultColor();
currentAccentColor = colorPrefs.getColor("");
isAlternateLayout = false;
// If all selected subs have the same settings, display them
if (sameMainColor) {
currentColor = previousSubColor;
}
if (sameAccentColor) {
currentAccentColor = previousSubAccent;
}
} else {
// Is only one selected sub
currentColor = Palette.getColor(subreddit);
isAlternateLayout = SettingValues.prefs.contains(Reddit.PREF_LAYOUT + subreddit);
currentAccentColor = colorPrefs.getColor(subreddit);
bigPics.setChecked(SettingValues.isPicsEnabled(subreddit));
selftext.setChecked(SettingValues.isSelftextEnabled(subreddit));
}
final TextView title = dialoglayout.findViewById(R.id.title);
title.setBackgroundColor(currentColor);
if (multipleSubs) {
StringBuilder titleStringBuilder = new StringBuilder();
for (String sub : subreddits) {
// if the subreddit is the frontpage, don't put "/r/" in front of it
if (sub.equals("frontpage")) {
titleStringBuilder.append(sub).append(", ");
} else {
if (sub.contains("/m/")) {
titleStringBuilder.append(sub).append(", ");
} else {
titleStringBuilder.append("/r/").append(sub).append(", ");
}
}
}
String titleString = titleStringBuilder.toString();
titleString = titleString.substring(0, titleString.length() - 2);
title.setMaxLines(3);
title.setText(titleString);
} else {
if (subreddit.contains("/m/")) {
title.setText(subreddit);
} else {
// if the subreddit is the frontpage, don't put "/r/" in front of it
title.setText(((subreddit.equals("frontpage")) ? "frontpage" : "/r/" + subreddit));
}
}
{
// Primary color pickers
final LineColorPicker colorPickerPrimary = dialoglayout.findViewById(R.id.picker);
// shades of primary colors
final LineColorPicker colorPickerPrimaryShades = dialoglayout.findViewById(R.id.picker2);
colorPickerPrimary.setColors(ColorPreferences.getBaseColors(context));
// Iterate through all colors and check if it matches the current color of the sub, then select it
for (int i : colorPickerPrimary.getColors()) {
for (int i2 : ColorPreferences.getColors(context, i)) {
if (i2 == currentColor) {
colorPickerPrimary.setSelectedColor(i);
colorPickerPrimaryShades.setColors(ColorPreferences.getColors(context, i));
colorPickerPrimaryShades.setSelectedColor(i2);
break;
}
}
}
// Base color changed
colorPickerPrimary.setOnColorChangedListener(new OnColorChangedListener() {
@Override
public void onColorChanged(int c) {
// Show variations of the base color
colorPickerPrimaryShades.setColors(ColorPreferences.getColors(context, c));
colorPickerPrimaryShades.setSelectedColor(c);
}
});
colorPickerPrimaryShades.setOnColorChangedListener(new OnColorChangedListener() {
@Override
public void onColorChanged(int i) {
if (context instanceof MainActivity) {
((MainActivity) context).updateColor(colorPickerPrimaryShades.getColor(), subreddit);
}
title.setBackgroundColor(colorPickerPrimaryShades.getColor());
}
});
{
/* TODO TextView dialogButton = (TextView) dialoglayout.findViewById(R.id.reset);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Palette.removeColor(subreddit);
hea.setBackgroundColor(Palette.getDefaultColor());
findViewById(R.id.header).setBackgroundColor(Palette.getDefaultColor());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.setStatusBarColor(Palette.getDarkerColor(Palette.getDefaultColor()));
context.setTaskDescription(new ActivityManager.TaskDescription(subreddit, ((BitmapDrawable) getResources().getDrawable(R.drawable.ic_launcher)).getBitmap(), colorPicker2.getColor()));
}
title.setBackgroundColor(Palette.getDefaultColor());
int cx = center.getWidth() / 2;
int cy = center.getHeight() / 2;
int initialRadius = body.getWidth();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Animator anim =
ViewAnimationUtils.createCircularReveal(body, cx, cy, initialRadius, 0);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
body.setVisibility(View.GONE);
}
});
anim.start();
} else {
body.setVisibility(View.GONE);
}
}
});*/
}
// Accent color picker
final LineColorPicker colorPickerAcc = dialoglayout.findViewById(R.id.picker3);
{
// Get all possible accent colors (for day theme)
int[] arrs = new int[ColorPreferences.getNumColorsFromThemeType(0)];
int i = 0;
for (ColorPreferences.Theme type : ColorPreferences.Theme.values()) {
if (type.getThemeType() == ColorPreferences.ColorThemeOptions.Dark.getValue()) {
arrs[i] = ContextCompat.getColor(context, type.getColor());
i++;
}
colorPickerAcc.setColors(arrs);
colorPickerAcc.setSelectedColor(currentAccentColor);
}
}
new AlertDialog.Builder(context).setView(dialoglayout).setCancelable(false).setNegativeButton(R.string.btn_cancel, (dialog, which) -> {
if (context instanceof MainActivity) {
((MainActivity) context).updateColor(Palette.getColor(subreddit), subreddit);
}
}).setNeutralButton(R.string.btn_reset, (dialog, which) -> {
String subTitles;
if (multipleSubs) {
StringBuilder subTitlesBuilder = new StringBuilder();
for (String sub : subreddits) {
// if the subreddit is the frontpage, don't put "/r/" in front of it
if (sub.equals("frontpage")) {
subTitlesBuilder.append(sub).append(", ");
} else {
subTitlesBuilder.append("/r/").append(sub).append(", ");
}
}
subTitles = subTitlesBuilder.toString();
subTitles = subTitles.substring(0, subTitles.length() - 2);
} else {
// if the subreddit is the frontpage, don't put "/r/" in front of it
subTitles = (subreddit.equals("frontpage") ? "frontpage" : "/r/" + subreddit);
}
String titleStart = context.getString(R.string.settings_delete_sub_settings, subTitles);
titleStart = titleStart.replace("/r//r/", "/r/");
if (titleStart.contains("/r/frontpage")) {
titleStart = titleStart.replace("/r/frontpage", "frontpage");
}
new AlertDialog.Builder(context).setTitle(titleStart).setPositiveButton(R.string.btn_yes, (dialog1, which1) -> {
for (String sub : subreddits) {
Palette.removeColor(sub);
// Remove layout settings
SettingValues.prefs.edit().remove(Reddit.PREF_LAYOUT + sub).apply();
// Remove accent / font color settings
new ColorPreferences(context).removeFontStyle(sub);
SettingValues.resetPicsEnabled(sub);
SettingValues.resetSelftextEnabled(sub);
}
if (context instanceof MainActivity) {
((MainActivity) context).reloadSubs();
} else if (context instanceof SettingsSubreddit) {
((SettingsSubreddit) context).reloadSubList();
} else if (context instanceof SubredditView) {
((SubredditView) context).restartTheme();
}
}).setNegativeButton(R.string.btn_no, null).show();
}).setPositiveButton(R.string.btn_ok, (dialog, which) -> {
final int newPrimaryColor = colorPickerPrimaryShades.getColor();
final int newAccentColor = colorPickerAcc.getColor();
for (String sub : subreddits) {
// Set main color
if (bigPics.isChecked() != SettingValues.isPicsEnabled(sub)) {
SettingValues.setPicsEnabled(sub, bigPics.isChecked());
}
if (selftext.isChecked() != SettingValues.isSelftextEnabled(sub)) {
SettingValues.setSelftextEnabled(sub, selftext.isChecked());
}
// Only do set colors if either subreddit theme color has changed
if (Palette.getColor(sub) != newPrimaryColor || Palette.getDarkerColor(sub) != newAccentColor) {
if (newPrimaryColor != Palette.getDefaultColor()) {
Palette.setColor(sub, newPrimaryColor);
} else {
Palette.removeColor(sub);
}
// Set accent color
ColorPreferences.Theme t = null;
// Do not save accent color if it matches the default accent color
if (newAccentColor != ContextCompat.getColor(context, colorPrefs.getFontStyle().getColor()) || newAccentColor != ContextCompat.getColor(context, colorPrefs.getFontStyleSubreddit(sub).getColor())) {
LogUtil.v("Accent colors not equal");
int back = new ColorPreferences(context).getFontStyle().getThemeType();
for (ColorPreferences.Theme type : ColorPreferences.Theme.values()) {
if (ContextCompat.getColor(context, type.getColor()) == newAccentColor && back == type.getThemeType()) {
t = type;
LogUtil.v("Setting accent color to " + t.getTitle());
break;
}
}
} else {
new ColorPreferences(context).removeFontStyle(sub);
}
if (t != null) {
colorPrefs.setFontStyle(t, sub);
}
}
// Set layout
SettingValues.prefs.edit().putBoolean(Reddit.PREF_LAYOUT + sub, true).apply();
}
// Only refresh stuff if the user changed something
if (Palette.getColor(subreddit) != newPrimaryColor || Palette.getDarkerColor(subreddit) != newAccentColor) {
if (context instanceof MainActivity) {
((MainActivity) context).reloadSubs();
} else if (context instanceof SettingsSubreddit) {
((SettingsSubreddit) context).reloadSubList();
} else if (context instanceof SubredditView) {
((SubredditView) context).restartTheme();
}
}
}).show();
}
}
Aggregations