mirror of https://github.com/M66B/FairEmail.git
Added fake dark
This commit is contained in:
parent
7d2f1f3cc8
commit
92e8732d6c
|
@ -300,6 +300,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
private static boolean debug;
|
||||
private int level;
|
||||
private boolean canDarken;
|
||||
private boolean fake_dark;
|
||||
private boolean webview_legacy;
|
||||
private boolean show_recent;
|
||||
|
||||
|
@ -2170,7 +2171,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
ibSearch.setVisibility(tools && !outbox && button_search && (froms > 0 || tos > 0) ? View.VISIBLE : View.GONE);
|
||||
ibTranslate.setVisibility(tools && !outbox && button_translate && DeepL.isAvailable(context) && message.content ? View.VISIBLE : View.GONE);
|
||||
ibForceLight.setVisibility(tools && full && dark && button_force_light && message.content ? View.VISIBLE : View.GONE);
|
||||
ibForceLight.setImageLevel(!canDarken || force_light ? 1 : 0);
|
||||
ibForceLight.setImageLevel(!(canDarken || fake_dark) || force_light ? 1 : 0);
|
||||
ibImportance.setVisibility(tools && button_importance && !outbox && seen ? View.VISIBLE : View.GONE);
|
||||
ibHide.setVisibility(tools && button_hide && !outbox ? View.VISIBLE : View.GONE);
|
||||
ibSeen.setVisibility(tools && button_seen && !outbox && seen ? View.VISIBLE : View.GONE);
|
||||
|
@ -2663,6 +2664,9 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
float scale = (size == 0 || textSize == 0 ? 1.0f : size / (textSize * message_zoom / 100f));
|
||||
args.putFloat("scale", scale);
|
||||
|
||||
boolean dark = Helper.isDarkTheme(context);
|
||||
args.putBoolean("fake_dark", !canDarken && fake_dark && dark && !force_light);
|
||||
|
||||
new SimpleTask<Object>() {
|
||||
@Override
|
||||
protected void onPreExecute(Bundle args) {
|
||||
|
@ -2820,6 +2824,10 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
HtmlHelper.restorePre(document);
|
||||
}
|
||||
|
||||
boolean fake_dark = args.getBoolean("fake_dark");
|
||||
if (fake_dark)
|
||||
HtmlHelper.fakeDark(document);
|
||||
|
||||
boolean browser_zoom = prefs.getBoolean("browser_zoom", false);
|
||||
int message_zoom = prefs.getInt("message_zoom", 100);
|
||||
if (browser_zoom && message_zoom != 100) {
|
||||
|
@ -4902,7 +4910,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
});
|
||||
|
||||
boolean isDark = Helper.isDarkTheme(context);
|
||||
tvDark.setVisibility(isDark && !canDarken ? View.VISIBLE : View.GONE);
|
||||
tvDark.setVisibility(isDark && !(canDarken || fake_dark) ? View.VISIBLE : View.GONE);
|
||||
} else {
|
||||
boolean disable_tracking = prefs.getBoolean("disable_tracking", true);
|
||||
|
||||
|
@ -6248,35 +6256,34 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
}
|
||||
|
||||
private void onActionForceLight(TupleMessageEx message) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
|
||||
View view = LayoutInflater.from(context).inflate(R.layout.dialog_dark, null);
|
||||
final Button btnIssue = view.findViewById(R.id.btnIssue);
|
||||
|
||||
btnIssue.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Uri uri = Uri.parse("https://issuetracker.google.com/issues/237785596");
|
||||
Helper.view(v.getContext(), uri, true);
|
||||
}
|
||||
});
|
||||
|
||||
new AlertDialog.Builder(context)
|
||||
.setView(view)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show();
|
||||
return;
|
||||
}
|
||||
|
||||
if (canDarken) {
|
||||
if (canDarken || fake_dark) {
|
||||
boolean force_light = !properties.getValue("force_light", message.id);
|
||||
properties.setValue("force_light", message.id, force_light);
|
||||
ibForceLight.setImageLevel(force_light ? 1 : 0);
|
||||
bindBody(message, false);
|
||||
} else {
|
||||
Intent update = new Intent(Intent.ACTION_VIEW)
|
||||
.setData(Uri.parse(Helper.PACKAGE_WEBVIEW))
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
context.startActivity(update);
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
|
||||
View view = LayoutInflater.from(context).inflate(R.layout.dialog_dark, null);
|
||||
final Button btnIssue = view.findViewById(R.id.btnIssue);
|
||||
|
||||
btnIssue.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Uri uri = Uri.parse("https://issuetracker.google.com/issues/237785596");
|
||||
Helper.view(v.getContext(), uri, true);
|
||||
}
|
||||
});
|
||||
|
||||
new AlertDialog.Builder(context)
|
||||
.setView(view)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show();
|
||||
} else {
|
||||
Intent update = new Intent(Intent.ACTION_VIEW)
|
||||
.setData(Uri.parse(Helper.PACKAGE_WEBVIEW))
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
context.startActivity(update);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7113,6 +7120,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
level = prefs.getInt("log_level", Log.getDefaultLogLevel());
|
||||
|
||||
this.canDarken = WebViewEx.isFeatureSupported(context, WebViewFeature.ALGORITHMIC_DARKENING);
|
||||
this.fake_dark = prefs.getBoolean("fake_dark", false);
|
||||
this.webview_legacy = prefs.getBoolean("webview_legacy", false);
|
||||
this.show_recent = prefs.getBoolean("show_recent", false);
|
||||
|
||||
|
|
|
@ -161,6 +161,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
|
|||
private SwitchCompat swUndoManager;
|
||||
private SwitchCompat swWebViewLegacy;
|
||||
private SwitchCompat swBrowserZoom;
|
||||
private SwitchCompat swFakeDark;
|
||||
private SwitchCompat swShowRecent;
|
||||
private SwitchCompat swModSeq;
|
||||
private SwitchCompat swUid;
|
||||
|
@ -216,7 +217,9 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
|
|||
"test2", "test3", "test4", "test5",
|
||||
"work_manager", // "external_storage",
|
||||
"query_threads", "wal", "sqlite_checkpoints", "sqlite_analyze", "sqlite_cache",
|
||||
"chunk_size", "thread_range", "undo_manager", "webview_legacy", "browser_zoom", "show_recent",
|
||||
"chunk_size", "thread_range", "undo_manager",
|
||||
"webview_legacy", "browser_zoom", "fake_dark",
|
||||
"show_recent",
|
||||
"use_modseq", "uid_command", "perform_expunge", "uid_expunge",
|
||||
"auth_plain", "auth_login", "auth_ntlm", "auth_sasl", "auth_apop",
|
||||
"keep_alive_poll", "empty_pool", "idle_done", "logarithmic_backoff",
|
||||
|
@ -338,6 +341,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
|
|||
swUndoManager = view.findViewById(R.id.swUndoManager);
|
||||
swWebViewLegacy = view.findViewById(R.id.swWebViewLegacy);
|
||||
swBrowserZoom = view.findViewById(R.id.swBrowserZoom);
|
||||
swFakeDark = view.findViewById(R.id.swFakeDark);
|
||||
swShowRecent = view.findViewById(R.id.swShowRecent);
|
||||
swModSeq = view.findViewById(R.id.swModSeq);
|
||||
swUid = view.findViewById(R.id.swUid);
|
||||
|
@ -1050,6 +1054,13 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
|
|||
}
|
||||
});
|
||||
|
||||
swFakeDark.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
||||
prefs.edit().putBoolean("fake_dark", checked).apply();
|
||||
}
|
||||
});
|
||||
|
||||
swShowRecent.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
|
||||
|
@ -1772,6 +1783,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
|
|||
swUndoManager.setChecked(prefs.getBoolean("undo_manager", false));
|
||||
swWebViewLegacy.setChecked(prefs.getBoolean("webview_legacy", false));
|
||||
swBrowserZoom.setChecked(prefs.getBoolean("browser_zoom", false));
|
||||
swFakeDark.setChecked(prefs.getBoolean("fake_dark", false));
|
||||
swShowRecent.setChecked(prefs.getBoolean("show_recent", false));
|
||||
swModSeq.setChecked(prefs.getBoolean("use_modseq", true));
|
||||
swUid.setChecked(prefs.getBoolean("uid_command", false));
|
||||
|
|
|
@ -2372,6 +2372,14 @@ public class HtmlHelper {
|
|||
document.select("head").append(sb.toString());
|
||||
}
|
||||
|
||||
static void fakeDark(Document document) {
|
||||
// https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/invert
|
||||
// https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/hue-rotate
|
||||
document.head().appendElement("style").html(
|
||||
"body { filter: invert(100%) hue-rotate(180deg) !important; background: black !important; }" +
|
||||
"img { filter: invert(100%) hue-rotate(180deg) !important; }");
|
||||
}
|
||||
|
||||
static String getLanguage(Context context, String subject, String text) {
|
||||
try {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
|
|
@ -369,6 +369,11 @@ public class WebViewEx extends WebView implements DownloadListener, View.OnLongC
|
|||
|
||||
public static boolean isFeatureSupported(Context context, String feature) {
|
||||
if (WebViewFeature.ALGORITHMIC_DARKENING.equals(feature)) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
boolean fake_dark = prefs.getBoolean("fake_dark", false);
|
||||
if (fake_dark)
|
||||
return false;
|
||||
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q)
|
||||
return false;
|
||||
|
||||
|
|
|
@ -1030,6 +1030,18 @@
|
|||
app:layout_constraintTop_toBottomOf="@id/swWebViewLegacy"
|
||||
app:switchPadding="12dp" />
|
||||
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/swFakeDark"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="12dp"
|
||||
android:checked="true"
|
||||
android:text="@string/title_advanced_fake_dark"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/swBrowserZoom"
|
||||
app:switchPadding="12dp" />
|
||||
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/swShowRecent"
|
||||
android:layout_width="0dp"
|
||||
|
@ -1039,7 +1051,7 @@
|
|||
android:text="@string/title_advanced_show_recent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/swBrowserZoom"
|
||||
app:layout_constraintTop_toBottomOf="@id/swFakeDark"
|
||||
app:switchPadding="12dp" />
|
||||
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
|
|
|
@ -760,6 +760,7 @@
|
|||
<string name="title_advanced_undo_manager" translatable="false">Use Android\'s undo manager</string>
|
||||
<string name="title_advanced_webview_legacy" translatable="false">Old WebView behavior</string>
|
||||
<string name="title_advanced_browser_zoom" translatable="false">Use browser zoom</string>
|
||||
<string name="title_advanced_fake_dark" translatable="false">Fake dark</string>
|
||||
<string name="title_advanced_show_recent" translatable="false">Show recent flag</string>
|
||||
<string name="title_advanced_modseq" translatable="false">MODSEQ</string>
|
||||
<string name="title_advanced_uid" translatable="false">UID command</string>
|
||||
|
|
Loading…
Reference in New Issue