mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 10:49:06 +01:00
[android] remove complicated logic for detecting new visible items
notify after every scroll for all visible items instead
This commit is contained in:
@@ -16,7 +16,7 @@ class ConversationScrollListener extends
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewItemVisible(ConversationItem item) {
|
||||
protected void onItemVisible(ConversationItem item) {
|
||||
if (!item.isRead()) {
|
||||
viewModel.markMessageRead(item.getGroupId(), item.getId());
|
||||
item.markRead();
|
||||
|
||||
@@ -34,14 +34,14 @@ class ThreadScrollListener<I extends ThreadItem>
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewItemVisible(int firstVisible, int lastVisible,
|
||||
protected void onItemsVisible(int firstVisible, int lastVisible,
|
||||
int itemCount) {
|
||||
super.onNewItemVisible(firstVisible, lastVisible, itemCount);
|
||||
super.onItemsVisible(firstVisible, lastVisible, itemCount);
|
||||
updateUnreadButtons(firstVisible, lastVisible, itemCount);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewItemVisible(I item) {
|
||||
protected void onItemVisible(I item) {
|
||||
if (!item.isRead()) {
|
||||
item.setRead(true);
|
||||
controller.markItemRead(item);
|
||||
|
||||
@@ -36,7 +36,7 @@ public abstract class BriarRecyclerViewScrollListener<A extends ItemReturningAda
|
||||
if (firstVisible != prevFirstVisible ||
|
||||
lastVisible != prevLastVisible ||
|
||||
itemCount != prevItemCount) {
|
||||
onNewItemVisible(firstVisible, lastVisible, itemCount);
|
||||
onItemsVisible(firstVisible, lastVisible, itemCount);
|
||||
prevFirstVisible = firstVisible;
|
||||
prevLastVisible = lastVisible;
|
||||
prevItemCount = itemCount;
|
||||
@@ -44,37 +44,18 @@ public abstract class BriarRecyclerViewScrollListener<A extends ItemReturningAda
|
||||
}
|
||||
|
||||
@CallSuper
|
||||
protected void onNewItemVisible(int firstVisible, int lastVisible,
|
||||
protected void onItemsVisible(int firstVisible, int lastVisible,
|
||||
int itemCount) {
|
||||
boolean init = prevFirstVisible == NO_POSITION ||
|
||||
prevLastVisible == NO_POSITION;
|
||||
int visibleItems = prevLastVisible - prevFirstVisible;
|
||||
boolean jump = Math.abs(firstVisible - prevFirstVisible) > visibleItems;
|
||||
|
||||
if (init || jump) {
|
||||
// If the list has loaded, or we jump scrolled,
|
||||
// all visible items are newly visible
|
||||
for (int i = firstVisible; i <= lastVisible; i++)
|
||||
onNewItemVisible(i);
|
||||
return;
|
||||
}
|
||||
|
||||
boolean up = firstVisible > prevFirstVisible ||
|
||||
lastVisible > prevLastVisible;
|
||||
if (up) {
|
||||
for (int i = prevLastVisible + 1; i <= lastVisible; i++)
|
||||
onNewItemVisible(i);
|
||||
} else {
|
||||
for (int i = firstVisible; i < prevFirstVisible; i++)
|
||||
onNewItemVisible(i);
|
||||
for (int i = firstVisible; i <= lastVisible; i++) {
|
||||
onItemVisible(i);
|
||||
}
|
||||
}
|
||||
|
||||
private void onNewItemVisible(int position) {
|
||||
private void onItemVisible(int position) {
|
||||
I item = requireNonNull(adapter.getItemAt(position));
|
||||
onNewItemVisible(item);
|
||||
onItemVisible(item);
|
||||
}
|
||||
|
||||
protected abstract void onNewItemVisible(I item);
|
||||
protected abstract void onItemVisible(I item);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user