From 281d4140562f6c1f0923d554aea817e019cbbb86 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 6 Dec 2024 08:19:36 +0100 Subject: [PATCH] Added restart interval option --- .../java/eu/faircode/email/EmailService.java | 1 + .../faircode/email/FragmentOptionsMisc.java | 27 ++++++++++++++++++- .../eu/faircode/email/ServiceSynchronize.java | 12 ++++----- .../main/res/layout/fragment_options_misc.xml | 25 ++++++++++++++++- app/src/main/res/values/strings.xml | 1 + 5 files changed, 58 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EmailService.java b/app/src/main/java/eu/faircode/email/EmailService.java index e1b9e37061..a8bb2d690b 100644 --- a/app/src/main/java/eu/faircode/email/EmailService.java +++ b/app/src/main/java/eu/faircode/email/EmailService.java @@ -128,6 +128,7 @@ public class EmailService implements AutoCloseable { static final int ENCRYPTION_NONE = 2; final static int DEFAULT_CONNECT_TIMEOUT = 20; // seconds + static final int DEFAULT_RESTART_INTERVAL = 4 * 60; // seconds final static boolean SEPARATE_STORE_CONNECTION = false; private final static int SEARCH_TIMEOUT = 90 * 1000; // milliseconds diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index 5ee7d23bec..2297a0a9d3 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -194,6 +194,8 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private SeekBar sbChunkSize; private TextView tvThreadRange; private SeekBar sbThreadRange; + private TextView tvRestartInterval; + private SeekBar sbRestartInterval; private SwitchCompat swAutoScroll; private SwitchCompat swUndoManager; private SwitchCompat swBrowserZoom; @@ -298,7 +300,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc "sqlite_integrity_check", "wal", "sqlite_checkpoints", "sqlite_analyze", "sqlite_auto_vacuum", "sqlite_sync_extra", "sqlite_cache", "legacy_queries", "cache_lists", "oauth_tabs", - "start_delay", "range_size", "chunk_size", "thread_range", + "start_delay", "range_size", "chunk_size", "thread_range", "restart_interval", "autoscroll_editor", "undo_manager", "browser_zoom", "fake_dark", "ignore_formatted_size", @@ -461,6 +463,8 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc sbChunkSize = view.findViewById(R.id.sbChunkSize); tvThreadRange = view.findViewById(R.id.tvThreadRange); sbThreadRange = view.findViewById(R.id.sbThreadRange); + tvRestartInterval = view.findViewById(R.id.tvRestartInterval); + sbRestartInterval = view.findViewById(R.id.sbRestartInterval); swAutoScroll = view.findViewById(R.id.swAutoScroll); swUndoManager = view.findViewById(R.id.swUndoManager); swBrowserZoom = view.findViewById(R.id.swBrowserZoom); @@ -1394,6 +1398,23 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc } }); + sbRestartInterval.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + prefs.edit().putInt("restart_interval", progress * 10).apply(); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + // Do nothing + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + // Do nothing + } + }); + swAutoScroll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -2540,6 +2561,10 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc tvThreadRange.setText(getString(R.string.title_advanced_thread_range, range)); sbThreadRange.setProgress(thread_range); + int restart_interval = prefs.getInt("restart_interval", EmailService.DEFAULT_RESTART_INTERVAL); + tvRestartInterval.setText(getString(R.string.title_advanced_restart_interval, restart_interval)); + sbRestartInterval.setProgress(restart_interval / 10); + swAutoScroll.setChecked(prefs.getBoolean("autoscroll_editor", false)); swUndoManager.setChecked(prefs.getBoolean("undo_manager", false)); swBrowserZoom.setChecked(prefs.getBoolean("browser_zoom", false)); diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index b7809ccaf0..6ef75b19b9 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -160,7 +160,6 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences private static final int FETCH_YIELD_DURATION = 50; // milliseconds private static final long WATCHDOG_INTERVAL = 60 * 60 * 1000L; // milliseconds private static final long MAX_QUOTA = 1000 * 1000 * 1000L; // KB - private static final int YAHOO_RESTART_INTERVAL = 120; // seconds private static final String ACTION_NEW_MESSAGE_COUNT = BuildConfig.APPLICATION_ID + ".NEW_MESSAGE_COUNT"; @@ -182,6 +181,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences "tcp_keep_alive", // force reconnect "ssl_harden", "ssl_harden_strict", "cert_strict", "cert_transparency", "check_names", "bouncy_castle", "bc_fips", // force reconnect "experiments", "debug", "protocol", // force reconnect + //"restart_interval", // force reconnect "auth_plain", "auth_login", "auth_ntlm", "auth_sasl", "auth_apop", // force reconnect "keep_alive_poll", "empty_pool", "idle_done", // force reconnect "exact_alarms" // force schedule @@ -1672,11 +1672,11 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (account.keep_alive_noop) { int timeout = prefs.getInt("timeout", EmailService.DEFAULT_CONNECT_TIMEOUT); - if (account.isYahoo() && timeout < YAHOO_RESTART_INTERVAL) { - int factor = YAHOO_RESTART_INTERVAL / timeout; - iservice.setRestartIdleInterval(timeout * factor); - } else - iservice.setRestartIdleInterval(timeout * 2 * 6); // 20 x 2 x 6 = 4 min + int restart_interval = prefs.getInt("restart_interval", EmailService.DEFAULT_RESTART_INTERVAL); + int factor = (timeout == 0 ? 0 : restart_interval / timeout); + int idle_interval = timeout * factor; + Log.i("Restart interval=" + restart_interval + " timeout=" + timeout + " factor=" + factor + " idle=" + idle_interval); + iservice.setRestartIdleInterval(idle_interval); } final Date lastStillHere = new Date(0); diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml index 045aad6c75..9b3486df24 100644 --- a/app/src/main/res/layout/fragment_options_misc.xml +++ b/app/src/main/res/layout/fragment_options_misc.xml @@ -1303,6 +1303,29 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvThreadRange" /> + + + + Range size: %1$d Chunk size: %1$d Thread range: %1$d days + Restart interval: %1$d s Auto scroll editor Use Android\'s undo manager Use browser zoom