]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/MobileLedgerListFragment.java
drop dummy bottom-list entries and intercept draw up/down to hide/show the Add FAB
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / MobileLedgerListFragment.java
index 093aff396d1a0fa51e232c9f219efed03704a917..654bd4dbc49ea527fab66783bcb51b6dccbb4294 100644 (file)
 
 package net.ktnx.mobileledger.ui;
 
+import android.view.MotionEvent;
+
 import net.ktnx.mobileledger.ui.activity.MainActivity;
 import net.ktnx.mobileledger.ui.transaction_list.TransactionListAdapter;
 import net.ktnx.mobileledger.utils.Colors;
+import net.ktnx.mobileledger.utils.DimensionUtils;
 
+import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
 public class MobileLedgerListFragment extends Fragment {
-    protected MainActivity mActivity;
     public SwipeRefreshLayout swiper;
-    protected RecyclerView root;
     public TransactionListAdapter modelAdapter;
+    protected MainActivity mActivity;
+    protected RecyclerView root;
     protected void themeChanged(Integer counter) {
         swiper.setColorSchemeColors(Colors.primary);
     }
@@ -38,4 +42,45 @@ public class MobileLedgerListFragment extends Fragment {
         if (swiper == null) return;
         swiper.setRefreshing(isRunning);
     }
+    protected void manageFabOnScroll() {
+        int triggerPixels = DimensionUtils.dp2px(mActivity, 30f);
+        root.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
+            private float upAnchor = -1;
+            private float downAnchor = -1;
+            private float lastY;
+            @Override
+            public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
+                switch (e.getActionMasked()) {
+                    case MotionEvent.ACTION_DOWN:
+                        lastY = upAnchor = downAnchor = e.getAxisValue(MotionEvent.AXIS_Y);
+                        break;
+                    case MotionEvent.ACTION_MOVE:
+                        final float currentY = e.getAxisValue(MotionEvent.AXIS_Y);
+                        if (currentY > lastY) {
+                            // swipe down
+                            upAnchor = lastY;
+
+                            mActivity.fabShouldShow();
+                        }
+                        else {
+                            // swipe up
+                            downAnchor = lastY;
+
+                            if (currentY < upAnchor - triggerPixels) mActivity.fabHide();
+                        }
+
+                        lastY = currentY;
+
+                        break;
+                }
+                return false;
+            }
+            @Override
+            public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
+            }
+            @Override
+            public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
+            }
+        });
+    }
 }