package cl.monsoon.s1next.view.fragment;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import com.google.common.base.Preconditions;
import cl.monsoon.s1next.R;
import cl.monsoon.s1next.data.api.Api;
import cl.monsoon.s1next.data.api.model.Forum;
import cl.monsoon.s1next.util.IntentUtil;
import cl.monsoon.s1next.util.MathUtil;
/**
* A Fragment includes {@link android.support.v4.view.ViewPager}
* to represent each page of thread lists.
*/
public final class ThreadListFragment extends BaseViewPagerFragment
implements ThreadListPagerFragment.PagerCallback {
public static final String TAG = ThreadListFragment.class.getName();
private static final String ARG_FORUM = "forum";
private String mForumName;
private String mForumId;
public static ThreadListFragment newInstance(Forum forum) {
ThreadListFragment fragment = new ThreadListFragment();
Bundle bundle = new Bundle();
bundle.putParcelable(ARG_FORUM, forum);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Forum forum = Preconditions.checkNotNull(getArguments().getParcelable(ARG_FORUM));
mForumName = forum.getName();
mForumId = forum.getId();
if (savedInstanceState == null) {
setTotalPageByThreads(forum.getThreads());
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_thread, menu);
menu.findItem(R.id.menu_page_jump).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_browser:
IntentUtil.startViewIntentExcludeOurApp(getContext(), Uri.parse(
Api.getThreadListUrlForBrowser(mForumId, getCurrentPage() + 1)));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
BaseFragmentStatePagerAdapter getPagerAdapter(FragmentManager fragmentManager) {
return new ThreadListPagerAdapter(fragmentManager);
}
@Override
protected CharSequence getTitleWithoutPosition() {
return mForumName;
}
@Override
public void setTotalPageByThreads(int threads) {
setTotalPages(MathUtil.divide(threads, Api.THREADS_PER_PAGE));
}
/**
* Returns a Fragment corresponding to one of the pages of threads.
*/
private class ThreadListPagerAdapter extends BaseFragmentStatePagerAdapter {
private ThreadListPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
return ThreadListPagerFragment.newInstance(mForumId, i + 1);
}
}
}