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
