From f74adb7b25769b47b1a6c4c3a1d2bd4f8ec40d98 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 16 Sep 2018 06:18:33 +0000 Subject: [PATCH] Prevent renaming system folders Fixes #123 --- .../java/eu/faircode/email/EntityFolder.java | 10 ++++++++-- .../eu/faircode/email/FragmentFolder.java | 1 + .../eu/faircode/email/ServiceSynchronize.java | 19 ++++++++++++++----- app/src/main/res/values/strings.xml | 1 + 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EntityFolder.java b/app/src/main/java/eu/faircode/email/EntityFolder.java index a1e1d378..8d67fb5e 100644 --- a/app/src/main/java/eu/faircode/email/EntityFolder.java +++ b/app/src/main/java/eu/faircode/email/EntityFolder.java @@ -76,6 +76,7 @@ public class EntityFolder implements Parcelable { static final String TRASH = "Trash"; static final String JUNK = "Junk"; static final String SENT = "Sent"; + static final String SYSTEM = "System"; static final String USER = "User"; static final List SYSTEM_FOLDER_ATTR = Arrays.asList( @@ -83,14 +84,18 @@ public class EntityFolder implements Parcelable { "Drafts", "Trash", "Junk", - "Sent" + "Sent", + "Important", + "Flagged" ); static final List SYSTEM_FOLDER_TYPE = Arrays.asList( ARCHIVE, DRAFTS, TRASH, JUNK, - SENT + SENT, + SYSTEM, + SYSTEM ); // MUST match SYSTEM_FOLDER_ATTR static final List FOLDER_SORT_ORDER = Arrays.asList( @@ -101,6 +106,7 @@ public class EntityFolder implements Parcelable { ARCHIVE, TRASH, JUNK, + SYSTEM, USER ); diff --git a/app/src/main/java/eu/faircode/email/FragmentFolder.java b/app/src/main/java/eu/faircode/email/FragmentFolder.java index 2b44a1fb..611a1b2b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolder.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolder.java @@ -310,6 +310,7 @@ public class FragmentFolder extends FragmentEx { // Consider previous save as cancelled pbWait.setVisibility(View.GONE); Helper.setViewsEnabled(view, true); + etRename.setEnabled(folder == null || EntityFolder.USER.equals(folder.type)); btnSave.setEnabled(true); ibDelete.setEnabled(true); ibDelete.setVisibility(folder == null ? View.GONE : View.VISIBLE); diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index b78a036b..b03d6101 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1239,17 +1239,23 @@ public class ServiceSynchronize extends LifecycleService { for (Folder ifolder : ifolders) { String[] attrs = ((IMAPFolder) ifolder).getAttributes(); + boolean system = false; boolean selectable = true; for (String attr : attrs) { if ("\\Noselect".equals(attr)) { // TODO: is this attribute correct? selectable = false; break; } - if (attr.startsWith("\\")) - if (EntityFolder.SYSTEM_FOLDER_ATTR.contains(attr.substring(1))) { - selectable = false; + if (attr.startsWith("\\")) { + attr = attr.substring(1); + if (EntityFolder.SYSTEM_FOLDER_ATTR.contains(attr)) { + int index = EntityFolder.SYSTEM_FOLDER_ATTR.indexOf(attr); + system = EntityFolder.SYSTEM.equals(EntityFolder.SYSTEM_FOLDER_TYPE.get(index)); + if (!system) + selectable = false; break; } + } } if (selectable) { @@ -1259,13 +1265,16 @@ public class ServiceSynchronize extends LifecycleService { folder = new EntityFolder(); folder.account = account.id; folder.name = ifolder.getFullName(); - folder.type = EntityFolder.USER; + folder.type = (system ? EntityFolder.SYSTEM : EntityFolder.USER); folder.synchronize = false; folder.after = EntityFolder.DEFAULT_USER_SYNC; db.folder().insertFolder(folder); Log.i(Helper.TAG, folder.name + " added"); - } else + } else { + if (system) + db.folder().setFolderType(folder.id, EntityFolder.SYSTEM); names.remove(folder.name); + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e3e4ecfb..b0f7c752 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -145,6 +145,7 @@ Trash Spam Sent + System User Folders primary account Conversation