From f209c689cef92b162cd6b3c59a3e278360c3820a Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 7 Apr 2023 11:25:54 +0200 Subject: [PATCH] Use default swipe actions for new account --- .../faircode/email/FragmentDialogAccount.java | 14 +-- .../faircode/email/FragmentDialogSwipes.java | 105 +++++++++++------- .../java/eu/faircode/email/FragmentGmail.java | 9 +- .../java/eu/faircode/email/FragmentOAuth.java | 9 +- .../eu/faircode/email/FragmentQuickSetup.java | 9 +- 5 files changed, 70 insertions(+), 76 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogAccount.java b/app/src/main/java/eu/faircode/email/FragmentDialogAccount.java index 4b1de5a165..9537b5270a 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogAccount.java @@ -179,13 +179,13 @@ public class FragmentDialogAccount extends FragmentDialogBase { if (swipes != null && swipes.size() == 1) { String left; if (swipes.get(0).swipe_left != null && swipes.get(0).swipe_left < 0) - left = getSwipeTitle(context, (long) swipes.get(0).swipe_left); + left = FragmentDialogSwipes.getActionTitle(context, swipes.get(0).swipe_left); else left = swipes.get(0).left_name; String right; if (swipes.get(0).swipe_right != null && swipes.get(0).swipe_right < 0) - right = getSwipeTitle(context, (long) swipes.get(0).swipe_right); + right = FragmentDialogSwipes.getActionTitle(context, swipes.get(0).swipe_right); else right = swipes.get(0).right_name; @@ -196,16 +196,6 @@ public class FragmentDialogAccount extends FragmentDialogBase { tvRight.setText("?"); } } - - private String getSwipeTitle(Context context, long type) { - if (type == EntityMessage.SWIPE_ACTION_SEEN) - return context.getString(R.string.title_seen); - - if (type == EntityMessage.SWIPE_ACTION_DELETE) - return context.getString(R.string.title_delete_permanently); - - return "???"; - } }); db.folder().liveSystemFolders(account).observe(this, new Observer>() { diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogSwipes.java b/app/src/main/java/eu/faircode/email/FragmentDialogSwipes.java index 51c5867aaa..8ac6302a60 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogSwipes.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogSwipes.java @@ -24,6 +24,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; +import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.widget.ArrayAdapter; @@ -46,38 +47,27 @@ public class FragmentDialogSwipes extends FragmentDialogBase { @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_swipes, null); + final Context context = getContext(); + View dview = LayoutInflater.from(context).inflate(R.layout.dialog_swipes, null); spLeft = dview.findViewById(R.id.spLeft); spRight = dview.findViewById(R.id.spRight); - adapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item1, android.R.id.text1, new ArrayList()); + adapter = new ArrayAdapter<>(context, R.layout.spinner_item1, android.R.id.text1, new ArrayList()); adapter.setDropDownViewResource(R.layout.spinner_item1_dropdown); spLeft.setAdapter(adapter); spRight.setAdapter(adapter); - List folders = FragmentAccount.getFolderActions(getContext()); + adapter.addAll(getFolderActions(context)); - EntityFolder trash = new EntityFolder(); - trash.id = 2L; - trash.name = getString(R.string.title_trash); - folders.add(1, trash); - - EntityFolder archive = new EntityFolder(); - archive.id = 1L; - archive.name = getString(R.string.title_archive); - folders.add(1, archive); - - adapter.addAll(folders); - - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); int leftPos = prefs.getInt("swipe_left_default", 2); // Trash int rightPos = prefs.getInt("swipe_right_default", 1); // Archive spLeft.setSelection(leftPos); spRight.setSelection(rightPos); - return new AlertDialog.Builder(getContext()) + return new AlertDialog.Builder(context) .setView(dview) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override @@ -97,16 +87,9 @@ public class FragmentDialogSwipes extends FragmentDialogBase { .putBoolean("button_hide", true) .apply(); - Bundle args = new Bundle(); - args.putLong("left", left == null ? 0 : left.id); - args.putLong("right", right == null ? 0 : right.id); - new SimpleTask() { @Override protected Void onExecute(Context context, Bundle args) { - long left = args.getLong("left"); - long right = args.getLong("right"); - DB db = DB.getInstance(context); try { db.beginTransaction(); @@ -114,10 +97,7 @@ public class FragmentDialogSwipes extends FragmentDialogBase { List accounts = db.account().getAccounts(); for (EntityAccount account : accounts) if (account.protocol == EntityAccount.TYPE_IMAP) - db.account().setAccountSwipes( - account.id, - getAction(context, left, account.id), - getAction(context, right, account.id)); + setDefaultFolderActions(context, account.id); db.setTransactionSuccessful(); } finally { @@ -129,30 +109,69 @@ public class FragmentDialogSwipes extends FragmentDialogBase { @Override protected void onExecuted(Bundle args, Void data) { - ToastEx.makeText(getContext(), R.string.title_completed, Toast.LENGTH_LONG).show(); + ToastEx.makeText(context, R.string.title_completed, Toast.LENGTH_LONG).show(); } @Override protected void onException(Bundle args, Throwable ex) { Log.unexpectedError(getParentFragmentManager(), ex); } - - private Long getAction(Context context, long selection, long account) { - if (selection < 0) - return selection; - else if (selection == 0) - return null; - else { - DB db = DB.getInstance(context); - String type = (selection == 2 ? EntityFolder.TRASH : EntityFolder.ARCHIVE); - EntityFolder archive = db.folder().getFolderByType(account, type); - return (archive == null ? null : archive.id); - } - } - }.execute(getContext(), getViewLifecycleOwner(), args, "dialog:swipe"); + }.execute(context, getViewLifecycleOwner(), new Bundle(), "dialog:swipe"); } }) .setNegativeButton(android.R.string.cancel, null) .create(); } + + static void setDefaultFolderActions(Context context, long account) { + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + int leftPos = prefs.getInt("swipe_left_default", 2); // Trash + int rightPos = prefs.getInt("swipe_right_default", 1); // Archive + + List actions = getFolderActions(context); + EntityFolder left = (leftPos < 0 || leftPos >= actions.size() ? null : actions.get(leftPos)); + EntityFolder right = (rightPos < 0 || rightPos >= actions.size() ? null : actions.get(rightPos)); + + DB db = DB.getInstance(context); + db.account().setAccountSwipes(account, + getAction(context, left == null ? 0 : left.id, account), + getAction(context, right == null ? 0 : right.id, account)); + } + + static List getFolderActions(Context context) { + List folders = FragmentAccount.getFolderActions(context); + + EntityFolder trash = new EntityFolder(); + trash.id = 2L; + trash.name = context.getString(R.string.title_trash); + folders.add(1, trash); + + EntityFolder archive = new EntityFolder(); + archive.id = 1L; + archive.name = context.getString(R.string.title_archive); + folders.add(1, archive); + + return folders; + } + + static String getActionTitle(Context context, long id) { + for (EntityFolder action : getFolderActions(context)) + if (action.id.equals(id)) + return action.name; + + return "???"; + } + + private static Long getAction(Context context, long selection, long account) { + if (selection < 0) + return selection; + else if (selection == 0) + return null; + else { + DB db = DB.getInstance(context); + String type = (selection == 2 ? EntityFolder.TRASH : EntityFolder.ARCHIVE); + EntityFolder folder = db.folder().getFolderByType(account, type); + return (folder == null ? null : folder.id); + } + } } diff --git a/app/src/main/java/eu/faircode/email/FragmentGmail.java b/app/src/main/java/eu/faircode/email/FragmentGmail.java index 83dd6757de..9fc23be352 100644 --- a/app/src/main/java/eu/faircode/email/FragmentGmail.java +++ b/app/src/main/java/eu/faircode/email/FragmentGmail.java @@ -557,13 +557,8 @@ public class FragmentGmail extends FragmentBase { if (pop) { account.swipe_left = EntityMessage.SWIPE_ACTION_DELETE; account.swipe_right = EntityMessage.SWIPE_ACTION_SEEN; - } else { - for (EntityFolder folder : folders) - if (EntityFolder.TRASH.equals(folder.type)) - account.swipe_left = folder.id; - else if (EntityFolder.ARCHIVE.equals(folder.type)) - account.swipe_right = folder.id; - } + } else + FragmentDialogSwipes.setDefaultFolderActions(context, account.id); db.account().updateAccount(account); diff --git a/app/src/main/java/eu/faircode/email/FragmentOAuth.java b/app/src/main/java/eu/faircode/email/FragmentOAuth.java index 1fa89430da..bfac4c0bfd 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOAuth.java +++ b/app/src/main/java/eu/faircode/email/FragmentOAuth.java @@ -943,13 +943,8 @@ public class FragmentOAuth extends FragmentBase { if (pop) { account.swipe_left = EntityMessage.SWIPE_ACTION_DELETE; account.swipe_right = EntityMessage.SWIPE_ACTION_SEEN; - } else { - for (EntityFolder folder : folders) - if (EntityFolder.TRASH.equals(folder.type)) - account.swipe_left = folder.id; - else if (EntityFolder.ARCHIVE.equals(folder.type)) - account.swipe_right = folder.id; - } + } else + FragmentDialogSwipes.setDefaultFolderActions(context, account.id); db.account().updateAccount(account); diff --git a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java index 3cbfbc8b11..9811aada47 100644 --- a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java @@ -33,6 +33,7 @@ import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.text.method.LinkMovementMethod; +import android.util.Pair; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; @@ -621,13 +622,7 @@ public class FragmentQuickSetup extends FragmentBase { } // Set swipe left/right folder - for (EntityFolder folder : folders) - if (EntityFolder.TRASH.equals(folder.type)) - account.swipe_left = folder.id; - else if (EntityFolder.ARCHIVE.equals(folder.type)) - account.swipe_right = folder.id; - - db.account().updateAccount(account); + FragmentDialogSwipes.setDefaultFolderActions(context, account.id); // Create identity EntityIdentity identity = new EntityIdentity();