FairEmail/app/src/main/java/eu/faircode/email/FragmentDialogTheme.java

273 lines
12 KiB
Java
Raw Normal View History

2021-01-18 13:04:10 +00:00
package eu.faircode.email;
import android.app.Dialog;
2021-06-27 06:13:56 +00:00
import android.content.Context;
2021-01-18 13:04:10 +00:00
import android.content.DialogInterface;
import android.content.SharedPreferences;
2021-02-08 15:22:09 +00:00
import android.graphics.Paint;
2021-01-18 13:04:10 +00:00
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.SwitchCompat;
2021-06-27 06:13:56 +00:00
import androidx.core.content.ContextCompat;
2021-01-18 13:04:10 +00:00
import androidx.preference.PreferenceManager;
public class FragmentDialogTheme extends FragmentDialogBase {
private RadioGroup rgTheme;
private SwitchCompat swReverse;
private RadioGroup rgThemeOptions;
private SwitchCompat swBlack;
private TextView tvSystem;
2021-02-08 15:22:09 +00:00
private TextView tvMore;
2021-01-18 13:04:10 +00:00
private void eval() {
int checkedId = rgTheme.getCheckedRadioButtonId();
boolean grey = (checkedId == R.id.rbThemeGrey);
2021-06-27 06:13:56 +00:00
boolean solarized = (checkedId == R.id.rbThemeSolarized);
boolean colored = (grey || solarized ||
2021-01-18 13:04:10 +00:00
checkedId == R.id.rbThemeBlueOrange ||
2021-01-19 18:42:07 +00:00
checkedId == R.id.rbThemeRedGreen ||
checkedId == R.id.rbThemeYellowPurple);
2021-01-18 13:04:10 +00:00
int optionId = rgThemeOptions.getCheckedRadioButtonId();
2021-06-27 06:13:56 +00:00
swReverse.setEnabled(colored && !grey && !solarized);
2021-01-18 13:04:10 +00:00
rgThemeOptions.setEnabled(colored);
for (int i = 0; i < rgThemeOptions.getChildCount(); i++)
rgThemeOptions.getChildAt(i).setEnabled(colored);
2021-06-27 06:13:56 +00:00
swBlack.setEnabled(colored && !grey && !solarized && optionId != R.id.rbThemeLight);
2021-01-18 13:04:10 +00:00
tvSystem.setEnabled(colored && optionId == R.id.rbThemeSystem);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_theme, null);
rgTheme = dview.findViewById(R.id.rgTheme);
swReverse = dview.findViewById(R.id.swReverse);
rgThemeOptions = dview.findViewById(R.id.rgThemeOptions);
swBlack = dview.findViewById(R.id.swBlack);
tvSystem = dview.findViewById(R.id.tvSystem);
2021-02-08 15:22:09 +00:00
tvMore = dview.findViewById(R.id.tvMore);
2021-01-18 13:04:10 +00:00
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
String theme = prefs.getString("theme", "blue_orange_system");
rgTheme.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
eval();
}
});
swReverse.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
eval();
}
});
rgThemeOptions.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
eval();
}
});
swBlack.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
eval();
}
});
boolean reversed =
(theme.startsWith("orange_blue") ||
theme.startsWith("purple_yellow") ||
theme.startsWith("green_red"));
boolean dark = theme.endsWith("dark");
boolean system = (theme.endsWith("system") || theme.endsWith("system_black"));
boolean black = (!"black".equals(theme) && theme.endsWith("black"));
swReverse.setChecked(reversed);
if (system)
rgThemeOptions.check(R.id.rbThemeSystem);
else if (dark || black)
rgThemeOptions.check(R.id.rbThemeDark);
else
rgThemeOptions.check(R.id.rbThemeLight);
swBlack.setChecked(black);
switch (theme) {
case "light":
case "dark":
case "system":
case "blue_orange_system":
case "blue_orange_system_black":
case "blue_orange_light":
case "blue_orange_dark":
case "blue_orange_black":
case "orange_blue_system":
case "orange_blue_system_black":
case "orange_blue_light":
case "orange_blue_dark":
case "orange_blue_black":
rgTheme.check(R.id.rbThemeBlueOrange);
break;
case "red_green_system":
case "red_green_system_black":
case "red_green_light":
case "red_green_dark":
case "red_green_black":
case "green_red_system":
case "green_red_system_black":
case "green_red_light":
case "green_red_dark":
case "green_red_black":
rgTheme.check(R.id.rbThemeRedGreen);
break;
2021-01-19 18:42:07 +00:00
case "yellow_purple_system":
case "yellow_purple_system_black":
case "yellow_purple_light":
case "yellow_purple_dark":
case "yellow_purple_black":
case "purple_yellow_system":
case "purple_yellow_system_black":
case "purple_yellow_light":
case "purple_yellow_dark":
case "purple_yellow_black":
rgTheme.check(R.id.rbThemeYellowPurple);
break;
2021-06-26 18:14:40 +00:00
2021-01-18 13:04:10 +00:00
case "grey_system":
case "grey_light":
case "grey_dark":
rgTheme.check(R.id.rbThemeGrey);
break;
2021-06-26 18:14:40 +00:00
case "solarized":
2021-06-27 06:13:56 +00:00
case "solarized_light":
case "solarized_dark":
case "solarized_system":
2021-06-26 18:14:40 +00:00
rgTheme.check(R.id.rbThemeSolarized);
break;
2021-01-18 13:04:10 +00:00
case "black":
rgTheme.check(R.id.rbThemeBlack);
break;
case "black_and_white":
rgTheme.check(R.id.rbThemeBlackAndWhite);
break;
}
2021-02-08 15:22:09 +00:00
tvMore.setPaintFlags(tvMore.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Helper.viewFAQ(v.getContext(), 164);
}
});
2021-01-18 13:04:10 +00:00
return new AlertDialog.Builder(getContext())
.setView(dview)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getActivity().getIntent().putExtra("tab", "display");
ContactInfo.clearCache(getContext());
int optionId = rgThemeOptions.getCheckedRadioButtonId();
boolean reverse = (swReverse.isEnabled() && swReverse.isChecked());
boolean dark = (rgThemeOptions.isEnabled() && optionId == R.id.rbThemeDark);
boolean system = (rgThemeOptions.isEnabled() && optionId == R.id.rbThemeSystem);
boolean black = (swBlack.isEnabled() && swBlack.isChecked());
SharedPreferences.Editor editor = prefs.edit();
editor.remove("highlight_color");
2021-02-05 10:15:02 +00:00
int checkedRadioButtonId = rgTheme.getCheckedRadioButtonId();
if (checkedRadioButtonId == R.id.rbThemeBlueOrange) {
if (system)
editor.putString("theme",
(reverse ? "orange_blue_system" : "blue_orange_system") +
(black ? "_black" : "")).apply();
else
editor.putString("theme",
(reverse ? "orange_blue" : "blue_orange") +
(black ? "_black" : dark ? "_dark" : "_light")).apply();
} else if (checkedRadioButtonId == R.id.rbThemeRedGreen) {
if (system)
editor.putString("theme",
(reverse ? "green_red_system" : "red_green_system") +
(black ? "_black" : "")).apply();
else
editor.putString("theme",
(reverse ? "green_red" : "red_green") +
(black ? "_black" : dark ? "_dark" : "_light")).apply();
} else if (checkedRadioButtonId == R.id.rbThemeYellowPurple) {
if (system)
editor.putString("theme",
(reverse ? "purple_yellow_system" : "yellow_purple_system") +
(black ? "_black" : "")).apply();
else
editor.putString("theme",
(reverse ? "purple_yellow" : "yellow_purple") +
(black ? "_black" : dark ? "_dark" : "_light")).apply();
} else if (checkedRadioButtonId == R.id.rbThemeGrey) {
if (system)
editor.putString("theme", "grey_system").apply();
else
editor.putString("theme",
"grey" + (dark ? "_dark" : "_light")).apply();
2021-06-26 18:14:40 +00:00
} else if (checkedRadioButtonId == R.id.rbThemeSolarized) {
2021-06-27 06:13:56 +00:00
if (system)
editor.putString("theme", "solarized_system").apply();
else
editor.putString("theme",
"solarized" + (dark ? "_dark" : "_light")).apply();
2021-02-05 10:15:02 +00:00
} else if (checkedRadioButtonId == R.id.rbThemeBlack) {
editor.putString("theme", "black").apply();
} else if (checkedRadioButtonId == R.id.rbThemeBlackAndWhite) {
editor.putString("theme", "black_and_white").apply();
2021-01-18 13:04:10 +00:00
}
editor.apply();
}
})
.setNegativeButton(android.R.string.cancel, null)
.create();
}
2021-06-27 06:13:56 +00:00
static void setBackground(Context context, View view, boolean compose) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean cards = prefs.getBoolean("cards", true);
boolean beige = prefs.getBoolean("beige", true);
String theme = prefs.getString("theme", "blue_orange_system");
boolean dark = Helper.isDarkTheme(context);
boolean solarized = (theme != null && theme.startsWith("solarized"));
if (compose) {
if (cards && (!dark || solarized))
view.setBackgroundColor(Helper.resolveColor(context, R.attr.colorCardBackground));
} else {
if (cards && !dark && !solarized)
view.setBackgroundColor(ContextCompat.getColor(context, beige
? R.color.lightColorBackground_cards_beige
: R.color.lightColorBackground_cards));
}
}
2021-01-18 13:04:10 +00:00
}