From 3452cc5089532c5a9fa491802a97cf25e257bf96 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 6 Jun 2021 10:08:33 +0200 Subject: [PATCH] Apply to all: enable/disable sync --- .../java/eu/faircode/email/DaoFolder.java | 7 ++- .../eu/faircode/email/FragmentFolders.java | 44 ++++++++++----- app/src/main/res/layout/dialog_folder_all.xml | 53 +++++++++++++++++-- app/src/main/res/values/strings.xml | 2 + 4 files changed, 87 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/DaoFolder.java b/app/src/main/java/eu/faircode/email/DaoFolder.java index 904a6f65d2..3952a9c073 100644 --- a/app/src/main/java/eu/faircode/email/DaoFolder.java +++ b/app/src/main/java/eu/faircode/email/DaoFolder.java @@ -325,10 +325,9 @@ public interface DaoFolder { @Query("UPDATE folder" + " SET sync_days = :sync_days, keep_days = :keep_days" + - " WHERE account = :account" + - " AND type = '" + EntityFolder.USER + "'" + - " AND (NOT (sync_days IS :sync_days) OR NOT (keep_days IS :keep_days))") - int setFolderProperties(long account, int sync_days, int keep_days); + " WHERE id = :id" + + " AND NOT (sync_days IS :sync_days AND keep_days IS :keep_days)") + int setFolderProperties(long id, int sync_days, int keep_days); @Query("UPDATE folder SET keywords = :keywords WHERE id = :id AND NOT (keywords IS :keywords)") int setFolderKeywords(long id, String keywords); diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index 1d65cffee0..d6d6e4ccae 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -41,6 +41,7 @@ import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageButton; +import android.widget.RadioGroup; import android.widget.Toast; import androidx.annotation.NonNull; @@ -1012,6 +1013,7 @@ public class FragmentFolders extends FragmentBase { @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_folder_all, null); + final RadioGroup rgSynchronize = view.findViewById(R.id.rgSynchronize); final EditText etSyncDays = view.findViewById(R.id.etSyncDays); final EditText etKeepDays = view.findViewById(R.id.etKeepDays); final CheckBox cbKeepAll = view.findViewById(R.id.cbKeepAll); @@ -1031,6 +1033,11 @@ public class FragmentFolders extends FragmentBase { @Override public void onClick(DialogInterface dialog, int which) { Bundle args = getArguments(); + int optionId = rgSynchronize.getCheckedRadioButtonId(); + if (optionId == R.id.rbEnable) + args.putBoolean("enable", true); + else if (optionId == R.id.rbDisable) + args.putBoolean("enable", false); args.putString("sync", etSyncDays.getText().toString()); args.putString("keep", cbKeepAll.isChecked() ? Integer.toString(Integer.MAX_VALUE) @@ -1042,6 +1049,9 @@ public class FragmentFolders extends FragmentBase { @Override protected Void onExecute(Context context, Bundle args) throws Throwable { long account = args.getLong("account"); + Boolean enable = null; + if (args.containsKey("enable")) + enable = args.getBoolean("enable"); String sync = args.getString("sync"); String keep = args.getString("keep"); boolean system = args.getBoolean("system"); @@ -1056,19 +1066,29 @@ public class FragmentFolders extends FragmentBase { try { db.beginTransaction(); - db.folder().setFolderProperties( - account, - Integer.parseInt(sync), - Integer.parseInt(keep)); - List folders = db.folder().getFolders(account, false, true); - if (folders != null) - for (EntityFolder folder : folders) - if (folder.synchronize && !folder.poll) - if (EntityFolder.USER.equals(folder.type) - ? user - : system && !EntityFolder.INBOX.equals(folder.type)) - db.folder().setFolderPoll(folder.id, true); + if (folders == null) + return null; + + for (EntityFolder folder : folders) { + if (EntityFolder.USER.equals(folder.type)) { + if (enable != null) { + folder.synchronize = enable; + db.folder().setFolderSynchronize(folder.id, folder.synchronize); + } + + db.folder().setFolderProperties( + folder.id, + Integer.parseInt(sync), + Integer.parseInt(keep)); + } + + if (folder.synchronize && !folder.poll) + if (EntityFolder.USER.equals(folder.type) + ? user + : system && !EntityFolder.INBOX.equals(folder.type)) + db.folder().setFolderPoll(folder.id, true); + } db.setTransactionSuccessful(); } finally { diff --git a/app/src/main/res/layout/dialog_folder_all.xml b/app/src/main/res/layout/dialog_folder_all.xml index 8db8384ea6..5c94a19e51 100644 --- a/app/src/main/res/layout/dialog_folder_all.xml +++ b/app/src/main/res/layout/dialog_folder_all.xml @@ -26,19 +26,66 @@ android:layout_marginTop="12dp" android:text="@string/title_folder_user_only" android:textAppearance="@style/TextAppearance.AppCompat.Small" - android:textStyle="italic|bold" + android:textColor="?attr/colorWarning" + android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvCaption" /> + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/rgSynchronize" /> Fix Enable Enabled + Disable + Keep current Executing Completed Default changed