diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index 539ebbd94e..4468d1b198 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -40,12 +40,8 @@ import android.widget.TextView; import com.google.android.material.snackbar.Snackbar; -import java.text.Collator; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; import java.util.List; -import java.util.Locale; import androidx.annotation.NonNull; import androidx.appcompat.widget.PopupMenu; @@ -392,37 +388,23 @@ public class AdapterFolder extends RecyclerView.Adapter folders) { - Log.i(Helper.TAG, "Set account=" + account + " folders=" + folders.size()); + public void set(long account, @NonNull List _folders) { + Log.i(Helper.TAG, "Set account=" + account + " folders=" + _folders.size()); this.account = account; - final Collator collator = Collator.getInstance(Locale.getDefault()); - collator.setStrength(Collator.SECONDARY); // Case insensitive, process accents etc + List folders = new ArrayList<>(); + folders.addAll(_folders); + EntityFolder.sort(folders); - Collections.sort(folders, new Comparator() { - @Override - public int compare(TupleFolderEx f1, TupleFolderEx f2) { - int s = Integer.compare( - EntityFolder.FOLDER_SORT_ORDER.indexOf(f1.type), - EntityFolder.FOLDER_SORT_ORDER.indexOf(f2.type)); - if (s != 0) - return s; - int c = -f1.synchronize.compareTo(f2.synchronize); - if (c != 0) - return c; - return collator.compare( - f1.name == null ? "" : f1.name, - f2.name == null ? "" : f2.name); - } - }); - - all = folders; + all.clear(); + for (EntityFolder folder : folders) + all.add((TupleFolderEx) folder); List shown = new ArrayList<>(); - for (TupleFolderEx folder : folders) + for (EntityFolder folder : folders) if (!folder.hide || showAll) - shown.add(folder); + shown.add((TupleFolderEx) folder); DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new MessageDiffCallback(filtered, shown)); diff --git a/app/src/main/java/eu/faircode/email/EntityFolder.java b/app/src/main/java/eu/faircode/email/EntityFolder.java index 426148434c..c898c435e3 100644 --- a/app/src/main/java/eu/faircode/email/EntityFolder.java +++ b/app/src/main/java/eu/faircode/email/EntityFolder.java @@ -92,6 +92,7 @@ public class EntityFolder implements Serializable { public String error; static final String INBOX = "Inbox"; + static final String INBOX_SUB = "Inbox_sub"; static final String OUTBOX = "Outbox"; static final String ARCHIVE = "All"; static final String DRAFTS = "Drafts"; @@ -125,6 +126,7 @@ public class EntityFolder implements Serializable { static final List FOLDER_SORT_ORDER = Arrays.asList( INBOX, + INBOX_SUB, OUTBOX, DRAFTS, SENT, @@ -265,9 +267,9 @@ public class EntityFolder implements Serializable { Collections.sort(folders, new Comparator() { @Override public int compare(EntityFolder f1, EntityFolder f2) { - int s = Integer.compare( - EntityFolder.FOLDER_SORT_ORDER.indexOf(f1.type), - EntityFolder.FOLDER_SORT_ORDER.indexOf(f2.type)); + int i1 = EntityFolder.FOLDER_SORT_ORDER.indexOf(f1.type); + int i2 = EntityFolder.FOLDER_SORT_ORDER.indexOf(f2.type); + int s = Integer.compare(i1, i2); if (s != 0) return s; int c = -f1.synchronize.compareTo(f2.synchronize); diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 67d551d208..1af9762cf6 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1941,6 +1941,12 @@ public class ServiceSynchronize extends LifecycleService { } } + // Special case + if (type == null) { + if (ifolder.getFullName().startsWith("INBOX" /*+ separator*/)) + type = EntityFolder.INBOX_SUB; + } + if (selectable) { String fullName = ifolder.getFullName(); int level = EntityFolder.getLevel(separator, fullName); @@ -1961,7 +1967,8 @@ public class ServiceSynchronize extends LifecycleService { names.remove(folder.name); Log.i(Helper.TAG, folder.name + " exists"); db.folder().setFolderLevel(folder.id, level); - if (EntityFolder.USER.equals(folder.type) && EntityFolder.SYSTEM.equals(type)) + if (EntityFolder.USER.equals(folder.type) && + (EntityFolder.INBOX_SUB.equals(type) || EntityFolder.SYSTEM.equals(type))) db.folder().setFolderType(folder.id, type); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 529d0f9507..c8baa0eb15 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -220,6 +220,7 @@ Unified inbox Inbox + Inbox child Outbox Archive Drafts