Allow multiple select for same account in unified inbox

This commit is contained in:
M66B
2018-11-23 08:53:18 +01:00
parent 1f95034d7b
commit 577c7607ca
4 changed files with 172 additions and 247 deletions

View File

@@ -25,13 +25,17 @@ import androidx.recyclerview.selection.SelectionTracker;
import androidx.recyclerview.widget.RecyclerView;
public class SelectionPredicateMessage extends SelectionTracker.SelectionPredicate<Long> {
private RecyclerView recyclerView;
private long account = -1;
SelectionPredicateMessage(RecyclerView recyclerView) {
this.recyclerView = recyclerView;
}
void clearAccount() {
account = -1;
}
@Override
public boolean canSetStateForKey(@NonNull Long key, boolean nextState) {
AdapterMessage adapter = (AdapterMessage) recyclerView.getAdapter();
@@ -39,8 +43,13 @@ public class SelectionPredicateMessage extends SelectionTracker.SelectionPredica
if (messages != null)
for (int i = 0; i < messages.size(); i++) {
TupleMessageEx message = messages.get(i);
if (message != null && message.id.equals(key))
return (message.uid != null);
if (message != null && message.id.equals(key)) {
if (message.uid != null && (account < 0 || account == message.account)) {
account = message.account;
return true;
} else
return false;
}
}
return false;
}
@@ -48,7 +57,15 @@ public class SelectionPredicateMessage extends SelectionTracker.SelectionPredica
@Override
public boolean canSetStateAtPosition(int position, boolean nextState) {
AdapterMessage adapter = (AdapterMessage) recyclerView.getAdapter();
return (adapter.getCurrentList().get(position).uid != null);
PagedList<TupleMessageEx> messages = adapter.getCurrentList();
if (messages != null) {
TupleMessageEx message = messages.get(position);
if (message.uid != null && (account < 0 || account == message.account)) {
account = message.account;
return true;
}
}
return false;
}
@Override