RecyclerView load more helper class

Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/40085c58
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/40085c58
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/40085c58

Branch: refs/heads/master
Commit: 40085c58fb4cbf41b75ac6e9937b53c5d6df0929
Parents: 9a4bac6
Author: Sagar <[email protected]>
Authored: Fri May 6 16:52:07 2016 +0530
Committer: Sagar <[email protected]>
Committed: Fri May 6 16:54:30 2016 +0530

----------------------------------------------------------------------
 .../EndlessRecyclerOnScrollListener.java        | 46 ++++++++++++++++++++
 .../taverna/mobile/ui/base/BasePresenter.java   | 41 +++++++++++++++++
 .../apache/taverna/mobile/ui/base/MvpView.java  | 11 +++++
 .../taverna/mobile/ui/base/Presenter.java       | 12 +++++
 4 files changed, 110 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/40085c58/app/src/main/java/org/apache/taverna/mobile/ui/adapter/EndlessRecyclerOnScrollListener.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/taverna/mobile/ui/adapter/EndlessRecyclerOnScrollListener.java
 
b/app/src/main/java/org/apache/taverna/mobile/ui/adapter/EndlessRecyclerOnScrollListener.java
new file mode 100644
index 0000000..c9d1aee
--- /dev/null
+++ 
b/app/src/main/java/org/apache/taverna/mobile/ui/adapter/EndlessRecyclerOnScrollListener.java
@@ -0,0 +1,46 @@
+package org.apache.taverna.mobile.ui.adapter;
+
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+
+public abstract class EndlessRecyclerOnScrollListener extends 
RecyclerView.OnScrollListener {
+    public static String TAG = 
EndlessRecyclerOnScrollListener.class.getSimpleName();
+
+    private int previousTotal = 0; // The total number of items in the dataset 
after the last load
+    private boolean loading = true; // True if we are still waiting for the 
last set of data to load.
+    private int visibleThreshold = 1; // The minimum amount of items to have 
below your current scroll position before loading more.
+    int firstVisibleItem, visibleItemCount, totalItemCount;
+
+    private int current_page = 1;
+
+    private LinearLayoutManager mLinearLayoutManager;
+
+    public EndlessRecyclerOnScrollListener(LinearLayoutManager 
linearLayoutManager) {
+        this.mLinearLayoutManager = linearLayoutManager;
+    }
+
+    @Override
+    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+        super.onScrolled(recyclerView, dx, dy);
+
+        visibleItemCount = recyclerView.getChildCount();
+        totalItemCount = mLinearLayoutManager.getItemCount();
+        firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition();
+
+        if (loading) {
+            if (totalItemCount > previousTotal+1) {
+                loading = false;
+                previousTotal = totalItemCount;
+            }
+        }
+        if (!loading && (totalItemCount - visibleItemCount) <= 
(firstVisibleItem + visibleThreshold)) {
+            // End has been reached
+            // Do something
+            current_page++;
+            onLoadMore(current_page);
+            loading = true;
+        }
+    }
+
+    public abstract void onLoadMore(int current_page);
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/40085c58/app/src/main/java/org/apache/taverna/mobile/ui/base/BasePresenter.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/taverna/mobile/ui/base/BasePresenter.java 
b/app/src/main/java/org/apache/taverna/mobile/ui/base/BasePresenter.java
new file mode 100644
index 0000000..040f720
--- /dev/null
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/base/BasePresenter.java
@@ -0,0 +1,41 @@
+package org.apache.taverna.mobile.ui.base;
+
+/**
+ * Base class that implements the Presenter interface and provides a base 
implementation for
+ * attachView() and detachView(). It also handles keeping a reference to the 
mvpView that
+ * can be accessed from the children classes by calling getMvpView().
+ */
+public class BasePresenter<T extends MvpView> implements Presenter<T> {
+
+    private T mMvpView;
+
+    @Override
+    public void attachView(T mvpView) {
+        mMvpView = mvpView;
+    }
+
+    @Override
+    public void detachView() {
+        mMvpView = null;
+    }
+
+    public boolean isViewAttached() {
+        return mMvpView != null;
+    }
+
+    public T getMvpView() {
+        return mMvpView;
+    }
+
+    public void checkViewAttached() {
+        if (!isViewAttached()) throw new MvpViewNotAttachedException();
+    }
+
+    public static class MvpViewNotAttachedException extends RuntimeException {
+        public MvpViewNotAttachedException() {
+            super("Please call Presenter.attachView(MvpView) before" +
+                    " requesting data to the Presenter");
+        }
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/40085c58/app/src/main/java/org/apache/taverna/mobile/ui/base/MvpView.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/base/MvpView.java 
b/app/src/main/java/org/apache/taverna/mobile/ui/base/MvpView.java
new file mode 100644
index 0000000..67dc5b3
--- /dev/null
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/base/MvpView.java
@@ -0,0 +1,11 @@
+package org.apache.taverna.mobile.ui.base;
+
+
+/**
+ * Base interface that any class that wants to act as a View in the MVP (Model 
View Presenter)
+ * pattern must implement. Generally this interface will be extended by a more 
specific interface
+ * that then usually will be implemented by an Activity or Fragment.
+ */
+public interface MvpView {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/40085c58/app/src/main/java/org/apache/taverna/mobile/ui/base/Presenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/base/Presenter.java 
b/app/src/main/java/org/apache/taverna/mobile/ui/base/Presenter.java
new file mode 100644
index 0000000..78d3d33
--- /dev/null
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/base/Presenter.java
@@ -0,0 +1,12 @@
+package org.apache.taverna.mobile.ui.base;
+
+/**
+ * Every presenter in the app must either implement this interface or extend 
BasePresenter
+ * indicating the MvpView type that wants to be attached with.
+ */
+public interface Presenter<V extends MvpView> {
+
+    void attachView(V mvpView);
+
+    void detachView();
+}

Reply via email to