diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index ba95cbbd74..edc1080d88 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -866,7 +866,12 @@ class Core { if (keep_days == sync_days) keep_days++; - Log.i(folder.name + " start sync after=" + sync_days + "/" + keep_days); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean sync_unseen = prefs.getBoolean("sync_unseen", false); + boolean sync_flagged = prefs.getBoolean("sync_flagged", true); + + Log.i(folder.name + " start sync after=" + sync_days + "/" + keep_days + + " unseen=" + sync_unseen + " sync_flagged=" + sync_flagged); db.folder().setFolderSyncState(folder.id, "syncing"); @@ -915,8 +920,9 @@ class Core { // Reduce list of local uids SearchTerm searchTerm = new ReceivedDateTerm(ComparisonTerm.GE, new Date(sync_time)); - searchTerm = new OrTerm(searchTerm, new FlagTerm(new Flags(Flags.Flag.SEEN), false)); - if (ifolder.getPermanentFlags().contains(Flags.Flag.FLAGGED)) + if (sync_unseen) + searchTerm = new OrTerm(searchTerm, new FlagTerm(new Flags(Flags.Flag.SEEN), false)); + if (sync_flagged && ifolder.getPermanentFlags().contains(Flags.Flag.FLAGGED)) searchTerm = new OrTerm(searchTerm, new FlagTerm(new Flags(Flags.Flag.FLAGGED), true)); long search = SystemClock.elapsedRealtime(); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java index 70770dc0f1..bba983da98 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java @@ -54,9 +54,11 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr private SwitchCompat swSchedule; private TextView tvScheduleStart; private TextView tvScheduleEnd; + private SwitchCompat swUnseen; + private SwitchCompat swFlagged; private final static String[] RESET_OPTIONS = new String[]{ - "enabled", "poll_interval", "schedule", "schedule_start", "schedule_end" + "enabled", "poll_interval", "schedule", "schedule_start", "schedule_end", "sync_unseen", "sync_flagged" }; @Override @@ -74,6 +76,8 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr swSchedule = view.findViewById(R.id.swSchedule); tvScheduleStart = view.findViewById(R.id.tvScheduleStart); tvScheduleEnd = view.findViewById(R.id.tvScheduleEnd); + swUnseen = view.findViewById(R.id.swUnseen); + swFlagged = view.findViewById(R.id.swFlagged); // Wire controls @@ -153,6 +157,22 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr } }); + swUnseen.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("sync_unseen", checked).apply(); + ServiceSynchronize.reload(getContext(), false, "sync_unseen=" + checked); + } + }); + + swFlagged.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("sync_flagged", checked).apply(); + ServiceSynchronize.reload(getContext(), false, "sync_flagged=" + checked); + } + }); + setOptions(); PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this); @@ -214,6 +234,9 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr swSchedule.setChecked(prefs.getBoolean("schedule", false)); tvScheduleStart.setText(formatHour(getContext(), prefs.getInt("schedule_start", 0))); tvScheduleEnd.setText(formatHour(getContext(), prefs.getInt("schedule_end", 0))); + + swUnseen.setChecked(prefs.getBoolean("sync_unseen", false)); + swFlagged.setChecked(prefs.getBoolean("sync_flagged", true)); } private String formatHour(Context context, int minutes) { diff --git a/app/src/main/res/layout/fragment_options_synchronize.xml b/app/src/main/res/layout/fragment_options_synchronize.xml index cf08a02a4b..39a409f496 100644 --- a/app/src/main/res/layout/fragment_options_synchronize.xml +++ b/app/src/main/res/layout/fragment_options_synchronize.xml @@ -117,6 +117,28 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvScheduleStart" /> + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0c3761adf6..bab544ea2c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -162,6 +162,8 @@ Enabled When Schedule + All unread messages + All starred messages Use metered connections Automatically download messages and attachments on a metered connection up to