package what.whatandroid.announcements;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import api.announcements.Announcement;
import api.announcements.Announcements;
import what.whatandroid.R;
import what.whatandroid.callbacks.AnnouncementsFragmentCallbacks;
import what.whatandroid.callbacks.SetTitleCallback;
import what.whatandroid.callbacks.ViewAnnouncementCallbacks;
import java.util.List;
/**
* The Announcements fragment displays a list of the site
* announcements in a list adapter. Selecting an announcement will open
* it in a new fragment to the right.
*/
public class AnnouncementsFragment extends Fragment implements AnnouncementsFragmentCallbacks, ViewAnnouncementCallbacks {
/**
* The announcements we're showing
*/
private List<Announcement> announcements;
/**
* The view pager containing the announcements list and the detail fragment
*/
private ViewPager viewPager;
/**
* The list and detail view fragments so we can change what's being shown
*/
private AnnouncementsListFragment listFragment;
private AnnouncementDetailFragment detailFragment;
private SetTitleCallback setTitleCallback;
/**
* Use this factory method to create an AnnouncementsFragment displaying the list of announcements
*
* @param announcements the announcements to display
* @return an AnnouncementsFragment displaying the announcements
*/
public static AnnouncementsFragment newInstance(List<Announcement> announcements){
AnnouncementsFragment fragment = new AnnouncementsFragment();
fragment.announcements = announcements;
return fragment;
}
public AnnouncementsFragment(){
//Required blank ctor
}
/**
* Set the announcements being viewed
* @param announcements the announcements to display
*/
@Override
public void setAnnouncements(Announcements announcements){
this.announcements = announcements.getResponse().getAnnouncements();
listFragment.setAnnouncements(this.announcements);
detailFragment.setAnnouncement(this.announcements.get(0));
}
@Override
public boolean backPressed(){
if (viewPager.getCurrentItem() == 0){
return true;
}
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
return false;
}
@Override
public void viewAnnouncement(Announcement announcement){
detailFragment.setAnnouncement(announcement);
viewPager.setCurrentItem(1);
}
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
try {
setTitleCallback = (SetTitleCallback)activity;
}
catch (ClassCastException e){
throw new ClassCastException(activity.toString() + " must implement set title callbacks");
}
setTitleCallback.setTitle(getString(R.string.announcements));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragment_announcements, container, false);
listFragment = AnnouncementsListFragment.newInstance(announcements, this);
if (announcements != null){
detailFragment = AnnouncementDetailFragment.newInstance(announcements.get(0));
}
else {
detailFragment = AnnouncementDetailFragment.newInstance(null);
}
viewPager = (ViewPager)view.findViewById(R.id.pager);
viewPager.setAdapter(new AnnouncementsViewPagerAdapter(getChildFragmentManager()));
return view;
}
/**
* ViewPagerAdapter for the announcements/blogs list and detail fragments
*/
private class AnnouncementsViewPagerAdapter extends FragmentStatePagerAdapter {
public AnnouncementsViewPagerAdapter(FragmentManager fm){
super(fm);
}
@Override
public Fragment getItem(int position){
return position == 0 ? listFragment : detailFragment;
}
@Override
public int getCount(){
return 2;
}
}
}