package what.whatandroid.forums.forum;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import api.forum.forum.Forum;
import api.soup.MySoup;
import what.whatandroid.R;
import what.whatandroid.callbacks.LoadingListener;
import what.whatandroid.callbacks.OnLoggedInCallback;
import what.whatandroid.callbacks.SetTitleCallback;
import what.whatandroid.forums.ForumActivity;
import what.whatandroid.forums.NumberPickerDialog;
/**
* Displays a paged view of the posts in some forum
*/
public class ForumFragment extends Fragment implements OnLoggedInCallback, LoadingListener<Forum>,
NumberPickerDialog.NumberPickerListener {
private static final String FORUM_NAME = "what.whatandroid.forums.FORUM_NAME",
PAGES = "what.whatandroid.forums.PAGES";
private SetTitleCallback setTitle;
private ViewPager viewPager;
private ForumPagerAdapter pagerAdapter;
private int pages, forum;
private String forumName;
/**
* Create a new forum fragment displaying the forum at some page
*
* @param forum forum id to display
*/
public static ForumFragment newInstance(int forum){
ForumFragment f = new ForumFragment();
Bundle args = new Bundle();
args.putInt(ForumActivity.FORUM_ID, forum);
f.setArguments(args);
return f;
}
public ForumFragment(){
//Required empty ctor
}
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
try {
setTitle = (SetTitleCallback)activity;
}
catch (ClassCastException e){
throw new ClassCastException(activity.toString() + " must implement SetTitleCallback");
}
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
pages = 1;
forum = getArguments().getInt(ForumActivity.FORUM_ID);
if (savedInstanceState != null){
pages = savedInstanceState.getInt(PAGES);
forumName = savedInstanceState.getString(FORUM_NAME);
}
}
@Override
public void onResume(){
super.onResume();
if (forumName != null){
setTitle.setTitle(forumName);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragment_view_pager_strip, container, false);
viewPager = (ViewPager)view.findViewById(R.id.pager);
pagerAdapter = new ForumPagerAdapter(getChildFragmentManager(), pages, forum);
viewPager.setAdapter(pagerAdapter);
pagerAdapter.setLoadingListener(this);
if (MySoup.isLoggedIn()){
onLoggedIn();
}
return view;
}
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putInt(PAGES, pages);
if (forumName != null){
outState.putString(FORUM_NAME, forumName);
}
else {
outState.putString(FORUM_NAME, "Forums");
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
inflater.inflate(R.menu.forum, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.action_pick_page:
NumberPickerDialog dialog = NumberPickerDialog.newInstance("Select Page", 1, pages, viewPager.getCurrentItem()+1);
dialog.setTargetFragment(this, 0);
dialog.show(getFragmentManager(), "dialog");
return true;
case R.id.action_pick_last_page:
viewPager.setCurrentItem(pages - 1);
return true;
case R.id.action_switch_layout:
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity());
Boolean previousState = settings.getBoolean("pref_light_layout",false);
pagerAdapter.setUseLightLayout(!previousState);
// Set the corresponding settings value
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(getResources().getString(R.string.key_pref_light_layout), !previousState);
editor.apply();
return true;
case R.id.action_refresh:
pagerAdapter.refresh();
return true;
default:
break;
}
return false;
}
@Override
public void pickNumber(int number){
viewPager.setCurrentItem(number - 1);
}
@Override
public void onLoggedIn(){
pagerAdapter.onLoggedIn();
}
@Override
public void onLoadingComplete(Forum data){
forumName = data.getForumName();
pages = pagerAdapter.getCount();
setTitle.setTitle(forumName);
}
}