diff --git a/app/src/main/java/eu/faircode/email/AdapterAccount.java b/app/src/main/java/eu/faircode/email/AdapterAccount.java index aee46bb51a..9c03710542 100644 --- a/app/src/main/java/eu/faircode/email/AdapterAccount.java +++ b/app/src/main/java/eu/faircode/email/AdapterAccount.java @@ -47,13 +47,12 @@ public class AdapterAccount extends RecyclerView.Adapter all = new ArrayList<>(); - private List filtered = new ArrayList<>(); + private List items = new ArrayList<>(); private static final DateFormat df = SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - View itemView; + View view; View vwColor; ImageView ivPrimary; TextView tvName; @@ -67,7 +66,7 @@ public class AdapterAccount extends RecyclerView.Adapter() { @Override public int compare(EntityAccount a1, EntityAccount a2) { - return collator.compare(a1.host, a2.host); + int n = collator.compare(a1.name, a2.name); + if (n != 0) + return n; + int e = collator.compare(a1.user, a2.user); + if (e != 0) + return e; + return a1.id.compareTo(a2.id); } }); - all = accounts; + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, accounts), false); - DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); - - filtered.clear(); - filtered.addAll(all); + items = accounts; diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override @@ -182,12 +184,12 @@ public class AdapterAccount extends RecyclerView.Adapter prev; - private List next; + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); DiffCallback(List prev, List next) { - this.prev = prev; - this.next = next; + this.prev.addAll(prev); + this.next.addAll(next); } @Override @@ -217,12 +219,12 @@ public class AdapterAccount extends RecyclerView.Adapter all = new ArrayList<>(); - private List filtered = new ArrayList<>(); + private List items = new ArrayList<>(); private boolean primary = false; public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { - private View itemView; + private View view; private TextView tvName; ViewHolder(View itemView) { super(itemView); - this.itemView = itemView.findViewById(R.id.clItem); + view = itemView.findViewById(R.id.clItem); tvName = itemView.findViewById(R.id.tvName); } private void wire() { - itemView.setOnClickListener(this); - itemView.setOnLongClickListener(this); + view.setOnClickListener(this); + view.setOnLongClickListener(this); } private void unwire() { - itemView.setOnClickListener(null); - itemView.setOnLongClickListener(null); + view.setOnClickListener(null); + view.setOnLongClickListener(null); } private void bindTo(EntityAnswer answer) { @@ -82,7 +81,7 @@ public class AdapterAnswer extends RecyclerView.Adapter() { @Override public int compare(EntityAnswer a1, EntityAnswer a2) { - return collator.compare(a1.name, a2.name); + int n = collator.compare(a1.name, a2.name); + if (n != 0) + return n; + return a1.id.compareTo(a2.id); } }); - all = answers; + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, answers), false); - DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); - - filtered.clear(); - filtered.addAll(all); + items = answers; diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override @@ -178,12 +177,12 @@ public class AdapterAnswer extends RecyclerView.Adapter prev; - private List next; + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); DiffCallback(List prev, List next) { - this.prev = prev; - this.next = next; + this.prev.addAll(prev); + this.next.addAll(next); } @Override @@ -213,12 +212,12 @@ public class AdapterAnswer extends RecyclerView.Adapter all = new ArrayList<>(); - private List filtered = new ArrayList<>(); + private List items = new ArrayList<>(); public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - View itemView; + View view; ImageView ivDelete; TextView tvName; TextView tvType; @@ -79,7 +78,7 @@ public class AdapterAttachment extends RecyclerView.Adapter prev; - private List next; + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); DiffCallback(List prev, List next) { - this.prev = prev; - this.next = next; + this.prev.addAll(prev); + this.next.addAll(next); } @Override @@ -387,12 +383,12 @@ public class AdapterAttachment extends RecyclerView.Adapter contacts) { Log.i("Set contacts=" + contacts.size()); - DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, contacts)); + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, contacts), false); items = contacts; - diff.dispatchUpdatesTo(this); diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override public void onInserted(int position, int count) { @@ -227,6 +226,7 @@ public class AdapterContact extends RecyclerView.Adapter prev; - private List next; + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); DiffCallback(List prev, List next) { - this.prev = prev; - this.next = next; + this.prev.addAll(prev); + this.next.addAll(next); } @Override diff --git a/app/src/main/java/eu/faircode/email/AdapterIdentity.java b/app/src/main/java/eu/faircode/email/AdapterIdentity.java index b4dffef736..e1f3cd3726 100644 --- a/app/src/main/java/eu/faircode/email/AdapterIdentity.java +++ b/app/src/main/java/eu/faircode/email/AdapterIdentity.java @@ -47,13 +47,12 @@ public class AdapterIdentity extends RecyclerView.Adapter all = new ArrayList<>(); - private List filtered = new ArrayList<>(); + private List items = new ArrayList<>(); private static final DateFormat df = SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - View itemView; + View view; View vwColor; ImageView ivPrimary; TextView tvName; @@ -68,7 +67,7 @@ public class AdapterIdentity extends RecyclerView.Adapter() { @Override public int compare(TupleIdentityEx i1, TupleIdentityEx i2) { - return collator.compare(i1.host, i2.host); + int n = collator.compare(i1.getDisplayName(), i2.getDisplayName()); + if (n != 0) + return n; + int e = collator.compare(i1.email, i2.email); + if (e != 0) + return e; + return i1.id.compareTo(i2.id); } }); - all = identities; + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, identities), false); - DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); - - filtered.clear(); - filtered.addAll(all); + items = identities; diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override @@ -182,12 +184,12 @@ public class AdapterIdentity extends RecyclerView.Adapter prev; - private List next; + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); DiffCallback(List prev, List next) { - this.prev = prev; - this.next = next; + this.prev.addAll(prev); + this.next.addAll(next); } @Override @@ -217,12 +219,12 @@ public class AdapterIdentity extends RecyclerView.Adapter private LayoutInflater inflater; private LifecycleOwner owner; - private List all = new ArrayList<>(); - private List filtered = new ArrayList<>(); + private List items = new ArrayList<>(); public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - View itemView; + View view; ImageView image; TextView caption; ViewHolder(View itemView) { super(itemView); - this.itemView = itemView.findViewById(R.id.clItem); + view = itemView.findViewById(R.id.clItem); image = itemView.findViewById(R.id.image); caption = itemView.findViewById(R.id.caption); } private void wire() { - itemView.setOnClickListener(this); + view.setOnClickListener(this); } private void unwire() { - itemView.setOnClickListener(null); + view.setOnClickListener(null); } private void bindTo(EntityAttachment attachment) { @@ -97,7 +96,7 @@ public class AdapterImage extends RecyclerView.Adapter if (pos == RecyclerView.NO_POSITION) return; - EntityAttachment attachment = filtered.get(pos); + EntityAttachment attachment = items.get(pos); if (attachment.available) { // Build file name File file = attachment.getFile(context); @@ -188,12 +187,9 @@ public class AdapterImage extends RecyclerView.Adapter } }); - all = attachments; + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, attachments), false); - DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); - - filtered.clear(); - filtered.addAll(all); + items = attachments; diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override @@ -220,12 +216,12 @@ public class AdapterImage extends RecyclerView.Adapter } private class DiffCallback extends DiffUtil.Callback { - private List prev; - private List next; + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); DiffCallback(List prev, List next) { - this.prev = prev; - this.next = next; + this.prev.addAll(prev); + this.next.addAll(next); } @Override @@ -255,12 +251,12 @@ public class AdapterImage extends RecyclerView.Adapter @Override public long getItemId(int position) { - return filtered.get(position).id; + return items.get(position).id; } @Override public int getItemCount() { - return filtered.size(); + return items.size(); } @Override @@ -273,7 +269,7 @@ public class AdapterImage extends RecyclerView.Adapter public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.unwire(); - EntityAttachment attachment = filtered.get(position); + EntityAttachment attachment = items.get(position); holder.bindTo(attachment); holder.wire(); diff --git a/app/src/main/java/eu/faircode/email/AdapterLog.java b/app/src/main/java/eu/faircode/email/AdapterLog.java index 7209d9569e..8a99d4e41a 100644 --- a/app/src/main/java/eu/faircode/email/AdapterLog.java +++ b/app/src/main/java/eu/faircode/email/AdapterLog.java @@ -39,8 +39,7 @@ public class AdapterLog extends RecyclerView.Adapter { private Context context; private LayoutInflater inflater; - private List all = new ArrayList<>(); - private List filtered = new ArrayList<>(); + private List items = new ArrayList<>(); private static final DateFormat DF = SimpleDateFormat.getTimeInstance(); @@ -71,12 +70,9 @@ public class AdapterLog extends RecyclerView.Adapter { public void set(@NonNull List logs) { Log.i("Set logs=" + logs.size()); - all = logs; + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, logs), false); - DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); - - filtered.clear(); - filtered.addAll(all); + items = logs; diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override @@ -103,12 +99,12 @@ public class AdapterLog extends RecyclerView.Adapter { } private class DiffCallback extends DiffUtil.Callback { - private List prev; - private List next; + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); DiffCallback(List prev, List next) { - this.prev = prev; - this.next = next; + this.prev.addAll(prev); + this.next.addAll(next); } @Override @@ -138,12 +134,12 @@ public class AdapterLog extends RecyclerView.Adapter { @Override public long getItemId(int position) { - return filtered.get(position).id; + return items.get(position).id; } @Override public int getItemCount() { - return filtered.size(); + return items.size(); } @Override @@ -154,7 +150,7 @@ public class AdapterLog extends RecyclerView.Adapter { @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - EntityLog log = filtered.get(position); + EntityLog log = items.get(position); holder.bindTo(log); } } diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 6c02329de5..a9e01f01ba 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -178,7 +178,7 @@ public class AdapterMessage extends RecyclerView.Adapter answers) { if (answers == null || answers.size() == 0) { Snackbar snackbar = Snackbar.make( - itemView, + view, context.getString(R.string.title_no_answers), Snackbar.LENGTH_LONG); snackbar.setAction(R.string.title_fix, new View.OnClickListener() { diff --git a/app/src/main/java/eu/faircode/email/AdapterOperation.java b/app/src/main/java/eu/faircode/email/AdapterOperation.java index 0909dab113..834fd12f0f 100644 --- a/app/src/main/java/eu/faircode/email/AdapterOperation.java +++ b/app/src/main/java/eu/faircode/email/AdapterOperation.java @@ -50,11 +50,10 @@ public class AdapterOperation extends RecyclerView.Adapter all = new ArrayList<>(); - private List filtered = new ArrayList<>(); + private List items = new ArrayList<>(); public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { - private View itemView; + private View view; private TextView tvFolder; private TextView tvOperation; private TextView tvTime; @@ -63,7 +62,7 @@ public class AdapterOperation extends RecyclerView.Adapter operations) { Log.i("Set operations=" + operations.size()); - all = operations; + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, operations), false); - DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); - - filtered.clear(); - filtered.addAll(all); + items = operations; diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override @@ -251,12 +247,12 @@ public class AdapterOperation extends RecyclerView.Adapter prev; - private List next; + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); DiffCallback(List prev, List next) { - this.prev = prev; - this.next = next; + this.prev.addAll(prev); + this.next.addAll(next); } @Override @@ -286,12 +282,12 @@ public class AdapterOperation extends RecyclerView.Adapter { private LifecycleOwner owner; private LayoutInflater inflater; - private List all = new ArrayList<>(); - private List filtered = new ArrayList<>(); + private List items = new ArrayList<>(); public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - private View itemView; + private View view; private TextView tvName; private TextView tvOrder; private ImageView ivStop; @@ -58,22 +57,22 @@ public class AdapterRule extends RecyclerView.Adapter { ViewHolder(View itemView) { super(itemView); - this.itemView = itemView.findViewById(R.id.clItem); + view = itemView.findViewById(R.id.clItem); tvName = itemView.findViewById(R.id.tvName); tvOrder = itemView.findViewById(R.id.tvOrder); ivStop = itemView.findViewById(R.id.ivStop); } private void wire() { - itemView.setOnClickListener(this); + view.setOnClickListener(this); } private void unwire() { - itemView.setOnClickListener(null); + view.setOnClickListener(null); } private void bindTo(TupleRuleEx rule) { - itemView.setActivated(!rule.enabled); + view.setActivated(!rule.enabled); tvName.setText(rule.name); tvOrder.setText(Integer.toString(rule.order)); ivStop.setVisibility(rule.stop ? View.VISIBLE : View.INVISIBLE); @@ -85,7 +84,7 @@ public class AdapterRule extends RecyclerView.Adapter { if (pos == RecyclerView.NO_POSITION) return; - TupleRuleEx rule = filtered.get(pos); + TupleRuleEx rule = items.get(pos); LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); lbm.sendBroadcast( @@ -112,12 +111,6 @@ public class AdapterRule extends RecyclerView.Adapter { Collections.sort(rules, new Comparator() { @Override public int compare(TupleRuleEx r1, TupleRuleEx r2) { - int a = collator.compare(r1.accountName, r2.accountName); - if (a != 0) - return a; - int f = collator.compare(r1.folderName, r2.folderName); - if (f != 0) - return f; int o = ((Integer) r1.order).compareTo(r2.order); if (o != 0) return 0; @@ -125,12 +118,9 @@ public class AdapterRule extends RecyclerView.Adapter { } }); - all = rules; + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, rules), false); - DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); - - filtered.clear(); - filtered.addAll(all); + items = rules; diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override @@ -157,12 +147,12 @@ public class AdapterRule extends RecyclerView.Adapter { } private class DiffCallback extends DiffUtil.Callback { - private List prev; - private List next; + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); DiffCallback(List prev, List next) { - this.prev = prev; - this.next = next; + this.prev.addAll(prev); + this.next.addAll(next); } @Override @@ -192,12 +182,12 @@ public class AdapterRule extends RecyclerView.Adapter { @Override public long getItemId(int position) { - return filtered.get(position).id; + return items.get(position).id; } @Override public int getItemCount() { - return filtered.size(); + return items.size(); } @Override @@ -209,7 +199,7 @@ public class AdapterRule extends RecyclerView.Adapter { @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.unwire(); - TupleRuleEx rule = filtered.get(position); + TupleRuleEx rule = items.get(position); holder.bindTo(rule); holder.wire(); } diff --git a/app/src/main/java/eu/faircode/email/DaoContact.java b/app/src/main/java/eu/faircode/email/DaoContact.java index 86801146da..3a6aa63d55 100644 --- a/app/src/main/java/eu/faircode/email/DaoContact.java +++ b/app/src/main/java/eu/faircode/email/DaoContact.java @@ -36,7 +36,10 @@ public interface DaoContact { @Query("SELECT * FROM contact" + " ORDER BY" + - " CASE WHEN favorite = 1 THEN 0 ELSE 1 END" + + " CASE" + + " WHEN favorite = 1 THEN 0" + + " WHEN favorite = 2 THEN 2" + + " ELSE 1 END" + ", times_contacted DESC" + ", last_contacted DESC") LiveData> liveContacts(); diff --git a/app/src/main/java/eu/faircode/email/DaoRule.java b/app/src/main/java/eu/faircode/email/DaoRule.java index 8bbf5885ce..0cffa312f9 100644 --- a/app/src/main/java/eu/faircode/email/DaoRule.java +++ b/app/src/main/java/eu/faircode/email/DaoRule.java @@ -37,7 +37,7 @@ public interface DaoRule { @Query("SELECT * FROM rule" + " WHERE folder = :folder" + " AND enabled" + - " ORDER BY `order`") + " ORDER BY `order`, name") List getEnabledRules(long folder); @Query("SELECT rule.*, folder.account, folder.name AS folderName, account.name AS accountName FROM rule" +