[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
protected void onNewItemVisible(ConversationItem item) {
protected void onItemVisible(ConversationItem item) {
if (!item.isRead()) {
viewModel.markMessageRead(item.getGroupId(), item.getId());
item.markRead();

View File

@@ -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);

View File

@@ -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);
}