package com.spacemangames.biomatcher; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.google.analytics.tracking.android.EasyTracker; import com.googlecode.androidannotations.annotations.AfterViews; import com.googlecode.androidannotations.annotations.EActivity; import com.googlecode.androidannotations.annotations.ViewById; import com.spacemangames.biomatcher.controller.MainMenuUtils; import com.spacemangames.biomatcher.controller.ProfileManager; @EActivity(R.layout.activity_match_my_life) public class BioMatcherActivity extends SherlockFragmentActivity implements ActionBar.TabListener { private SectionsPagerAdapter sectionsPagerAdapter; @ViewById(R.id.pager) protected ViewPager viewPager; private ActionBar actionBar; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); if (bundle == null) { sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); } else { sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), bundle); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); sectionsPagerAdapter.onSaveInstanceState(outState); } @AfterViews protected void afterViews() { actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); for (int i = 0; i < sectionsPagerAdapter.getCount(); i++) { actionBar.addTab(actionBar.newTab().setText(sectionsPagerAdapter.getPageTitle(i)).setTabListener(this)); } viewPager.setAdapter(sectionsPagerAdapter); viewPager.setOffscreenPageLimit(sectionsPagerAdapter.getCount()); viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.main_menu, menu); return true; } @Override public void onStart() { super.onStart(); EasyTracker.getInstance().activityStart(this); // switch to profilemanager if we need to create a profile if (ProfileManager.getProfiles(this).isEmpty()) { getSupportActionBar().setSelectedNavigationItem(2); } } @Override protected void onResume() { super.onResume(); } @Override public void onStop() { super.onStop(); EasyTracker.getInstance().activityStop(this); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (MainMenuUtils.onOptionsItemSelected(this, item)) { return true; } return super.onOptionsItemSelected(item); } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { int position = tab.getPosition(); viewPager.setCurrentItem(position); MatcherSetupFragment setupFragment = sectionsPagerAdapter.getFragment(MatcherSetupFragment.class); if (setupFragment != null && sectionsPagerAdapter.getItem(position) == setupFragment) { setupFragment.setVisible(true); } else if (setupFragment != null) { setupFragment.setVisible(false); } } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } @SuppressLint("DefaultLocale") public class SectionsPagerAdapter extends FragmentPagerAdapter { private final List<String> titles = new ArrayList<String>(); private final List<Fragment> fragments = new ArrayList<Fragment>(); private final FragmentManager fm; public SectionsPagerAdapter(FragmentManager fm, Bundle inState) { super(fm); this.fm = fm; ProfileManagerFragment_ profileManagerFragment = (ProfileManagerFragment_) fm.getFragment(inState, ProfileManagerFragment.class.getName()); titles.add(0, getString(R.string.title_page_biorhythm).toUpperCase()); titles.add(1, getString(R.string.title_page_match_setup).toUpperCase()); titles.add(2, getString(R.string.title_page_profiles).toUpperCase()); fragments.add(0, fm.getFragment(inState, BioRhythmFragment.class.getName())); fragments.add(1, fm.getFragment(inState, MatcherSetupFragment.class.getName())); fragments.add(2, profileManagerFragment); } public SectionsPagerAdapter(FragmentManager fm) { super(fm); this.fm = fm; ProfileManagerFragment_ profileManagerFragment = new ProfileManagerFragment_(); titles.add(0, getString(R.string.title_page_biorhythm).toUpperCase()); titles.add(1, getString(R.string.title_page_match_setup).toUpperCase()); titles.add(2, getString(R.string.title_page_profiles).toUpperCase()); fragments.add(0, new BioRhythmFragment_()); fragments.add(1, new MatcherSetupFragment_()); fragments.add(2, profileManagerFragment); profileManagerFragment.init(BioMatcherActivity.this); } public void onSaveInstanceState(Bundle outState) { fm.putFragment(outState, BioRhythmFragment.class.getName(), fragments.get(0)); fm.putFragment(outState, MatcherSetupFragment.class.getName(), fragments.get(1)); fm.putFragment(outState, ProfileManagerFragment.class.getName(), fragments.get(2)); } @SuppressWarnings("unchecked") public <T extends Fragment> T getFragment(Class<T> clazz) { for (Fragment fragment : fragments) { if (clazz.isAssignableFrom(fragment.getClass())) { return (T) fragment; } } return null; } @Override public Fragment getItem(int i) { return fragments.get(i); } @Override public int getCount() { return titles.size(); } @Override public CharSequence getPageTitle(int position) { return titles.get(position); } } }