package org.greengin.sciencetoolkit.common.ui.base;
import org.greengin.sciencetoolkit.common.ui.base.SettingsControlledActivity;
import org.greengin.sciencetoolkit.common.ui.base.widgets.StkViewPager;
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 android.support.v7.app.ActionBar;
public abstract class SwipeActivity extends SettingsControlledActivity implements ActionBar.TabListener {
SectionsPagerAdapter mSectionsPagerAdapter;
StkViewPager mViewPager;
public SwipeActivity(boolean hasParent) {
super(-1, hasParent);
}
abstract public int getContentViewLayoutId();
abstract public int getViewPagerLayoutId();
abstract public int getTabCount();
abstract public CharSequence getTabTitle(int position);
abstract public Fragment createTabFragment(int position);
abstract public int getOnResumeTab();
abstract public void setOnResumeTab(int position);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentViewLayoutId());
final ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (StkViewPager) findViewById(getViewPagerLayoutId());
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
setOnResumeTab(position);
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
}
}
public void setPagingEnabled(boolean enabled) {
mViewPager.setPagingEnabled(enabled);
}
@Override
public void onResume() {
super.onResume();
if (getOnResumeTab() >= 0) {
getSupportActionBar().setSelectedNavigationItem(getOnResumeTab());
}
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
if (mViewPager.getCurrentItem() != tab.getPosition()) {
mViewPager.setCurrentItem(tab.getPosition());
}
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
Fragment[] fragments;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
fragments = new Fragment[getTabCount()];
}
@Override
public Fragment getItem(int position) {
if (fragments[position] == null) {
fragments[position] = createTabFragment(position);
}
return fragments[position];
}
@Override
public int getCount() {
return getTabCount();
}
@Override
public CharSequence getPageTitle(int position) {
return getTabTitle(position);
}
}
}