implement announcement fragment with MVP architecture

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/8762eeba
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/8762eeba
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/8762eeba

Branch: refs/heads/master
Commit: 8762eebabd3c3cfb6081dcf42cfb9a8c50c1c39f
Parents: 46cafcb
Author: Sagar <[email protected]>
Authored: Fri May 6 17:01:10 2016 +0530
Committer: Sagar <[email protected]>
Committed: Fri May 6 17:01:10 2016 +0530

----------------------------------------------------------------------
 .../ui/anouncements/AnnouncementFragment.java   | 168 +++++++++++++++++++
 .../ui/anouncements/AnnouncementMvpView.java    |  10 ++
 .../ui/anouncements/AnnouncementPresenter.java  |  60 +++++++
 3 files changed, 238 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/8762eeba/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementFragment.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementFragment.java
 
b/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementFragment.java
new file mode 100644
index 0000000..b515b55
--- /dev/null
+++ 
b/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementFragment.java
@@ -0,0 +1,168 @@
+package org.apache.taverna.mobile.ui.anouncements;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.DefaultItemAnimator;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ProgressBar;
+
+import org.apache.taverna.mobile.R;
+import org.apache.taverna.mobile.data.DataManager;
+import org.apache.taverna.mobile.data.model.Announcements;
+import org.apache.taverna.mobile.ui.adapter.AnnouncementAdapter;
+import org.apache.taverna.mobile.ui.adapter.EndlessRecyclerOnScrollListener;
+import org.apache.taverna.mobile.ui.adapter.RecyclerItemClickListner;
+import org.apache.taverna.mobile.utils.ScrollChildSwipeRefreshLayout;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+public class AnnouncementFragment extends Fragment implements 
RecyclerItemClickListner.OnItemClickListener, AnnouncementMvpView {
+
+    public  final String LOG_TAG = getClass().getSimpleName();
+
+    @BindView(R.id.rv_movies) RecyclerView mRecyclerView;
+    @BindView(R.id.swipe_refresh)
+    ScrollChildSwipeRefreshLayout mSwipeRefresh;
+    @BindView(R.id.progress_circular)
+    ProgressBar mProgressBar;
+
+
+    private Announcements mAnnouncements;
+    private DataManager dataManager;
+    private AnnouncementPresenter mMainPresenter;
+    private AnnouncementAdapter mAnnouncementAdapter;
+    private String category;
+    private int mPageNumber = 1;
+
+    @Override
+    public void onItemClick(View childView, int position) {
+
+    }
+
+    @Override
+    public void onItemLongPress(View childView, int position) {
+
+    }
+
+
+
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mAnnouncements = new Announcements();
+        dataManager = new DataManager();
+        mMainPresenter = new AnnouncementPresenter(dataManager);
+    }
+
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) {
+        View rootView = inflater.inflate(R.layout.fragment_announcement, 
container, false);
+        ButterKnife.bind(this, rootView);
+        mMainPresenter.attachView(this);
+
+        final LinearLayoutManager layoutManager = new 
LinearLayoutManager(getActivity());
+        mRecyclerView.setLayoutManager(layoutManager);
+        mRecyclerView.addOnItemTouchListener(new 
RecyclerItemClickListner(getActivity(), this));
+        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
+
+
+        mSwipeRefresh.setColorSchemeResources(R.color.colorAccent, 
R.color.colorAccent, R.color.colorPrimary);
+        mSwipeRefresh.setOnRefreshListener(new 
SwipeRefreshLayout.OnRefreshListener() {
+            @Override
+            public void onRefresh() {
+                ConnectivityManager connMgr = (ConnectivityManager) 
getActivity()
+                        .getSystemService(Context.CONNECTIVITY_SERVICE);
+                NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
+                if (networkInfo != null && networkInfo.isConnected()) {
+                    if (mSwipeRefresh.isRefreshing()) {
+                        mPageNumber = 1;
+                        mMainPresenter.loadAllAnnouncement(mPageNumber);
+                        Log.i(LOG_TAG, "Swipe Refresh");
+                    }
+                }
+                else {
+                    Log.i(LOG_TAG, "NO Internet Connection");
+                    if (mSwipeRefresh.isRefreshing()) {
+                        mSwipeRefresh.setRefreshing(false);
+                    }
+                }
+
+            }
+        });
+
+
+        mMainPresenter.loadAllAnnouncement(mPageNumber);
+
+        mRecyclerView.setOnScrollListener(new 
EndlessRecyclerOnScrollListener(layoutManager) {
+            @Override
+            public void onLoadMore(int current_page) {
+                ConnectivityManager connMgr = (ConnectivityManager) 
getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
+                NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
+                if (networkInfo != null && networkInfo.isConnected())
+                {
+                    mAnnouncements.getAnnouncement().add(null);
+                    
mAnnouncementAdapter.notifyItemInserted(mAnnouncements.getAnnouncement().size());
+                    mPageNumber = ++mPageNumber;
+                    mMainPresenter.loadAllAnnouncement(mPageNumber);
+                    Log.i(LOG_TAG, "Loading more");
+                }
+                else
+                {
+                    Log.i(LOG_TAG, "Internet not available. Not loading more 
posts.");
+                }
+            }
+        });
+        return rootView;
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        mMainPresenter.detachView();
+    }
+
+
+
+    @Override
+    public void showAllAnouncement(Announcements announcements) {
+        if(mPageNumber == 1){
+            mAnnouncements = announcements;
+            mAnnouncementAdapter = new 
AnnouncementAdapter(mAnnouncements.getAnnouncement());
+            mRecyclerView.setAdapter(mAnnouncementAdapter);
+        }else {
+            
mAnnouncements.getAnnouncement().remove(mAnnouncements.getAnnouncement().size()-1);
+            
mAnnouncements.getAnnouncement().addAll(announcements.getAnnouncement());
+        }
+
+        mRecyclerView.setVisibility(View.VISIBLE);
+        mAnnouncementAdapter.notifyDataSetChanged();
+        if (mSwipeRefresh.isRefreshing()) {
+            mSwipeRefresh.setRefreshing(false);
+        }
+    }
+
+    @Override
+    public void showProgressbar(boolean status) {
+        if (status){
+            mProgressBar.setVisibility(View.VISIBLE);
+        }else
+            mProgressBar.setVisibility(View.GONE);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/8762eeba/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementMvpView.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementMvpView.java
 
b/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementMvpView.java
new file mode 100644
index 0000000..4f33f02
--- /dev/null
+++ 
b/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementMvpView.java
@@ -0,0 +1,10 @@
+package org.apache.taverna.mobile.ui.anouncements;
+
+import org.apache.taverna.mobile.data.model.Announcements;
+import org.apache.taverna.mobile.ui.base.MvpView;
+
+public interface AnnouncementMvpView extends MvpView {
+
+    void showAllAnouncement(Announcements announcements);
+    void showProgressbar(boolean b);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/8762eeba/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementPresenter.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementPresenter.java
 
b/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementPresenter.java
new file mode 100644
index 0000000..c0d6954
--- /dev/null
+++ 
b/app/src/main/java/org/apache/taverna/mobile/ui/anouncements/AnnouncementPresenter.java
@@ -0,0 +1,60 @@
+package org.apache.taverna.mobile.ui.anouncements;
+
+import android.util.Log;
+
+import org.apache.taverna.mobile.data.DataManager;
+import org.apache.taverna.mobile.data.model.Announcements;
+import org.apache.taverna.mobile.ui.base.BasePresenter;
+import rx.Observer;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+public class AnnouncementPresenter extends BasePresenter<AnnouncementMvpView> {
+
+    public final String LOG_TAG = getClass().getSimpleName();
+    private DataManager mDataManager;
+    private Subscription mSubscriptions;
+
+
+    public AnnouncementPresenter(DataManager dataManager){
+        mDataManager = dataManager;
+    }
+
+    @Override
+    public void attachView(AnnouncementMvpView mvpView) {
+        super.attachView(mvpView);
+    }
+
+    @Override
+    public void detachView() {
+        super.detachView();
+        if (mSubscriptions != null) mSubscriptions.unsubscribe();
+    }
+
+    public void loadAllAnnouncement(int pageNumber){
+        getMvpView().showProgressbar(true);
+        mSubscriptions = mDataManager.getAllAnnouncement(pageNumber)
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribeOn(Schedulers.io())
+                .subscribe(new Observer<Announcements>() {
+                    @Override
+                    public void onCompleted() {
+                        getMvpView().showProgressbar(false);
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        Log.d(LOG_TAG,e.getMessage());
+                    }
+
+                    @Override
+                    public void onNext(Announcements announcement) {
+                        getMvpView().showAllAnouncement(announcement);
+                        
Log.d(LOG_TAG,announcement.getAnnouncement().get(1).getResource());
+                    }
+                });
+    }
+
+
+}
\ No newline at end of file

Reply via email to