diff --git a/FAQ.md b/FAQ.md
index 134a96d2f6..7b2fe8484b 100644
--- a/FAQ.md
+++ b/FAQ.md
@@ -201,6 +201,7 @@ FairEmail follows all the best practices for an email client as decribed in [thi
* [(120) Why are new message notifications not removed on opening the app?](#user-content-faq120)
* [(121) How are messages grouped into a conversation?](#user-content-faq121)
* [(122) Why is the recipient name/email address show with a warning color?](#user-content-faq122)
+* [(123) What does 'force sync'?](#user-content-faq123)
[I have another question.](#support)
@@ -2090,6 +2091,16 @@ Mostly this indicates that the message was received *via* an account with anothe
+
+**(123) What does 'force sync'?**
+
+FairEmail will wait a fixed time after connectivity changes
+and will use a logarithmic back-off time after failing to connect to an account to prevent from being locked out.
+*Force sync* will reset all timers and restart the synchronization service.
+This should not normally be used.
+
+
+
## Support
If you have another question, want to request a feature or report a bug, you can use [this forum](https://forum.xda-developers.com/android/apps-games/source-email-t3824168).
diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java
index d7c55ee3c4..6466290149 100644
--- a/app/src/main/java/eu/faircode/email/ActivityView.java
+++ b/app/src/main/java/eu/faircode/email/ActivityView.java
@@ -278,12 +278,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
drawerLayout.closeDrawer(drawerContainer);
onMenuSetup();
}
- }, new Runnable() {
- @Override
- public void run() {
- drawerLayout.closeDrawer(drawerContainer);
- onReset();
- }
}));
madapter.set(menus);
@@ -938,10 +932,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
Helper.view(this, getIntentOtherApps());
}
- private void onReset() {
- ServiceSynchronize.reset(this);
- }
-
private void onDebugInfo() {
new SimpleTask() {
@Override
diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java
index 2131ab31b2..73f1b021eb 100644
--- a/app/src/main/java/eu/faircode/email/FragmentMessages.java
+++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java
@@ -2488,6 +2488,8 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
menu.findItem(R.id.menu_select_all).setVisible(!outbox &&
(viewType == AdapterMessage.ViewType.UNIFIED || viewType == AdapterMessage.ViewType.FOLDER));
+ menu.findItem(R.id.menu_force_sync).setVisible(viewType == AdapterMessage.ViewType.UNIFIED);
+
super.onPrepareOptionsMenu(menu);
}
@@ -2562,6 +2564,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
onMenuSelectAll();
return true;
+ case R.id.menu_force_sync:
+ onMenuForceSync();
+ return true;
+
default:
return super.onOptionsItemSelected(item);
}
@@ -2662,6 +2668,11 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
});
}
+ private void onMenuForceSync() {
+ ServiceSynchronize.reset(getContext());
+ ToastEx.makeText(getContext(), R.string.title_executing, Toast.LENGTH_LONG).show();
+ }
+
private void updateState(List folders) {
Log.i("Folder state updated count=" + folders.size());
diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java
index 9b452f909d..309fcfa4cb 100644
--- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java
+++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java
@@ -1554,6 +1554,13 @@ public class ServiceSynchronize extends ServiceBase {
}
static void reset(Context context) {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ boolean enabled = prefs.getBoolean("enabled", true);
+ int pollInterval = prefs.getInt("poll_interval", 0);
+ if (!enabled || pollInterval > 0) {
+ ServiceSynchronize.sync = true;
+ oneshot = true;
+ }
ContextCompat.startForegroundService(context,
new Intent(context, ServiceSynchronize.class)
.setAction("reset"));
diff --git a/app/src/main/res/menu/menu_messages.xml b/app/src/main/res/menu/menu_messages.xml
index a75b4136d3..6fc496b489 100644
--- a/app/src/main/res/menu/menu_messages.xml
+++ b/app/src/main/res/menu/menu_messages.xml
@@ -94,4 +94,10 @@
android:icon="@drawable/baseline_format_size_24"
android:title="@string/title_select_all"
app:showAsAction="never" />
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 32b045dd41..44ec13b6a2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -585,6 +585,7 @@
Compact view
Text size
Select all
+ Force sync
Previous
Next