[android] remove complicated logic for detecting new visible items

notify after every scroll for all visible items instead
This commit is contained in:
Torsten Grote
2019-03-19 12:35:15 -03:00
parent 880d77922e
commit ae09b4c607
3 changed files with 11 additions and 30 deletions

View File

@@ -16,7 +16,7 @@ class ConversationScrollListener extends
} }
@Override @Override
protected void onNewItemVisible(ConversationItem item) { protected void onItemVisible(ConversationItem item) {
if (!item.isRead()) { if (!item.isRead()) {
viewModel.markMessageRead(item.getGroupId(), item.getId()); viewModel.markMessageRead(item.getGroupId(), item.getId());
item.markRead(); item.markRead();

View File

@@ -34,14 +34,14 @@ class ThreadScrollListener<I extends ThreadItem>
} }
@Override @Override
protected void onNewItemVisible(int firstVisible, int lastVisible, protected void onItemsVisible(int firstVisible, int lastVisible,
int itemCount) { int itemCount) {
super.onNewItemVisible(firstVisible, lastVisible, itemCount); super.onItemsVisible(firstVisible, lastVisible, itemCount);
updateUnreadButtons(firstVisible, lastVisible, itemCount); updateUnreadButtons(firstVisible, lastVisible, itemCount);
} }
@Override @Override
protected void onNewItemVisible(I item) { protected void onItemVisible(I item) {
if (!item.isRead()) { if (!item.isRead()) {
item.setRead(true); item.setRead(true);
controller.markItemRead(item); controller.markItemRead(item);

View File

@@ -36,7 +36,7 @@ public abstract class BriarRecyclerViewScrollListener<A extends ItemReturningAda
if (firstVisible != prevFirstVisible || if (firstVisible != prevFirstVisible ||
lastVisible != prevLastVisible || lastVisible != prevLastVisible ||
itemCount != prevItemCount) { itemCount != prevItemCount) {
onNewItemVisible(firstVisible, lastVisible, itemCount); onItemsVisible(firstVisible, lastVisible, itemCount);
prevFirstVisible = firstVisible; prevFirstVisible = firstVisible;
prevLastVisible = lastVisible; prevLastVisible = lastVisible;
prevItemCount = itemCount; prevItemCount = itemCount;
@@ -44,37 +44,18 @@ public abstract class BriarRecyclerViewScrollListener<A extends ItemReturningAda
} }
@CallSuper @CallSuper
protected void onNewItemVisible(int firstVisible, int lastVisible, protected void onItemsVisible(int firstVisible, int lastVisible,
int itemCount) { int itemCount) {
boolean init = prevFirstVisible == NO_POSITION || for (int i = firstVisible; i <= lastVisible; i++) {
prevLastVisible == NO_POSITION; onItemVisible(i);
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);
} }
} }
private void onNewItemVisible(int position) { private void onItemVisible(int position) {
I item = requireNonNull(adapter.getItemAt(position)); I item = requireNonNull(adapter.getItemAt(position));
onNewItemVisible(item); onItemVisible(item);
} }
protected abstract void onNewItemVisible(I item); protected abstract void onItemVisible(I item);
} }