diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListActivity.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListActivity.java | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListActivity.java new file mode 100644 index 000000000..fcad59159 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListActivity.java @@ -0,0 +1,181 @@ +package org.wordpress.android.ui.reader; + +import android.app.Fragment; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.design.widget.AppBarLayout; +import android.support.design.widget.CoordinatorLayout; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.MenuItem; +import android.view.View; + +import org.wordpress.android.R; +import org.wordpress.android.models.ReaderTag; +import org.wordpress.android.ui.reader.ReaderTypes.ReaderPostListType; + +/* + * serves as the host for ReaderPostListFragment when showing blog preview & tag preview + */ + +public class ReaderPostListActivity extends AppCompatActivity { + + private ReaderPostListType mPostListType; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.reader_activity_post_list); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + } + + if (getIntent().hasExtra(ReaderConstants.ARG_POST_LIST_TYPE)) { + mPostListType = (ReaderPostListType) getIntent().getSerializableExtra(ReaderConstants.ARG_POST_LIST_TYPE); + } else { + mPostListType = ReaderTypes.DEFAULT_POST_LIST_TYPE; + } + + if (getPostListType() == ReaderPostListType.TAG_PREVIEW || getPostListType() == ReaderPostListType.BLOG_PREVIEW) { + // show an X in the toolbar which closes the activity - if this is tag preview, then + // using the back button will navigate through tags if the user explores beyond a single tag + toolbar.setNavigationIcon(R.drawable.ic_close_white_24dp); + toolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + finish(); + } + }); + + if (getPostListType() == ReaderPostListType.BLOG_PREVIEW) { + setTitle(R.string.reader_title_blog_preview); + if (savedInstanceState == null) { + long blogId = getIntent().getLongExtra(ReaderConstants.ARG_BLOG_ID, 0); + long feedId = getIntent().getLongExtra(ReaderConstants.ARG_FEED_ID, 0); + if (feedId != 0) { + showListFragmentForFeed(feedId); + } else { + showListFragmentForBlog(blogId); + } + } + } else if (getPostListType() == ReaderPostListType.TAG_PREVIEW) { + setTitle(R.string.reader_title_tag_preview); + ReaderTag tag = (ReaderTag) getIntent().getSerializableExtra(ReaderConstants.ARG_TAG); + if (tag != null && savedInstanceState == null) { + showListFragmentForTag(tag, mPostListType); + } + } + } + } + + @Override + protected void onResumeFragments() { + super.onResumeFragments(); + //this particular Activity doesn't show filtering, so we'll disable the FilteredRecyclerView toolbar here + disableFilteredRecyclerViewToolbar(); + } + + /* + * This method hides the FilteredRecyclerView toolbar with spinner so to disable content filtering, for reusability + * */ + private void disableFilteredRecyclerViewToolbar(){ + // make it invisible - setting height to zero here because setting visibility to View.GONE wouldn't take the + // occupied space, as otherwise expected + AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.app_bar_layout); + if (appBarLayout != null) { + CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appBarLayout.getLayoutParams(); + lp.height = 0; + appBarLayout.setLayoutParams(lp); + } + + // disabling any CoordinatorLayout behavior for scrolling + Toolbar toolbarWithSpinner = (Toolbar) findViewById(R.id.toolbar_with_spinner); + if (toolbarWithSpinner != null){ + AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) toolbarWithSpinner.getLayoutParams(); + p.setScrollFlags(0); + toolbarWithSpinner.setLayoutParams(p); + } + } + + private ReaderPostListType getPostListType() { + return (mPostListType != null ? mPostListType : ReaderTypes.DEFAULT_POST_LIST_TYPE); + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + if (outState.isEmpty()) { + outState.putBoolean("bug_19917_fix", true); + } + super.onSaveInstanceState(outState); + } + + @Override + public void onBackPressed() { + ReaderPostListFragment fragment = getListFragment(); + if (fragment == null || !fragment.onActivityBackPressed()) { + super.onBackPressed(); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + onBackPressed(); + return true; + } + return super.onOptionsItemSelected(item); + } + + /* + * show fragment containing list of latest posts for a specific tag + */ + private void showListFragmentForTag(final ReaderTag tag, ReaderPostListType listType) { + if (isFinishing()) { + return; + } + Fragment fragment = ReaderPostListFragment.newInstanceForTag(tag, listType); + getFragmentManager() + .beginTransaction() + .replace(R.id.fragment_container, fragment, getString(R.string.fragment_tag_reader_post_list)) + .commit(); + } + + /* + * show fragment containing list of latest posts in a specific blog + */ + private void showListFragmentForBlog(long blogId) { + if (isFinishing()) { + return; + } + Fragment fragment = ReaderPostListFragment.newInstanceForBlog(blogId); + getFragmentManager() + .beginTransaction() + .replace(R.id.fragment_container, fragment, getString(R.string.fragment_tag_reader_post_list)) + .commit(); + } + + private void showListFragmentForFeed(long feedId) { + if (isFinishing()) { + return; + } + Fragment fragment = ReaderPostListFragment.newInstanceForFeed(feedId); + getFragmentManager() + .beginTransaction() + .replace(R.id.fragment_container, fragment, getString(R.string.fragment_tag_reader_post_list)) + .commit(); + } + + private ReaderPostListFragment getListFragment() { + Fragment fragment = getFragmentManager().findFragmentByTag(getString(R.string.fragment_tag_reader_post_list)); + if (fragment == null) { + return null; + } + return ((ReaderPostListFragment) fragment); + } +} |