package com.nuscomputing.ivle; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.Tab; import android.content.Intent; 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.PagerAdapter; import android.support.v4.view.ViewPager; public class ViewWorkbinActivity extends IVLESherlockFragmentActivity implements DataLoaderListener { // {{{ properties /** TAG for logging */ public static final String TAG = "ViewWorkbinActivity"; /** The tab listener */ private ActionBar.TabListener mTabListener; /** The view pager */ private ViewPager mViewPager; /** The pager adapter */ private PagerAdapter mPagerAdapter; // }}} // {{{ methods /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Obtain the requested workbin ID. Intent intent = getIntent(); long workbinId = intent.getLongExtra("workbinId", -1); if (workbinId == -1) { throw new IllegalStateException("No workbin ID was passed to ViewWorkbinActivity"); } long workbinFolderId = intent.getLongExtra("workbinFolderId", -1); // Create the pager adapter. Bundle fragmentArgs = new Bundle(); fragmentArgs.putLong("workbinId", workbinId); fragmentArgs.putLong("workbinFolderId", workbinFolderId); List<TabData> fragmentList = new ArrayList<TabData>(); fragmentList.addAll(Arrays.asList( new TabData(new ViewWorkbinFoldersFragment(), fragmentArgs), new TabData(new ViewWorkbinFilesFragment(), fragmentArgs) )); mPagerAdapter = new ViewWorkbinActivityPagerAdapter(getSupportFragmentManager(), fragmentList); // Create the view pager. mViewPager = new ViewPager(this); mViewPager.setId(R.id.view_workbin_activity_view_pager); mViewPager.setOnPageChangeListener(new cOnPageChangeListener()); mViewPager.setAdapter(mPagerAdapter); // Set action bar parameters. ActionBar bar = getSupportActionBar(); bar.setDisplayHomeAsUpEnabled(true); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); mTabListener = new ViewWorkbinActivityTabListener(); // Create a new tab for folders. ActionBar.Tab tabFolders = bar.newTab(); tabFolders .setText("Folders") .setTabListener(mTabListener); // Create a new tab for files. ActionBar.Tab tabFiles = bar.newTab(); tabFiles .setText("Files") .setTabListener(mTabListener); // Plug in the tabs. bar.addTab(tabFolders, 0, true); bar.addTab(tabFiles, 1, false); // Set up our view. setContentView(mViewPager); // Load the action bar title. Bundle args = new Bundle(); args.putLong("workbinId", workbinId); DataLoader loader = new DataLoader(this, this); getSupportLoaderManager().initLoader(DataLoader.LOADER_VIEW_WORKBIN_ACTIVITY, args, loader); } public void onLoaderFinished(Bundle result) { // Set the title. getSupportActionBar().setTitle(result.getString("title")); } // }}} // {{{ classes /** * Listener for action bar tabs. * @author yjwong */ class ViewWorkbinActivityTabListener implements ActionBar.TabListener { // {{{ methods @Override public void onTabReselected(Tab tab, FragmentTransaction DO_NOT_USE) { } @Override public void onTabSelected(Tab tab, FragmentTransaction DO_NOT_USE) { mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(Tab tab, FragmentTransaction DO_NOT_USE) { } // }}} } /** * View pager adapter. * @author yjwong */ class ViewWorkbinActivityPagerAdapter extends FragmentPagerAdapter { // {{{ properties /** The list of fragments */ private List<TabData> mFragmentList = new ArrayList<TabData>(); // }}} // {{{ methods ViewWorkbinActivityPagerAdapter(FragmentManager fm, List<TabData> fragmentList) { super(fm); mFragmentList = fragmentList; } @Override public int getCount() { return mFragmentList.size(); } @Override public Fragment getItem(int position) { return mFragmentList.get(position).getFragment(); } // }}} } /** * The tab listener for the page. * @author yjwong */ class cOnPageChangeListener implements ViewPager.OnPageChangeListener { // {{{ methods @Override public void onPageScrollStateChanged(int state) { } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { ActionBar bar = getSupportActionBar(); bar.selectTab(bar.getTabAt(position)); } // }}} } /** * Tab data. * @author yjwong */ class TabData { // {{{ properties /** The fragment associated with this tab */ Fragment mFragment; /** Arguments for the fragment associated with this tab */ Bundle mArgs; // }}} // {{{ methods TabData (Fragment fragment, Bundle args) { mFragment = fragment; mArgs = args; mFragment.setArguments(args); } /** * Returns the fragment associated with this tab. * @return Fragment */ Fragment getFragment() { return mFragment; } /** * Returns the arguments for the fragment associated with this tab. * @return Bundle */ Bundle getArgs() { return mArgs; } // }}} } // }}} }