diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index adbc02136d..42bb93a2c1 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -257,6 +257,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. private ViewGroup view; private SwipeRefreshLayoutEx swipeRefresh; private TextView tvAirplane; + private TextView tvLastSync; private TextView tvSupport; private ImageButton ibHintSupport; private ImageButton ibHintSwipe; @@ -279,6 +280,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. private BottomNavigationView bottom_navigation; private ContentLoadingProgressBar pbWait; private Group grpAirplane; + private Group grpLastSync; private Group grpSupport; private Group grpHintSupport; private Group grpHintSwipe; @@ -336,6 +338,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. private boolean quick_scroll; private boolean addresses; private boolean swipe_reply; + private boolean last_sync_time; private int colorPrimary; private int colorAccent; @@ -472,6 +475,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. quick_scroll = prefs.getBoolean("quick_scroll", true); addresses = prefs.getBoolean("addresses", false); swipe_reply = prefs.getBoolean("swipe_reply", false); + last_sync_time = prefs.getBoolean("last_sync_time", false); colorPrimary = Helper.resolveColor(getContext(), R.attr.colorPrimary); colorAccent = Helper.resolveColor(getContext(), R.attr.colorAccent); @@ -521,6 +525,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. // Get controls swipeRefresh = view.findViewById(R.id.swipeRefresh); tvAirplane = view.findViewById(R.id.tvAirplane); + tvLastSync = view.findViewById(R.id.tvLastSync); tvSupport = view.findViewById(R.id.tvSupport); ibHintSupport = view.findViewById(R.id.ibHintSupport); ibHintSwipe = view.findViewById(R.id.ibHintSwipe); @@ -544,6 +549,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. pbWait = view.findViewById(R.id.pbWait); grpAirplane = view.findViewById(R.id.grpAirplane); + grpLastSync = view.findViewById(R.id.grpLastSync); grpSupport = view.findViewById(R.id.grpSupport); grpHintSupport = view.findViewById(R.id.grpHintSupport); grpHintSwipe = view.findViewById(R.id.grpHintSwipe); @@ -580,7 +586,6 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. } }); - grpAirplane.setVisibility(View.GONE); tvAirplane.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -1479,6 +1484,8 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. // Initialize FragmentDialogTheme.setBackground(getContext(), view, false); + grpAirplane.setVisibility(View.GONE); + grpLastSync.setVisibility(View.GONE); tvNoEmail.setVisibility(View.GONE); tvNoEmailHint.setVisibility(View.GONE); etSearch.setVisibility(View.GONE); @@ -5733,6 +5740,15 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. name = getString(R.string.title_name_count, name, NF.format(unseen)); setSubtitle(name); + if (viewType == AdapterMessage.ViewType.FOLDER && + folders.size() == 1 && + folders.get(0).last_sync != null) { + tvLastSync.setText(DateUtils.getRelativeTimeSpanString(context, + folders.get(0).last_sync, true)); + grpLastSync.setVisibility(View.VISIBLE); + } else + grpLastSync.setVisibility(View.GONE); + fabError.setTag(accountErrors); if (folderErrors || accountErrors) fabError.show(); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index 2d609cd0ac..297faea9ad 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -157,7 +157,8 @@ public class FragmentOptions extends FragmentBase { "quick_filter", "quick_scroll", "experiments", "debug", "log_level", "test1", "test2", "test3", "test4", "test5", "webview_legacy", "biometrics", - "default_light" + "default_light", + "last_sync_time" }; @Override diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index 827ed41c81..e9dc2a50b1 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -174,6 +174,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private SwitchCompat swExactAlarms; private SwitchCompat swInfra; private SwitchCompat swDupMsgId; + private SwitchCompat swLastSync; private SwitchCompat swTestIab; private Button btnImportProviders; private TextView tvProcessors; @@ -216,7 +217,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc "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", - "exact_alarms", "infra", "dkim_verify", "dup_msgids", "test_iab" + "exact_alarms", "infra", "dkim_verify", "dup_msgids", "last_sync_time", "test_iab" }; private final static String[] RESET_QUESTIONS = new String[]{ @@ -345,6 +346,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swExactAlarms = view.findViewById(R.id.swExactAlarms); swInfra = view.findViewById(R.id.swInfra); swDupMsgId = view.findViewById(R.id.swDupMsgId); + swLastSync = view.findViewById(R.id.swLastSync); swTestIab = view.findViewById(R.id.swTestIab); btnImportProviders = view.findViewById(R.id.btnImportProviders); tvProcessors = view.findViewById(R.id.tvProcessors); @@ -1168,6 +1170,13 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc } }); + swLastSync.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("last_sync_time", checked).apply(); + } + }); + swTestIab.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -1765,6 +1774,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swExactAlarms.setChecked(prefs.getBoolean("exact_alarms", true)); swInfra.setChecked(prefs.getBoolean("infra", false)); swDupMsgId.setChecked(prefs.getBoolean("dup_msgids", false)); + swLastSync.setChecked(prefs.getBoolean("last_sync_time", false)); swTestIab.setChecked(prefs.getBoolean("test_iab", false)); tvProcessors.setText(getString(R.string.title_advanced_processors, Runtime.getRuntime().availableProcessors())); diff --git a/app/src/main/res/layout/fragment_messages.xml b/app/src/main/res/layout/fragment_messages.xml index f648931bae..cfea90cd3c 100644 --- a/app/src/main/res/layout/fragment_messages.xml +++ b/app/src/main/res/layout/fragment_messages.xml @@ -40,6 +40,27 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvAirplane" /> + + + + + app:layout_constraintTop_toBottomOf="@+id/vSeparatorLastSync" /> + + + +