aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderBlogFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderBlogFragment.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderBlogFragment.java175
1 files changed, 175 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderBlogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderBlogFragment.java
new file mode 100644
index 000000000..8c526b606
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderBlogFragment.java
@@ -0,0 +1,175 @@
+package org.wordpress.android.ui.reader;
+
+import android.app.Fragment;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import org.wordpress.android.R;
+import org.wordpress.android.models.ReaderBlog;
+import org.wordpress.android.models.ReaderRecommendedBlog;
+import org.wordpress.android.ui.reader.adapters.ReaderBlogAdapter;
+import org.wordpress.android.ui.reader.adapters.ReaderBlogAdapter.ReaderBlogType;
+import org.wordpress.android.ui.reader.views.ReaderRecyclerView;
+import org.wordpress.android.util.AppLog;
+import org.wordpress.android.util.WPActivityUtils;
+
+/*
+ * fragment hosted by ReaderSubsActivity which shows either recommended blogs and followed blogs
+ */
+public class ReaderBlogFragment extends Fragment
+ implements ReaderBlogAdapter.BlogClickListener {
+ private ReaderRecyclerView mRecyclerView;
+ private ReaderBlogAdapter mAdapter;
+ private ReaderBlogType mBlogType;
+ private boolean mWasPaused;
+ private static final String ARG_BLOG_TYPE = "blog_type";
+
+ static ReaderBlogFragment newInstance(ReaderBlogType blogType) {
+ AppLog.d(AppLog.T.READER, "reader blog fragment > newInstance");
+ Bundle args = new Bundle();
+ args.putSerializable(ARG_BLOG_TYPE, blogType);
+ ReaderBlogFragment fragment = new ReaderBlogFragment();
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void setArguments(Bundle args) {
+ super.setArguments(args);
+ restoreState(args);
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (savedInstanceState != null) {
+ AppLog.d(AppLog.T.READER, "reader blog fragment > restoring instance state");
+ restoreState(savedInstanceState);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.reader_fragment_list, container, false);
+ mRecyclerView = (ReaderRecyclerView) view.findViewById(R.id.recycler_view);
+ return view;
+ }
+
+ private void checkEmptyView() {
+ if (!isAdded()) return;
+
+ TextView emptyView = (TextView) getView().findViewById(R.id.text_empty);
+ if (emptyView == null) return;
+
+ boolean isEmpty = hasBlogAdapter() && getBlogAdapter().isEmpty();
+ if (isEmpty) {
+ switch (getBlogType()) {
+ case RECOMMENDED:
+ emptyView.setText(R.string.reader_empty_recommended_blogs);
+ break;
+ case FOLLOWED:
+ emptyView.setText(R.string.reader_empty_followed_blogs_title);
+ break;
+ }
+ }
+ emptyView.setVisibility(isEmpty ? View.VISIBLE : View.GONE);
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ mRecyclerView.setAdapter(getBlogAdapter());
+ refresh();
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putSerializable(ARG_BLOG_TYPE, getBlogType());
+ outState.putBoolean(ReaderConstants.KEY_WAS_PAUSED, mWasPaused);
+ super.onSaveInstanceState(outState);
+ }
+
+ private void restoreState(Bundle args) {
+ if (args != null) {
+ mWasPaused = args.getBoolean(ReaderConstants.KEY_WAS_PAUSED);
+ if (args.containsKey(ARG_BLOG_TYPE)) {
+ mBlogType = (ReaderBlogType) args.getSerializable(ARG_BLOG_TYPE);
+ }
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ mWasPaused = true;
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ // refresh the adapter if the fragment is resuming from a paused state so that changes
+ // made in another activity (such as follow state) are reflected here
+ if (mWasPaused) {
+ mWasPaused = false;
+ refresh();
+ }
+ }
+
+ void refresh() {
+ if (hasBlogAdapter()) {
+ AppLog.d(AppLog.T.READER, "reader subs > refreshing blog fragment " + getBlogType().name());
+ getBlogAdapter().refresh();
+ }
+ }
+
+ private boolean hasBlogAdapter() {
+ return (mAdapter != null);
+ }
+
+ private ReaderBlogAdapter getBlogAdapter() {
+ if (mAdapter == null) {
+ Context context = WPActivityUtils.getThemedContext(getActivity());
+ mAdapter = new ReaderBlogAdapter(context, getBlogType());
+ mAdapter.setBlogClickListener(this);
+ mAdapter.setDataLoadedListener(new ReaderInterfaces.DataLoadedListener() {
+ @Override
+ public void onDataLoaded(boolean isEmpty) {
+ checkEmptyView();
+ }
+ });
+
+ }
+ return mAdapter;
+ }
+
+ public ReaderBlogType getBlogType() {
+ return mBlogType;
+ }
+
+ @Override
+ public void onBlogClicked(Object item) {
+ long blogId;
+ long feedId;
+ if (item instanceof ReaderRecommendedBlog) {
+ ReaderRecommendedBlog blog = (ReaderRecommendedBlog) item;
+ blogId = blog.blogId;
+ feedId = 0;
+ } else if (item instanceof ReaderBlog) {
+ ReaderBlog blog = (ReaderBlog) item;
+ blogId = blog.blogId;
+ feedId = blog.feedId;
+ } else {
+ return;
+ }
+
+ if (feedId != 0) {
+ ReaderActivityLauncher.showReaderFeedPreview(getActivity(), feedId);
+ } else if (blogId != 0) {
+ ReaderActivityLauncher.showReaderBlogPreview(getActivity(), blogId);
+ }
+ }
+}