From 393072c2f9e39fd513480013393fc645c9e548d0 Mon Sep 17 00:00:00 2001 From: Gary Mathews Date: Thu, 17 Dec 2020 16:17:49 -0800 Subject: [PATCH] fix(android): implement old scrolling event behaviour --- .../ui/widget/listview/TiListView.java | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/TiListView.java b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/TiListView.java index e0789e68bb6..2581a036eca 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/TiListView.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/TiListView.java @@ -53,6 +53,8 @@ public class TiListView extends TiSwipeRefreshLayout implements OnSearchChangeLi private final SelectionTracker tracker; private boolean isFiltered = false; + private boolean isScrolling = false; + private int lastScrollDeltaY; public TiListView(ListViewProxy proxy) { @@ -76,6 +78,7 @@ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newStat super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE) { + isScrolling = false; proxy.fireSyncEvent(TiC.EVENT_SCROLLEND, generateScrollPayload()); } } @@ -85,28 +88,26 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); - proxy.fireSyncEvent(TiC.EVENT_SCROLLSTART, generateScrollPayload()); - } - }); - this.recyclerView.setOnFlingListener(new RecyclerView.OnFlingListener() - { - @Override - public boolean onFling(int velocityX, int velocityY) - { - final KrollDict payload = new KrollDict(); - - // Determine scroll direction. - if (velocityY > 0) { - payload.put(TiC.PROPERTY_DIRECTION, "down"); - } else if (velocityY < 0) { - payload.put(TiC.PROPERTY_DIRECTION, "up"); + if (!isScrolling) { + isScrolling = true; + proxy.fireSyncEvent(TiC.EVENT_SCROLLSTART, generateScrollPayload()); } - // Set scroll velocity. - payload.put(TiC.EVENT_PROPERTY_VELOCITY, velocityY); + // Only fire `scrolling` event upon direction change. + if (lastScrollDeltaY >= 0 && dy <= 0 || lastScrollDeltaY <= 0 && dy >= 0) { + final KrollDict payload = generateScrollPayload(); + + // Determine scroll direction. + if (dy > 0) { + payload.put(TiC.PROPERTY_DIRECTION, "up"); + } else if (dy < 0) { + payload.put(TiC.PROPERTY_DIRECTION, "down"); + } + payload.put(TiC.EVENT_PROPERTY_VELOCITY, 0); + proxy.fireSyncEvent(TiC.EVENT_SCROLLING, payload); + } - proxy.fireSyncEvent(TiC.EVENT_SCROLLING, payload); - return false; + lastScrollDeltaY = dy; } });