diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index f9481b8a00..dc7babd716 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -299,6 +299,7 @@ public class AdapterMessage extends RecyclerView.Adapter languages; private static boolean debug; private int level; + private boolean webview_legacy; private boolean gotoTop = false; private Integer gotoPos = null; @@ -2430,7 +2431,7 @@ public class AdapterMessage extends RecyclerView.Adapter callback = new DiffUtil.ItemCallback() { @Override public boolean areItemsTheSame( diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index 63844ea030..afd0186e65 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -145,7 +145,7 @@ public class FragmentOptions extends FragmentBase { "swipe_reply", "language_detection", "quick_filter", "quick_scroll", - "experiments", "debug", "log_level", + "experiments", "debug", "log_level", "webview_legacy", "biometrics", "default_light" }; diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index 20c8e3e6fa..69ce30d8cb 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -140,6 +140,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private TextView tvChunkSize; private SeekBar sbChunkSize; private ImageButton ibSqliteCache; + private SwitchCompat swWebViewLegacy; private SwitchCompat swModSeq; private SwitchCompat swExpunge; private SwitchCompat swUidExpunge; @@ -183,7 +184,8 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc "experiments", "crash_reports", "cleanup_attachments", "protocol", "debug", "log_level", "query_threads", "wal", "checkpoints", "sqlite_cache", - "chunk_size", "use_modseq", "perform_expunge", "uid_expunge", + "chunk_size", "webview_legacy", + "use_modseq", "perform_expunge", "uid_expunge", "auth_plain", "auth_login", "auth_ntlm", "auth_sasl", "keep_alive_poll", "empty_pool", "idle_done", "exact_alarms", "infra", "dup_msgids", "test_iab" @@ -277,6 +279,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc ibSqliteCache = view.findViewById(R.id.ibSqliteCache); tvChunkSize = view.findViewById(R.id.tvChunkSize); sbChunkSize = view.findViewById(R.id.sbChunkSize); + swWebViewLegacy = view.findViewById(R.id.swWebViewLegacy); swModSeq = view.findViewById(R.id.swModSeq); swExpunge = view.findViewById(R.id.swExpunge); swUidExpunge = view.findViewById(R.id.swUidExpunge); @@ -834,6 +837,13 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc } }); + swWebViewLegacy.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("webview_legacy", checked).apply(); + } + }); + swModSeq.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -1381,6 +1391,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc tvChunkSize.setText(getString(R.string.title_advanced_chunk_size, chunk_size)); sbChunkSize.setProgress(chunk_size); + swWebViewLegacy.setChecked(prefs.getBoolean("webview_legacy", false)); swModSeq.setChecked(prefs.getBoolean("use_modseq", true)); swExpunge.setChecked(prefs.getBoolean("perform_expunge", true)); swUidExpunge.setChecked(prefs.getBoolean("uid_expunge", false)); diff --git a/app/src/main/java/eu/faircode/email/WebViewEx.java b/app/src/main/java/eu/faircode/email/WebViewEx.java index 9b1fd4b9aa..b344bb5155 100644 --- a/app/src/main/java/eu/faircode/email/WebViewEx.java +++ b/app/src/main/java/eu/faircode/email/WebViewEx.java @@ -48,6 +48,7 @@ import static androidx.webkit.WebSettingsCompat.FORCE_DARK_ON; public class WebViewEx extends WebView implements DownloadListener, View.OnLongClickListener { private int height; private int maxHeight; + private boolean legacy; private IWebView intf; private Runnable onPageLoaded; @@ -111,6 +112,7 @@ public class WebViewEx extends WebView implements DownloadListener, View.OnLongC int zoom = prefs.getInt("view_zoom", compact ? 0 : 1); int message_zoom = prefs.getInt("message_zoom", 100); boolean monospaced = prefs.getBoolean("monospaced", false); + legacy = prefs.getBoolean("webview_legacy", false); WebSettings settings = getSettings(); @@ -215,10 +217,17 @@ public class WebViewEx extends WebView implements DownloadListener, View.OnLongC @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (height > getMinimumHeight()) - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(Math.min(height, maxHeight), MeasureSpec.AT_MOST)); - else - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST)); + if (legacy) { + if (height > getMinimumHeight()) + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST)); + else + super.onMeasure(widthMeasureSpec, heightMeasureSpec); // Unspecified + } else { + if (height > getMinimumHeight()) + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(Math.min(height, maxHeight), MeasureSpec.AT_MOST)); + else + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST)); + } int mh = getMeasuredHeight(); Log.i("Measured height=" + mh + " last=" + height + "/" + maxHeight + " ch=" + getContentHeight()); diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml index 79f5611413..48a914387d 100644 --- a/app/src/main/res/layout/fragment_options_misc.xml +++ b/app/src/main/res/layout/fragment_options_misc.xml @@ -781,6 +781,18 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvChunkSize" /> + + Checkpoints Sqlite cache: %1$s %% - %2$s Chunk size: %1$d + Old WebView behavior MODSEQ AUTO EXPUNGE UID EXPUNGE