package at.theengine.android.samples.swipetabs;

import java.util.List;
import java.util.Vector;		

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.TabContentFactory;

public class SwipeTabs extends FragmentActivity implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {

	private TabHost mTabHost;
	private ViewPager mViewPager;
	private PagerAdapter mPagerAdapter;

	class TabFactory implements TabContentFactory {

		private final Context mContext;

	    public TabFactory(Context context) {
	        mContext = context;
	    }

	    public View createTabContent(String tag) {
	        View v = new View(mContext);
	        v.setMinimumWidth(0);
	        v.setMinimumHeight(0);
	        return v;
	    }
	}

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.main);
		
		//restore selected tabpage from state
		this.initializeTabHost();
		
		if (savedInstanceState != null) {
			if(savedInstanceState.getString("tab") != null){
				mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); //set the tab as per the saved state
			}
        }
		
		// Intialize viewpager
		this.intializeViewPager();
	}
	
	/*
	 * Saves the currently selected TabPage to state
	 */
    protected void onSaveInstanceState(Bundle state) {
        state.putString("tab", mTabHost.getCurrentTabTag());
    }

    /*
     * Initialzes the viewpager
     */
    private void intializeViewPager() {
		List<Fragment> fragments = new Vector<Fragment>();
		fragments.add(Fragment.instantiate(this, Tab1.class.getName()));
		fragments.add(Fragment.instantiate(this, Tab2.class.getName()));
		fragments.add(Fragment.instantiate(this, Tab3.class.getName()));
		this.mPagerAdapter  = new PagerAdapter(super.getSupportFragmentManager(), fragments);

		this.mViewPager = (ViewPager)super.findViewById(R.id.viewpager);
		this.mViewPager.setAdapter(this.mPagerAdapter);
		this.mViewPager.setOnPageChangeListener(this);
    }

	/*
	 * Initializes the tabpages
	 */
	private void initializeTabHost() {
		mTabHost = (TabHost)findViewById(android.R.id.tabhost);
        mTabHost.setup();
        SwipeTabs.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab1").setIndicator("Tab 1"));
        SwipeTabs.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab2").setIndicator("Tab 2"));
        SwipeTabs.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab3").setIndicator("Tab 3"));
        mTabHost.setOnTabChangedListener(this);
	}

	/*
	 * Adds a tab to the tabhost
	 */
	private static void AddTab(SwipeTabs activity, TabHost tabHost, TabHost.TabSpec tabSpec) {
		tabSpec.setContent(activity.new TabFactory(activity));
        tabHost.addTab(tabSpec);
	}
	
	/*
	 * sets the viewpagers current item to the item of the current tab page
	 */
	public void onTabChanged(String tag) {
		int pos = this.mTabHost.getCurrentTab();
		this.mViewPager.setCurrentItem(pos);
    }

	@Override
	public void onPageScrolled(int position, float positionOffset,
			int positionOffsetPixels) {
		//nothing todo here
	}

	/*
	 * Sets current TabPage
	 */
	@Override
	public void onPageSelected(int position) {
		this.mTabHost.setCurrentTab(position);
	}

	@Override
	public void onPageScrollStateChanged(int state) {
		//nothing to do here
	}
}

