package cl.monsoon.s1next.view.fragment;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import cl.monsoon.s1next.R;
import cl.monsoon.s1next.data.api.Api;
import cl.monsoon.s1next.data.api.model.collection.ForumGroups;
import cl.monsoon.s1next.data.api.model.wrapper.ForumGroupsWrapper;
import cl.monsoon.s1next.util.IntentUtil;
import cl.monsoon.s1next.view.adapter.ForumRecyclerViewAdapter;
import cl.monsoon.s1next.view.internal.ToolbarDropDownInterface;
import rx.Observable;
/**
* A Fragment represents forum list.
*/
public final class ForumFragment extends BaseFragment<ForumGroupsWrapper>
implements ToolbarDropDownInterface.OnItemSelectedListener {
public static final String TAG = ForumFragment.class.getName();
private ForumRecyclerViewAdapter mRecyclerAdapter;
private ForumGroups mForumGroups;
private ToolbarDropDownInterface.Callback mToolbarCallback;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
RecyclerView recyclerView = getRecyclerView();
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mRecyclerAdapter = new ForumRecyclerViewAdapter(getActivity());
recyclerView.setAdapter(mRecyclerAdapter);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
mToolbarCallback = (ToolbarDropDownInterface.Callback) context;
}
@Override
public void onDetach() {
super.onDetach();
mToolbarCallback = null;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_forum, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_browser:
IntentUtil.startViewIntentExcludeOurApp(getContext(), Uri.parse(Api.BASE_URL));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
Observable<ForumGroupsWrapper> getSourceObservable() {
return mS1Service.getForumGroupsWrapper();
}
@Override
void onNext(ForumGroupsWrapper data) {
super.onNext(data);
mForumGroups = data.getForumGroups();
// host activity would call #onToolbarDropDownItemSelected(int) after
mToolbarCallback.setupToolbarDropDown(mForumGroups.getForumGroupNameList());
}
/**
* Show all forums when {@code position == 0} otherwise show
* corresponding forum group's forum list.
*/
@Override
public void onToolbarDropDownItemSelected(int position) {
if (position == 0) {
mRecyclerAdapter.setDataSet(mForumGroups.getForumList());
} else {
// the first position is "全部"
// so position - 1 to correspond its group
mRecyclerAdapter.setDataSet(mForumGroups.getForumGroupList().get(position - 1));
}
mRecyclerAdapter.notifyDataSetChanged();
}
}