OSDN Git Service

Revert "Move Gallery2 to androidx."
[android-x86/packages-apps-Gallery2.git] / src / com / android / photos / GalleryActivity.java
index 46b5140..f3279fe 100644 (file)
@@ -23,39 +23,50 @@ import android.app.Fragment;
 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
@@ -68,58 +79,107 @@ public class GalleryActivity extends Activity {
     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;
+    }
 }