Small improvements

pull/153/head
M66B 7 years ago
parent c5b90389ee
commit c91443b99f

@ -47,13 +47,12 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
private Context context; private Context context;
private LayoutInflater inflater; private LayoutInflater inflater;
private List<EntityAccount> all = new ArrayList<>(); private List<EntityAccount> items = new ArrayList<>();
private List<EntityAccount> filtered = new ArrayList<>();
private static final DateFormat df = SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); private static final DateFormat df = SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
View itemView; View view;
View vwColor; View vwColor;
ImageView ivPrimary; ImageView ivPrimary;
TextView tvName; TextView tvName;
@ -67,7 +66,7 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
this.itemView = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
vwColor = itemView.findViewById(R.id.vwColor); vwColor = itemView.findViewById(R.id.vwColor);
ivPrimary = itemView.findViewById(R.id.ivPrimary); ivPrimary = itemView.findViewById(R.id.ivPrimary);
tvName = itemView.findViewById(R.id.tvName); tvName = itemView.findViewById(R.id.tvName);
@ -80,15 +79,15 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
} }
private void wire() { private void wire() {
itemView.setOnClickListener(this); view.setOnClickListener(this);
} }
private void unwire() { private void unwire() {
itemView.setOnClickListener(null); view.setOnClickListener(null);
} }
private void bindTo(EntityAccount account) { private void bindTo(EntityAccount account) {
itemView.setActivated(account.tbd != null); view.setActivated(account.tbd != null);
vwColor.setBackgroundColor(account.color == null ? Color.TRANSPARENT : account.color); vwColor.setBackgroundColor(account.color == null ? Color.TRANSPARENT : account.color);
ivPrimary.setVisibility(account.primary ? View.VISIBLE : View.INVISIBLE); ivPrimary.setVisibility(account.primary ? View.VISIBLE : View.INVISIBLE);
tvName.setText(account.name); tvName.setText(account.name);
@ -119,7 +118,7 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
if (pos == RecyclerView.NO_POSITION) if (pos == RecyclerView.NO_POSITION)
return; return;
EntityAccount account = filtered.get(pos); EntityAccount account = items.get(pos);
if (account.tbd != null) if (account.tbd != null)
return; return;
@ -146,16 +145,19 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
Collections.sort(accounts, new Comparator<EntityAccount>() { Collections.sort(accounts, new Comparator<EntityAccount>() {
@Override @Override
public int compare(EntityAccount a1, EntityAccount a2) { 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)); items = accounts;
filtered.clear();
filtered.addAll(all);
diff.dispatchUpdatesTo(new ListUpdateCallback() { diff.dispatchUpdatesTo(new ListUpdateCallback() {
@Override @Override
@ -182,12 +184,12 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
} }
private class DiffCallback extends DiffUtil.Callback { private class DiffCallback extends DiffUtil.Callback {
private List<EntityAccount> prev; private List<EntityAccount> prev = new ArrayList<>();
private List<EntityAccount> next; private List<EntityAccount> next = new ArrayList<>();
DiffCallback(List<EntityAccount> prev, List<EntityAccount> next) { DiffCallback(List<EntityAccount> prev, List<EntityAccount> next) {
this.prev = prev; this.prev.addAll(prev);
this.next = next; this.next.addAll(next);
} }
@Override @Override
@ -217,12 +219,12 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
@Override @Override
public long getItemId(int position) { public long getItemId(int position) {
return filtered.get(position).id; return items.get(position).id;
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return filtered.size(); return items.size();
} }
@Override @Override
@ -235,7 +237,7 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.unwire(); holder.unwire();
EntityAccount account = filtered.get(position); EntityAccount account = items.get(position);
holder.bindTo(account); holder.bindTo(account);
holder.wire(); holder.wire();

@ -46,30 +46,29 @@ public class AdapterAnswer extends RecyclerView.Adapter<AdapterAnswer.ViewHolder
private LifecycleOwner owner; private LifecycleOwner owner;
private LayoutInflater inflater; private LayoutInflater inflater;
private List<EntityAnswer> all = new ArrayList<>(); private List<EntityAnswer> items = new ArrayList<>();
private List<EntityAnswer> filtered = new ArrayList<>();
private boolean primary = false; private boolean primary = false;
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
private View itemView; private View view;
private TextView tvName; private TextView tvName;
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
this.itemView = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
tvName = itemView.findViewById(R.id.tvName); tvName = itemView.findViewById(R.id.tvName);
} }
private void wire() { private void wire() {
itemView.setOnClickListener(this); view.setOnClickListener(this);
itemView.setOnLongClickListener(this); view.setOnLongClickListener(this);
} }
private void unwire() { private void unwire() {
itemView.setOnClickListener(null); view.setOnClickListener(null);
itemView.setOnLongClickListener(null); view.setOnLongClickListener(null);
} }
private void bindTo(EntityAnswer answer) { private void bindTo(EntityAnswer answer) {
@ -82,7 +81,7 @@ public class AdapterAnswer extends RecyclerView.Adapter<AdapterAnswer.ViewHolder
if (pos == RecyclerView.NO_POSITION) if (pos == RecyclerView.NO_POSITION)
return; return;
EntityAnswer answer = filtered.get(pos); EntityAnswer answer = items.get(pos);
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
lbm.sendBroadcast( lbm.sendBroadcast(
@ -99,7 +98,7 @@ public class AdapterAnswer extends RecyclerView.Adapter<AdapterAnswer.ViewHolder
if (pos == RecyclerView.NO_POSITION) if (pos == RecyclerView.NO_POSITION)
return false; return false;
EntityAnswer answer = filtered.get(pos); EntityAnswer answer = items.get(pos);
context.startActivity(new Intent(context, ActivityCompose.class) context.startActivity(new Intent(context, ActivityCompose.class)
.putExtra("action", "new") .putExtra("action", "new")
@ -142,16 +141,16 @@ public class AdapterAnswer extends RecyclerView.Adapter<AdapterAnswer.ViewHolder
Collections.sort(answers, new Comparator<EntityAnswer>() { Collections.sort(answers, new Comparator<EntityAnswer>() {
@Override @Override
public int compare(EntityAnswer a1, EntityAnswer a2) { 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)); items = answers;
filtered.clear();
filtered.addAll(all);
diff.dispatchUpdatesTo(new ListUpdateCallback() { diff.dispatchUpdatesTo(new ListUpdateCallback() {
@Override @Override
@ -178,12 +177,12 @@ public class AdapterAnswer extends RecyclerView.Adapter<AdapterAnswer.ViewHolder
} }
private class DiffCallback extends DiffUtil.Callback { private class DiffCallback extends DiffUtil.Callback {
private List<EntityAnswer> prev; private List<EntityAnswer> prev = new ArrayList<>();
private List<EntityAnswer> next; private List<EntityAnswer> next = new ArrayList<>();
DiffCallback(List<EntityAnswer> prev, List<EntityAnswer> next) { DiffCallback(List<EntityAnswer> prev, List<EntityAnswer> next) {
this.prev = prev; this.prev.addAll(prev);
this.next = next; this.next.addAll(next);
} }
@Override @Override
@ -213,12 +212,12 @@ public class AdapterAnswer extends RecyclerView.Adapter<AdapterAnswer.ViewHolder
@Override @Override
public long getItemId(int position) { public long getItemId(int position) {
return filtered.get(position).id; return items.get(position).id;
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return filtered.size(); return items.size();
} }
@Override @Override
@ -230,7 +229,7 @@ public class AdapterAnswer extends RecyclerView.Adapter<AdapterAnswer.ViewHolder
@Override @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.unwire(); holder.unwire();
EntityAnswer answer = filtered.get(position); EntityAnswer answer = items.get(position);
holder.bindTo(answer); holder.bindTo(answer);
holder.wire(); holder.wire();
} }

@ -62,11 +62,10 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
private boolean readonly; private boolean readonly;
private boolean debug; private boolean debug;
private List<EntityAttachment> all = new ArrayList<>(); private List<EntityAttachment> items = new ArrayList<>();
private List<EntityAttachment> filtered = new ArrayList<>();
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
View itemView; View view;
ImageView ivDelete; ImageView ivDelete;
TextView tvName; TextView tvName;
TextView tvType; TextView tvType;
@ -79,7 +78,7 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
this.itemView = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
ivDelete = itemView.findViewById(R.id.ivDelete); ivDelete = itemView.findViewById(R.id.ivDelete);
tvName = itemView.findViewById(R.id.tvName); tvName = itemView.findViewById(R.id.tvName);
tvType = itemView.findViewById(R.id.tvType); tvType = itemView.findViewById(R.id.tvType);
@ -91,19 +90,19 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
} }
private void wire() { private void wire() {
itemView.setOnClickListener(this); view.setOnClickListener(this);
ivDelete.setOnClickListener(this); ivDelete.setOnClickListener(this);
ivSave.setOnClickListener(this); ivSave.setOnClickListener(this);
} }
private void unwire() { private void unwire() {
itemView.setOnClickListener(null); view.setOnClickListener(null);
ivDelete.setOnClickListener(null); ivDelete.setOnClickListener(null);
ivSave.setOnClickListener(null); ivSave.setOnClickListener(null);
} }
private void bindTo(EntityAttachment attachment) { private void bindTo(EntityAttachment attachment) {
itemView.setAlpha(attachment.isInline() ? Helper.LOW_LIGHT : 1.0f); view.setAlpha(attachment.isInline() ? Helper.LOW_LIGHT : 1.0f);
ivDelete.setVisibility(readonly ? View.GONE : attachment.isInline() ? View.INVISIBLE : View.VISIBLE); ivDelete.setVisibility(readonly ? View.GONE : attachment.isInline() ? View.INVISIBLE : View.VISIBLE);
tvName.setText(attachment.name); tvName.setText(attachment.name);
@ -147,7 +146,7 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
int pos = getAdapterPosition(); int pos = getAdapterPosition();
if (pos == RecyclerView.NO_POSITION) if (pos == RecyclerView.NO_POSITION)
return; return;
final EntityAttachment attachment = filtered.get(pos); final EntityAttachment attachment = items.get(pos);
if (view.getId() == R.id.ivDelete) if (view.getId() == R.id.ivDelete)
onDelete(attachment); onDelete(attachment);
@ -320,12 +319,9 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
} }
}); });
all = attachments; DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, attachments), false);
DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); items = attachments;
filtered.clear();
filtered.addAll(all);
diff.dispatchUpdatesTo(new ListUpdateCallback() { diff.dispatchUpdatesTo(new ListUpdateCallback() {
@Override @Override
@ -352,12 +348,12 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
} }
private class DiffCallback extends DiffUtil.Callback { private class DiffCallback extends DiffUtil.Callback {
private List<EntityAttachment> prev; private List<EntityAttachment> prev = new ArrayList<>();
private List<EntityAttachment> next; private List<EntityAttachment> next = new ArrayList<>();
DiffCallback(List<EntityAttachment> prev, List<EntityAttachment> next) { DiffCallback(List<EntityAttachment> prev, List<EntityAttachment> next) {
this.prev = prev; this.prev.addAll(prev);
this.next = next; this.next.addAll(next);
} }
@Override @Override
@ -387,12 +383,12 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
@Override @Override
public long getItemId(int position) { public long getItemId(int position) {
return filtered.get(position).id; return items.get(position).id;
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return filtered.size(); return items.size();
} }
@Override @Override
@ -405,7 +401,7 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.unwire(); holder.unwire();
EntityAttachment attachment = filtered.get(position); EntityAttachment attachment = items.get(position);
holder.bindTo(attachment); holder.bindTo(attachment);
holder.wire(); holder.wire();

@ -201,11 +201,10 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
public void set(@NonNull List<EntityContact> contacts) { public void set(@NonNull List<EntityContact> contacts) {
Log.i("Set contacts=" + contacts.size()); 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; items = contacts;
diff.dispatchUpdatesTo(this);
diff.dispatchUpdatesTo(new ListUpdateCallback() { diff.dispatchUpdatesTo(new ListUpdateCallback() {
@Override @Override
public void onInserted(int position, int count) { public void onInserted(int position, int count) {
@ -227,6 +226,7 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
Log.i("Changed @" + position + " #" + count); Log.i("Changed @" + position + " #" + count);
} }
}); });
diff.dispatchUpdatesTo(this);
} }
private class DiffCallback extends DiffUtil.Callback { private class DiffCallback extends DiffUtil.Callback {

@ -70,7 +70,7 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
private static NumberFormat nf = NumberFormat.getNumberInstance(); private static NumberFormat nf = NumberFormat.getNumberInstance();
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
private View itemView; private View view;
private View vwColor; private View vwColor;
private View vwLevel; private View vwLevel;
private ImageView ivState; private ImageView ivState;
@ -95,7 +95,7 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
this.itemView = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
vwColor = itemView.findViewById(R.id.vwColor); vwColor = itemView.findViewById(R.id.vwColor);
vwLevel = itemView.findViewById(R.id.vwLevel); vwLevel = itemView.findViewById(R.id.vwLevel);
ivState = itemView.findViewById(R.id.ivState); ivState = itemView.findViewById(R.id.ivState);
@ -112,18 +112,18 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
} }
private void wire() { private void wire() {
itemView.setOnClickListener(this); view.setOnClickListener(this);
itemView.setOnLongClickListener(this); view.setOnLongClickListener(this);
} }
private void unwire() { private void unwire() {
itemView.setOnClickListener(null); view.setOnClickListener(null);
itemView.setOnLongClickListener(null); view.setOnLongClickListener(null);
} }
private void bindTo(TupleFolderEx folder) { private void bindTo(TupleFolderEx folder) {
itemView.setActivated(folder.tbc != null || folder.tbd != null); view.setActivated(folder.tbc != null || folder.tbd != null);
itemView.setAlpha(folder.hide ? 0.5f : 1.0f); view.setAlpha(folder.hide ? 0.5f : 1.0f);
if (textSize != 0) if (textSize != 0)
tvName.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); tvName.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
@ -256,7 +256,7 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
if (folder.tbd != null) if (folder.tbd != null)
return false; return false;
PopupMenu popupMenu = new PopupMenu(context, itemView); PopupMenu popupMenu = new PopupMenu(context, view);
popupMenu.getMenu().add(Menu.NONE, action_synchronize_now, 1, R.string.title_synchronize_now); popupMenu.getMenu().add(Menu.NONE, action_synchronize_now, 1, R.string.title_synchronize_now);
@ -336,7 +336,7 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
@Override @Override
protected void onException(Bundle args, Throwable ex) { protected void onException(Bundle args, Throwable ex) {
if (ex instanceof IllegalArgumentException) if (ex instanceof IllegalArgumentException)
Snackbar.make(itemView, ex.getMessage(), Snackbar.LENGTH_LONG).show(); Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show();
else else
Helper.unexpectedError(context, owner, ex); Helper.unexpectedError(context, owner, ex);
} }
@ -490,10 +490,9 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
if (!folder.hide || showAll) if (!folder.hide || showAll)
shown.add((TupleFolderEx) folder); shown.add((TupleFolderEx) folder);
DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, shown)); DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, shown), false);
filtered.clear(); filtered = shown;
filtered.addAll(shown);
diff.dispatchUpdatesTo(new ListUpdateCallback() { diff.dispatchUpdatesTo(new ListUpdateCallback() {
@Override @Override
@ -520,12 +519,12 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
} }
private class DiffCallback extends DiffUtil.Callback { private class DiffCallback extends DiffUtil.Callback {
private List<TupleFolderEx> prev; private List<TupleFolderEx> prev = new ArrayList<>();
private List<TupleFolderEx> next; private List<TupleFolderEx> next = new ArrayList<>();
DiffCallback(List<TupleFolderEx> prev, List<TupleFolderEx> next) { DiffCallback(List<TupleFolderEx> prev, List<TupleFolderEx> next) {
this.prev = prev; this.prev.addAll(prev);
this.next = next; this.next.addAll(next);
} }
@Override @Override

@ -47,13 +47,12 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
private Context context; private Context context;
private LayoutInflater inflater; private LayoutInflater inflater;
private List<TupleIdentityEx> all = new ArrayList<>(); private List<TupleIdentityEx> items = new ArrayList<>();
private List<TupleIdentityEx> filtered = new ArrayList<>();
private static final DateFormat df = SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); private static final DateFormat df = SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
View itemView; View view;
View vwColor; View vwColor;
ImageView ivPrimary; ImageView ivPrimary;
TextView tvName; TextView tvName;
@ -68,7 +67,7 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
this.itemView = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
vwColor = itemView.findViewById(R.id.vwColor); vwColor = itemView.findViewById(R.id.vwColor);
ivPrimary = itemView.findViewById(R.id.ivPrimary); ivPrimary = itemView.findViewById(R.id.ivPrimary);
tvName = itemView.findViewById(R.id.tvName); tvName = itemView.findViewById(R.id.tvName);
@ -82,15 +81,15 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
} }
private void wire() { private void wire() {
itemView.setOnClickListener(this); view.setOnClickListener(this);
} }
private void unwire() { private void unwire() {
itemView.setOnClickListener(null); view.setOnClickListener(null);
} }
private void bindTo(TupleIdentityEx identity) { private void bindTo(TupleIdentityEx identity) {
itemView.setActivated(identity.tbd != null); view.setActivated(identity.tbd != null);
vwColor.setBackgroundColor(identity.color == null ? Color.TRANSPARENT : identity.color); vwColor.setBackgroundColor(identity.color == null ? Color.TRANSPARENT : identity.color);
ivPrimary.setVisibility(identity.primary ? View.VISIBLE : View.INVISIBLE); ivPrimary.setVisibility(identity.primary ? View.VISIBLE : View.INVISIBLE);
tvName.setText(identity.getDisplayName()); tvName.setText(identity.getDisplayName());
@ -120,7 +119,7 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
if (pos == RecyclerView.NO_POSITION) if (pos == RecyclerView.NO_POSITION)
return; return;
TupleIdentityEx identity = filtered.get(pos); TupleIdentityEx identity = items.get(pos);
if (identity.tbd != null) if (identity.tbd != null)
return; return;
@ -146,16 +145,19 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
Collections.sort(identities, new Comparator<TupleIdentityEx>() { Collections.sort(identities, new Comparator<TupleIdentityEx>() {
@Override @Override
public int compare(TupleIdentityEx i1, TupleIdentityEx i2) { 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)); items = identities;
filtered.clear();
filtered.addAll(all);
diff.dispatchUpdatesTo(new ListUpdateCallback() { diff.dispatchUpdatesTo(new ListUpdateCallback() {
@Override @Override
@ -182,12 +184,12 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
} }
private class DiffCallback extends DiffUtil.Callback { private class DiffCallback extends DiffUtil.Callback {
private List<TupleIdentityEx> prev; private List<TupleIdentityEx> prev = new ArrayList<>();
private List<TupleIdentityEx> next; private List<TupleIdentityEx> next = new ArrayList<>();
DiffCallback(List<TupleIdentityEx> prev, List<TupleIdentityEx> next) { DiffCallback(List<TupleIdentityEx> prev, List<TupleIdentityEx> next) {
this.prev = prev; this.prev.addAll(prev);
this.next = next; this.next.addAll(next);
} }
@Override @Override
@ -217,12 +219,12 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
@Override @Override
public long getItemId(int position) { public long getItemId(int position) {
return filtered.get(position).id; return items.get(position).id;
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return filtered.size(); return items.size();
} }
@Override @Override
@ -235,7 +237,7 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.unwire(); holder.unwire();
TupleIdentityEx identity = filtered.get(position); TupleIdentityEx identity = items.get(position);
holder.bindTo(identity); holder.bindTo(identity);
holder.wire(); holder.wire();

@ -52,28 +52,27 @@ public class AdapterImage extends RecyclerView.Adapter<AdapterImage.ViewHolder>
private LayoutInflater inflater; private LayoutInflater inflater;
private LifecycleOwner owner; private LifecycleOwner owner;
private List<EntityAttachment> all = new ArrayList<>(); private List<EntityAttachment> items = new ArrayList<>();
private List<EntityAttachment> filtered = new ArrayList<>();
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
View itemView; View view;
ImageView image; ImageView image;
TextView caption; TextView caption;
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
this.itemView = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
image = itemView.findViewById(R.id.image); image = itemView.findViewById(R.id.image);
caption = itemView.findViewById(R.id.caption); caption = itemView.findViewById(R.id.caption);
} }
private void wire() { private void wire() {
itemView.setOnClickListener(this); view.setOnClickListener(this);
} }
private void unwire() { private void unwire() {
itemView.setOnClickListener(null); view.setOnClickListener(null);
} }
private void bindTo(EntityAttachment attachment) { private void bindTo(EntityAttachment attachment) {
@ -97,7 +96,7 @@ public class AdapterImage extends RecyclerView.Adapter<AdapterImage.ViewHolder>
if (pos == RecyclerView.NO_POSITION) if (pos == RecyclerView.NO_POSITION)
return; return;
EntityAttachment attachment = filtered.get(pos); EntityAttachment attachment = items.get(pos);
if (attachment.available) { if (attachment.available) {
// Build file name // Build file name
File file = attachment.getFile(context); File file = attachment.getFile(context);
@ -188,12 +187,9 @@ public class AdapterImage extends RecyclerView.Adapter<AdapterImage.ViewHolder>
} }
}); });
all = attachments; DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, attachments), false);
DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); items = attachments;
filtered.clear();
filtered.addAll(all);
diff.dispatchUpdatesTo(new ListUpdateCallback() { diff.dispatchUpdatesTo(new ListUpdateCallback() {
@Override @Override
@ -220,12 +216,12 @@ public class AdapterImage extends RecyclerView.Adapter<AdapterImage.ViewHolder>
} }
private class DiffCallback extends DiffUtil.Callback { private class DiffCallback extends DiffUtil.Callback {
private List<EntityAttachment> prev; private List<EntityAttachment> prev = new ArrayList<>();
private List<EntityAttachment> next; private List<EntityAttachment> next = new ArrayList<>();
DiffCallback(List<EntityAttachment> prev, List<EntityAttachment> next) { DiffCallback(List<EntityAttachment> prev, List<EntityAttachment> next) {
this.prev = prev; this.prev.addAll(prev);
this.next = next; this.next.addAll(next);
} }
@Override @Override
@ -255,12 +251,12 @@ public class AdapterImage extends RecyclerView.Adapter<AdapterImage.ViewHolder>
@Override @Override
public long getItemId(int position) { public long getItemId(int position) {
return filtered.get(position).id; return items.get(position).id;
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return filtered.size(); return items.size();
} }
@Override @Override
@ -273,7 +269,7 @@ public class AdapterImage extends RecyclerView.Adapter<AdapterImage.ViewHolder>
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.unwire(); holder.unwire();
EntityAttachment attachment = filtered.get(position); EntityAttachment attachment = items.get(position);
holder.bindTo(attachment); holder.bindTo(attachment);
holder.wire(); holder.wire();

@ -39,8 +39,7 @@ public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> {
private Context context; private Context context;
private LayoutInflater inflater; private LayoutInflater inflater;
private List<EntityLog> all = new ArrayList<>(); private List<EntityLog> items = new ArrayList<>();
private List<EntityLog> filtered = new ArrayList<>();
private static final DateFormat DF = SimpleDateFormat.getTimeInstance(); private static final DateFormat DF = SimpleDateFormat.getTimeInstance();
@ -71,12 +70,9 @@ public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> {
public void set(@NonNull List<EntityLog> logs) { public void set(@NonNull List<EntityLog> logs) {
Log.i("Set logs=" + logs.size()); 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)); items = logs;
filtered.clear();
filtered.addAll(all);
diff.dispatchUpdatesTo(new ListUpdateCallback() { diff.dispatchUpdatesTo(new ListUpdateCallback() {
@Override @Override
@ -103,12 +99,12 @@ public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> {
} }
private class DiffCallback extends DiffUtil.Callback { private class DiffCallback extends DiffUtil.Callback {
private List<EntityLog> prev; private List<EntityLog> prev = new ArrayList<>();
private List<EntityLog> next; private List<EntityLog> next = new ArrayList<>();
DiffCallback(List<EntityLog> prev, List<EntityLog> next) { DiffCallback(List<EntityLog> prev, List<EntityLog> next) {
this.prev = prev; this.prev.addAll(prev);
this.next = next; this.next.addAll(next);
} }
@Override @Override
@ -138,12 +134,12 @@ public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> {
@Override @Override
public long getItemId(int position) { public long getItemId(int position) {
return filtered.get(position).id; return items.get(position).id;
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return filtered.size(); return items.size();
} }
@Override @Override
@ -154,7 +150,7 @@ public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> {
@Override @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
EntityLog log = filtered.get(position); EntityLog log = items.get(position);
holder.bindTo(log); holder.bindTo(log);
} }
} }

@ -178,7 +178,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
public class ViewHolder extends RecyclerView.ViewHolder implements public class ViewHolder extends RecyclerView.ViewHolder implements
View.OnClickListener, View.OnLongClickListener, BottomNavigationView.OnNavigationItemSelectedListener { View.OnClickListener, View.OnLongClickListener, BottomNavigationView.OnNavigationItemSelectedListener {
private View itemView; private View view;
private TextView tvDay; private TextView tvDay;
private View vwColor; private View vwColor;
private ImageView ivExpander; private ImageView ivExpander;
@ -266,7 +266,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ViewHolder(final View itemView) { ViewHolder(final View itemView) {
super(itemView); super(itemView);
this.itemView = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
tvDay = itemView.findViewById(R.id.tvDay); tvDay = itemView.findViewById(R.id.tvDay);
vwColor = itemView.findViewById(R.id.vwColor); vwColor = itemView.findViewById(R.id.vwColor);
ivExpander = itemView.findViewById(R.id.ivExpander); ivExpander = itemView.findViewById(R.id.ivExpander);
@ -368,7 +368,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} }
void setDisplacement(float dx) { void setDisplacement(float dx) {
ViewGroup group = (ViewGroup) itemView; ViewGroup group = (ViewGroup) view;
for (int i = 0; i < group.getChildCount(); i++) { for (int i = 0; i < group.getChildCount(); i++) {
View child = group.getChildAt(i); View child = group.getChildAt(i);
int id = child.getId(); int id = child.getId();
@ -380,15 +380,15 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private void wire() { private void wire() {
final View touch = (viewType == ViewType.THREAD && threading ? ivExpander : vwColor); final View touch = (viewType == ViewType.THREAD && threading ? ivExpander : vwColor);
touch.setOnClickListener(this); touch.setOnClickListener(this);
itemView.post(new Runnable() { view.post(new Runnable() {
@Override @Override
public void run() { public void run() {
Rect rect = new Rect( Rect rect = new Rect(
itemView.getLeft(), view.getLeft(),
vwColor.getTop(), vwColor.getTop(),
itemView.getRight(), view.getRight(),
vwColor.getBottom()); vwColor.getBottom());
itemView.setTouchDelegate(new TouchDelegate(rect, touch)); view.setTouchDelegate(new TouchDelegate(rect, touch));
} }
}); });
@ -416,7 +416,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
vwColor.setOnClickListener(null); vwColor.setOnClickListener(null);
ivExpander.setOnClickListener(null); ivExpander.setOnClickListener(null);
} else } else
itemView.setOnClickListener(null); view.setOnClickListener(null);
ivSnoozed.setOnClickListener(null); ivSnoozed.setOnClickListener(null);
ivFlagged.setOnClickListener(null); ivFlagged.setOnClickListener(null);
ivExpanderAddress.setOnClickListener(null); ivExpanderAddress.setOnClickListener(null);
@ -511,8 +511,8 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
grpDay.setVisibility(message.day ? View.VISIBLE : View.GONE); grpDay.setVisibility(message.day ? View.VISIBLE : View.GONE);
// Selected / disabled // Selected / disabled
itemView.setActivated(selectionTracker != null && selectionTracker.isSelected(message.id)); view.setActivated(selectionTracker != null && selectionTracker.isSelected(message.id));
itemView.setAlpha( view.setAlpha(
message.uid == null && message.uid == null &&
!EntityFolder.OUTBOX.equals(message.folderType) !EntityFolder.OUTBOX.equals(message.folderType)
? Helper.LOW_LIGHT : 1.0f); ? Helper.LOW_LIGHT : 1.0f);
@ -1419,7 +1419,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
webView.setId(vwBody.getId()); webView.setId(vwBody.getId());
webView.setVisibility(vwBody.getVisibility()); webView.setVisibility(vwBody.getVisibility());
ConstraintLayout cl = (ConstraintLayout) itemView; ConstraintLayout cl = (ConstraintLayout) view;
cl.removeView(vwBody); cl.removeView(vwBody);
cl.addView(webView, vwBody.getLayoutParams()); cl.addView(webView, vwBody.getLayoutParams());
@ -1489,7 +1489,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
@Override @Override
public boolean onTouch(View v, MotionEvent me) { public boolean onTouch(View v, MotionEvent me) {
if (me.getPointerCount() == 2) { if (me.getPointerCount() == 2) {
ConstraintLayout cl = (ConstraintLayout) itemView; ConstraintLayout cl = (ConstraintLayout) view;
switch (me.getAction()) { switch (me.getAction()) {
case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_DOWN:
cl.requestDisallowInterceptTouchEvent(true); cl.requestDisallowInterceptTouchEvent(true);
@ -2825,7 +2825,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
protected void onExecuted(Bundle args, List<EntityAnswer> answers) { protected void onExecuted(Bundle args, List<EntityAnswer> answers) {
if (answers == null || answers.size() == 0) { if (answers == null || answers.size() == 0) {
Snackbar snackbar = Snackbar.make( Snackbar snackbar = Snackbar.make(
itemView, view,
context.getString(R.string.title_no_answers), context.getString(R.string.title_no_answers),
Snackbar.LENGTH_LONG); Snackbar.LENGTH_LONG);
snackbar.setAction(R.string.title_fix, new View.OnClickListener() { snackbar.setAction(R.string.title_fix, new View.OnClickListener() {

@ -50,11 +50,10 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
private boolean debug; private boolean debug;
private List<TupleOperationEx> all = new ArrayList<>(); private List<TupleOperationEx> items = new ArrayList<>();
private List<TupleOperationEx> filtered = new ArrayList<>();
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
private View itemView; private View view;
private TextView tvFolder; private TextView tvFolder;
private TextView tvOperation; private TextView tvOperation;
private TextView tvTime; private TextView tvTime;
@ -63,7 +62,7 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
this.itemView = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
tvFolder = itemView.findViewById(R.id.tvFolder); tvFolder = itemView.findViewById(R.id.tvFolder);
tvOperation = itemView.findViewById(R.id.tvOperation); tvOperation = itemView.findViewById(R.id.tvOperation);
tvTime = itemView.findViewById(R.id.tvTime); tvTime = itemView.findViewById(R.id.tvTime);
@ -71,19 +70,19 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
} }
private void wire() { private void wire() {
itemView.setOnClickListener(this); view.setOnClickListener(this);
if (BuildConfig.DEBUG || debug) if (BuildConfig.DEBUG || debug)
itemView.setOnLongClickListener(this); view.setOnLongClickListener(this);
} }
private void unwire() { private void unwire() {
itemView.setOnClickListener(null); view.setOnClickListener(null);
if (BuildConfig.DEBUG || debug) if (BuildConfig.DEBUG || debug)
itemView.setOnLongClickListener(null); view.setOnLongClickListener(null);
} }
private void bindTo(TupleOperationEx operation) { private void bindTo(TupleOperationEx operation) {
itemView.setAlpha(operation.synchronize ? 1.0f : Helper.LOW_LIGHT); view.setAlpha(operation.synchronize ? 1.0f : Helper.LOW_LIGHT);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(operation.name); sb.append(operation.name);
@ -111,7 +110,7 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
if (pos == RecyclerView.NO_POSITION) if (pos == RecyclerView.NO_POSITION)
return; return;
TupleOperationEx operation = filtered.get(pos); TupleOperationEx operation = items.get(pos);
if (operation == null) if (operation == null)
return; return;
@ -176,7 +175,7 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
if (pos == RecyclerView.NO_POSITION) if (pos == RecyclerView.NO_POSITION)
return false; return false;
TupleOperationEx operation = filtered.get(pos); TupleOperationEx operation = items.get(pos);
if (operation == null) if (operation == null)
return false; return false;
@ -219,12 +218,9 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
public void set(@NonNull List<TupleOperationEx> operations) { public void set(@NonNull List<TupleOperationEx> operations) {
Log.i("Set operations=" + operations.size()); 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)); items = operations;
filtered.clear();
filtered.addAll(all);
diff.dispatchUpdatesTo(new ListUpdateCallback() { diff.dispatchUpdatesTo(new ListUpdateCallback() {
@Override @Override
@ -251,12 +247,12 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
} }
private class DiffCallback extends DiffUtil.Callback { private class DiffCallback extends DiffUtil.Callback {
private List<TupleOperationEx> prev; private List<TupleOperationEx> prev = new ArrayList<>();
private List<TupleOperationEx> next; private List<TupleOperationEx> next = new ArrayList<>();
DiffCallback(List<TupleOperationEx> prev, List<TupleOperationEx> next) { DiffCallback(List<TupleOperationEx> prev, List<TupleOperationEx> next) {
this.prev = prev; this.prev.addAll(prev);
this.next = next; this.next.addAll(next);
} }
@Override @Override
@ -286,12 +282,12 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
@Override @Override
public long getItemId(int position) { public long getItemId(int position) {
return filtered.get(position).id; return items.get(position).id;
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return filtered.size(); return items.size();
} }
@Override @Override
@ -304,7 +300,7 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.unwire(); holder.unwire();
TupleOperationEx operation = filtered.get(position); TupleOperationEx operation = items.get(position);
holder.bindTo(operation); holder.bindTo(operation);
holder.wire(); holder.wire();

@ -46,11 +46,10 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
private LifecycleOwner owner; private LifecycleOwner owner;
private LayoutInflater inflater; private LayoutInflater inflater;
private List<TupleRuleEx> all = new ArrayList<>(); private List<TupleRuleEx> items = new ArrayList<>();
private List<TupleRuleEx> filtered = new ArrayList<>();
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private View itemView; private View view;
private TextView tvName; private TextView tvName;
private TextView tvOrder; private TextView tvOrder;
private ImageView ivStop; private ImageView ivStop;
@ -58,22 +57,22 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
this.itemView = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
tvName = itemView.findViewById(R.id.tvName); tvName = itemView.findViewById(R.id.tvName);
tvOrder = itemView.findViewById(R.id.tvOrder); tvOrder = itemView.findViewById(R.id.tvOrder);
ivStop = itemView.findViewById(R.id.ivStop); ivStop = itemView.findViewById(R.id.ivStop);
} }
private void wire() { private void wire() {
itemView.setOnClickListener(this); view.setOnClickListener(this);
} }
private void unwire() { private void unwire() {
itemView.setOnClickListener(null); view.setOnClickListener(null);
} }
private void bindTo(TupleRuleEx rule) { private void bindTo(TupleRuleEx rule) {
itemView.setActivated(!rule.enabled); view.setActivated(!rule.enabled);
tvName.setText(rule.name); tvName.setText(rule.name);
tvOrder.setText(Integer.toString(rule.order)); tvOrder.setText(Integer.toString(rule.order));
ivStop.setVisibility(rule.stop ? View.VISIBLE : View.INVISIBLE); ivStop.setVisibility(rule.stop ? View.VISIBLE : View.INVISIBLE);
@ -85,7 +84,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
if (pos == RecyclerView.NO_POSITION) if (pos == RecyclerView.NO_POSITION)
return; return;
TupleRuleEx rule = filtered.get(pos); TupleRuleEx rule = items.get(pos);
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
lbm.sendBroadcast( lbm.sendBroadcast(
@ -112,12 +111,6 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
Collections.sort(rules, new Comparator<TupleRuleEx>() { Collections.sort(rules, new Comparator<TupleRuleEx>() {
@Override @Override
public int compare(TupleRuleEx r1, TupleRuleEx r2) { 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); int o = ((Integer) r1.order).compareTo(r2.order);
if (o != 0) if (o != 0)
return 0; return 0;
@ -125,12 +118,9 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
} }
}); });
all = rules; DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, rules), false);
DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); items = rules;
filtered.clear();
filtered.addAll(all);
diff.dispatchUpdatesTo(new ListUpdateCallback() { diff.dispatchUpdatesTo(new ListUpdateCallback() {
@Override @Override
@ -157,12 +147,12 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
} }
private class DiffCallback extends DiffUtil.Callback { private class DiffCallback extends DiffUtil.Callback {
private List<TupleRuleEx> prev; private List<TupleRuleEx> prev = new ArrayList<>();
private List<TupleRuleEx> next; private List<TupleRuleEx> next = new ArrayList<>();
DiffCallback(List<TupleRuleEx> prev, List<TupleRuleEx> next) { DiffCallback(List<TupleRuleEx> prev, List<TupleRuleEx> next) {
this.prev = prev; this.prev.addAll(prev);
this.next = next; this.next.addAll(next);
} }
@Override @Override
@ -192,12 +182,12 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
@Override @Override
public long getItemId(int position) { public long getItemId(int position) {
return filtered.get(position).id; return items.get(position).id;
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return filtered.size(); return items.size();
} }
@Override @Override
@ -209,7 +199,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
@Override @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.unwire(); holder.unwire();
TupleRuleEx rule = filtered.get(position); TupleRuleEx rule = items.get(position);
holder.bindTo(rule); holder.bindTo(rule);
holder.wire(); holder.wire();
} }

@ -36,7 +36,10 @@ public interface DaoContact {
@Query("SELECT * FROM contact" + @Query("SELECT * FROM contact" +
" ORDER BY" + " 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" + ", times_contacted DESC" +
", last_contacted DESC") ", last_contacted DESC")
LiveData<List<EntityContact>> liveContacts(); LiveData<List<EntityContact>> liveContacts();

@ -37,7 +37,7 @@ public interface DaoRule {
@Query("SELECT * FROM rule" + @Query("SELECT * FROM rule" +
" WHERE folder = :folder" + " WHERE folder = :folder" +
" AND enabled" + " AND enabled" +
" ORDER BY `order`") " ORDER BY `order`, name")
List<EntityRule> getEnabledRules(long folder); List<EntityRule> getEnabledRules(long folder);
@Query("SELECT rule.*, folder.account, folder.name AS folderName, account.name AS accountName FROM rule" + @Query("SELECT rule.*, folder.account, folder.name AS folderName, account.name AS accountName FROM rule" +

Loading…
Cancel
Save