import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
+import android.support.v13.app.FragmentPagerAdapter;
+import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.ViewGroup;
-import com.android.camera.CameraActivity;
import com.android.gallery3d.R;
-public class GalleryActivity extends Activity {
+import java.util.ArrayList;
- private final String FTAG_PHOTOSET = "PhotoSet";
- private final String FTAG_ALBUMSET = "AlbumSet";
+public class GalleryActivity extends Activity implements MultiChoiceManager.Provider {
+
+ private MultiChoiceManager mMultiChoiceManager;
+ private ViewPager mViewPager;
+ private TabsAdapter mTabsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ mMultiChoiceManager = new MultiChoiceManager(this);
+ mViewPager = new ViewPager(this);
+ mViewPager.setId(R.id.viewpager);
+ setContentView(mViewPager);
- setupActionBar();
- }
-
- private void setupActionBar() {
ActionBar ab = getActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ab.setDisplayShowHomeEnabled(false);
ab.setDisplayShowTitleEnabled(false);
- Tab tab = ab.newTab();
- tab.setText(R.string.tab_photos);
- tab.setTabListener(new TabListener<PhotoSetFragment>(this,
- FTAG_PHOTOSET, PhotoSetFragment.class));
- ab.addTab(tab, true);
- tab = ab.newTab();
- tab.setText(R.string.tab_albums);
- tab.setTabListener(new TabListener<AlbumSetFragment>(this,
- FTAG_ALBUMSET, AlbumSetFragment.class));
- ab.addTab(tab);
+
+ mTabsAdapter = new TabsAdapter(this, mViewPager);
+ mTabsAdapter.addTab(ab.newTab().setText(R.string.tab_photos),
+ PhotoSetFragment.class, null);
+ mTabsAdapter.addTab(ab.newTab().setText(R.string.tab_albums),
+ AlbumSetFragment.class, null);
+
+ if (savedInstanceState != null) {
+ ab.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_camera:
- Intent intent = new Intent(this, CameraActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- return true;
+ // TODO: Call the correct Camera intent.
+ throw new RuntimeException("Not implemented yet.");
+// Intent intent = new Intent(this, CameraActivity.class);
+// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+// startActivity(intent);
+// return true;
default:
return super.onOptionsItemSelected(item);
}
}
- private static class TabListener<T extends Fragment> implements ActionBar.TabListener {
- private Fragment mFragment;
- private final Activity mActivity;
- private final String mTag;
- private final Class<T> mClass;
-
- /** Constructor used each time a new tab is created.
- * @param activity The host Activity, used to instantiate the fragment
- * @param tag The identifier tag for the fragment
- * @param clz The fragment's Class, used to instantiate the fragment
- */
- public TabListener(Activity activity, String tag, Class<T> clz) {
+ public static class TabsAdapter extends FragmentPagerAdapter implements
+ ActionBar.TabListener, ViewPager.OnPageChangeListener {
+
+ private final GalleryActivity mActivity;
+ private final ActionBar mActionBar;
+ private final ViewPager mViewPager;
+ private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
+
+ static final class TabInfo {
+
+ private final Class<?> clss;
+ private final Bundle args;
+
+ TabInfo(Class<?> _class, Bundle _args) {
+ clss = _class;
+ args = _args;
+ }
+ }
+
+ public TabsAdapter(GalleryActivity activity, ViewPager pager) {
+ super(activity.getFragmentManager());
mActivity = activity;
- mTag = tag;
- mClass = clz;
+ mActionBar = activity.getActionBar();
+ mViewPager = pager;
+ mViewPager.setAdapter(this);
+ mViewPager.setOnPageChangeListener(this);
+ }
+
+ public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
+ TabInfo info = new TabInfo(clss, args);
+ tab.setTag(info);
+ tab.setTabListener(this);
+ mTabs.add(info);
+ mActionBar.addTab(tab);
+ notifyDataSetChanged();
}
- /* The following are each of the ActionBar.TabListener callbacks */
+ @Override
+ public int getCount() {
+ return mTabs.size();
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ TabInfo info = mTabs.get(position);
+ return Fragment.instantiate(mActivity, info.clss.getName(),
+ info.args);
+ }
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset,
+ int positionOffsetPixels) {
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ mActionBar.setSelectedNavigationItem(position);
+ }
+
+ @Override
+ public void setPrimaryItem(ViewGroup container, int position, Object object) {
+ super.setPrimaryItem(container, position, object);
+ mActivity.mMultiChoiceManager.setDelegate((MultiChoiceManager.Delegate) object);
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ }
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
- // Check if the fragment is already initialized
- if (mFragment == null) {
- // If not, instantiate and add it to the activity
- mFragment = Fragment.instantiate(mActivity, mClass.getName());
- ft.add(android.R.id.content, mFragment, mTag);
- } else {
- // If it exists, simply attach it in order to show it
- ft.attach(mFragment);
+ Object tag = tab.getTag();
+ for (int i = 0; i < mTabs.size(); i++) {
+ if (mTabs.get(i) == tag) {
+ mViewPager.setCurrentItem(i);
+ }
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
- if (mFragment != null) {
- // Detach the fragment, because another one is being attached
- ft.detach(mFragment);
- }
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
- // User selected the already selected tab. Usually do nothing.
}
}
+
+ @Override
+ public MultiChoiceManager getMultiChoiceManager() {
+ return mMultiChoiceManager;
+ }
}