diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index af9817d5a2..2d5be3283e 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -188,8 +188,6 @@ public class AdapterMessage extends RecyclerView.Adapter getItemDetails(@NonNull MotionEvent motionEvent) { - return itemDetails; + return new ItemDetailsMessage(this); + } + + Long getKey() { + return getKeyAtPosition(getAdapterPosition()); } } @@ -1575,6 +1576,11 @@ public class AdapterMessage extends RecyclerView.Adapter DIFF_CALLBACK = new DiffUtil.ItemCallback() { @Override @@ -1616,6 +1622,54 @@ public class AdapterMessage extends RecyclerView.Adapter messages = getCurrentList(); + if (messages != null) + for (int i = 0; i < messages.size(); i++) { + TupleMessageEx message = messages.get(i); + if (message != null && message.id.equals(key)) { + Log.i(Helper.TAG, "Position=" + i + " @Key=" + key); + return i; + } + } + Log.i(Helper.TAG, "Position=" + RecyclerView.NO_POSITION + " @Key=" + key); + return RecyclerView.NO_POSITION; + } + + TupleMessageEx getItemAtPosition(int pos) { + PagedList list = getCurrentList(); + if (list != null && pos < list.size()) { + TupleMessageEx message = list.get(pos); + Long key = (message == null ? null : message.id); + Log.i(Helper.TAG, "Item=" + key + " @Position=" + pos); + return message; + } else { + Log.i(Helper.TAG, "Item=" + null + " @Position=" + pos); + return null; + } + } + + TupleMessageEx getItemForKey(long key) { + PagedList messages = getCurrentList(); + if (messages != null) + for (int i = 0; i < messages.size(); i++) { + TupleMessageEx message = messages.get(i); + if (message != null && message.id.equals(key)) { + Log.i(Helper.TAG, "Item=" + message.id + " @Key=" + key); + return message; + } + } + Log.i(Helper.TAG, "Item=" + null + " @Key" + key); + return null; + } + + Long getKeyAtPosition(int pos) { + TupleMessageEx message = getItemAtPosition(pos); + Long key = (message == null ? null : message.id); + Log.i(Helper.TAG, "Key=" + key + " @Position=" + pos); + return key; + } + interface IProperties { void setExpanded(long id, boolean expand); diff --git a/app/src/main/java/eu/faircode/email/ItemDetailsMessage.java b/app/src/main/java/eu/faircode/email/ItemDetailsMessage.java index f25a75fedd..c62c33a11c 100644 --- a/app/src/main/java/eu/faircode/email/ItemDetailsMessage.java +++ b/app/src/main/java/eu/faircode/email/ItemDetailsMessage.java @@ -19,26 +19,31 @@ package eu.faircode.email; Copyright 2018 by Marcel Bokhorst (M66B) */ +import android.util.Log; + import androidx.annotation.Nullable; import androidx.recyclerview.selection.ItemDetailsLookup; public class ItemDetailsMessage extends ItemDetailsLookup.ItemDetails { - private int pos; - private Long key; + private AdapterMessage.ViewHolder viewHolder; - ItemDetailsMessage(int pos, Long id) { - this.pos = pos; - this.key = id; + ItemDetailsMessage(AdapterMessage.ViewHolder viewHolder) { + this.viewHolder = viewHolder; } @Override public int getPosition() { + int pos = viewHolder.getAdapterPosition(); + Log.i(Helper.TAG, "ItemDetails pos=" + pos); return pos; } @Nullable @Override public Long getSelectionKey() { + int pos = viewHolder.getAdapterPosition(); + Long key = viewHolder.getKey(); + Log.i(Helper.TAG, "ItemDetails pos=" + pos + " key=" + key); return key; } } diff --git a/app/src/main/java/eu/faircode/email/ItemKeyProviderMessage.java b/app/src/main/java/eu/faircode/email/ItemKeyProviderMessage.java index 6b6eef6a3b..a4088c862a 100644 --- a/app/src/main/java/eu/faircode/email/ItemKeyProviderMessage.java +++ b/app/src/main/java/eu/faircode/email/ItemKeyProviderMessage.java @@ -21,7 +21,6 @@ package eu.faircode.email; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.paging.PagedList; import androidx.recyclerview.selection.ItemKeyProvider; import androidx.recyclerview.widget.RecyclerView; @@ -37,23 +36,12 @@ public class ItemKeyProviderMessage extends ItemKeyProvider { @Override public Long getKey(int pos) { AdapterMessage adapter = (AdapterMessage) recyclerView.getAdapter(); - PagedList list = adapter.getCurrentList(); - if (list != null && pos < list.size()) - return list.get(pos).id; - else - return null; + return adapter.getKeyAtPosition(pos); } @Override public int getPosition(@NonNull Long key) { AdapterMessage adapter = (AdapterMessage) recyclerView.getAdapter(); - PagedList messages = adapter.getCurrentList(); - if (messages != null) - for (int i = 0; i < messages.size(); i++) { - TupleMessageEx message = messages.get(i); - if (message != null && message.id.equals(key)) - return i; - } - return RecyclerView.NO_POSITION; + return adapter.getPositionForKey(key); } } diff --git a/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java b/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java index dc1fe5b1e5..2151bf09a0 100644 --- a/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java +++ b/app/src/main/java/eu/faircode/email/SelectionPredicateMessage.java @@ -20,7 +20,6 @@ package eu.faircode.email; */ import androidx.annotation.NonNull; -import androidx.paging.PagedList; import androidx.recyclerview.selection.SelectionTracker; import androidx.recyclerview.widget.RecyclerView; @@ -39,34 +38,26 @@ public class SelectionPredicateMessage extends SelectionTracker.SelectionPredica @Override public boolean canSetStateForKey(@NonNull Long key, boolean nextState) { AdapterMessage adapter = (AdapterMessage) recyclerView.getAdapter(); - PagedList messages = adapter.getCurrentList(); - if (messages != null) - for (int i = 0; i < messages.size(); i++) { - TupleMessageEx message = messages.get(i); - if (message != null && message.id.equals(key)) { - if (message.uid != null && (account < 0 || account == message.account)) { - account = message.account; - return true; - } else - return false; - } - } + TupleMessageEx message = adapter.getItemForKey(key); + + if (message != null && message.uid != null && (account < 0 || account == message.account)) { + account = message.account; + return true; + } + return false; } @Override public boolean canSetStateAtPosition(int position, boolean nextState) { AdapterMessage adapter = (AdapterMessage) recyclerView.getAdapter(); - PagedList messages = adapter.getCurrentList(); - if (messages != null) { - TupleMessageEx message = messages.get(position); - if (message != null) { - if (message.uid != null && (account < 0 || account == message.account)) { - account = message.account; - return true; - } - } + TupleMessageEx message = adapter.getItemAtPosition(position); + + if (message != null && message.uid != null && (account < 0 || account == message.account)) { + account = message.account; + return true; } + return false; }