OSDN Git Service

Refactor fragment/activity coupling in new Gallery
authorBobby Georgescu <georgescu@google.com>
Wed, 20 Mar 2013 19:03:17 +0000 (12:03 -0700)
committerBobby Georgescu <georgescu@google.com>
Wed, 20 Mar 2013 21:07:28 +0000 (14:07 -0700)
Change-Id: I7cc54b352197e1975cff286f4add7d0f42637841

src/com/android/photos/AlbumActivity.java
src/com/android/photos/AlbumFragment.java
src/com/android/photos/AlbumSetFragment.java
src/com/android/photos/GalleryActivity.java
src/com/android/photos/GalleryFragmentHost.java [new file with mode: 0644]
src/com/android/photos/MultiChoiceManager.java
src/com/android/photos/PhotoSetFragment.java

index a6e7ef7..7488a5c 100644 (file)
@@ -19,25 +19,30 @@ package com.android.photos;
 import android.app.Activity;
 import android.os.Bundle;
 
-public class AlbumActivity extends Activity {
+public class AlbumActivity extends Activity implements GalleryFragmentHost {
 
     public static final String KEY_ALBUM_URI = AlbumFragment.KEY_ALBUM_URI;
     public static final String KEY_ALBUM_TITLE = "AlbumTitle";
 
-    private SelectionManager mSelectionManager;
+    private MultiChoiceManager mMultiChoiceManager;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         Bundle intentExtras = getIntent().getExtras();
-        mSelectionManager = new SelectionManager(this);
+        mMultiChoiceManager = new MultiChoiceManager(this);
         if (savedInstanceState == null) {
             AlbumFragment albumFragment = new AlbumFragment();
+            mMultiChoiceManager.setDelegate(albumFragment);
             albumFragment.setArguments(intentExtras);
-            albumFragment.setSelectionManager(mSelectionManager);
             getFragmentManager().beginTransaction().add(android.R.id.content,
                     albumFragment).commit();
         }
         getActionBar().setTitle(intentExtras.getString(KEY_ALBUM_TITLE));
     }
+
+    @Override
+    public MultiChoiceManager getMultiChoiceManager() {
+        return mMultiChoiceManager;
+    }
 }
index 377da09..36416c6 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.android.photos;
 
+import android.app.Activity;
 import android.app.Fragment;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Context;
@@ -42,7 +43,7 @@ import com.android.photos.shims.MediaItemsLoader;
 import java.util.ArrayList;
 
 public class AlbumFragment extends Fragment implements OnItemClickListener,
-    LoaderCallbacks<Cursor>, MultiChoiceManager.Delegate, SelectionManager.Client  {
+    LoaderCallbacks<Cursor>, MultiChoiceManager.Delegate {
 
     protected static final String KEY_ALBUM_URI = "AlbumUri";
     private static final int LOADER_ALBUM = 1;
@@ -53,17 +54,14 @@ public class AlbumFragment extends Fragment implements OnItemClickListener,
     private boolean mInitialLoadComplete = false;
     private LoaderCompatShim<Cursor> mLoaderCompatShim;
     private PhotoThumbnailAdapter mAdapter;
-    private MultiChoiceManager mMultiChoiceManager;
-    private SelectionManager mSelectionManager;
     private String mAlbumPath;
+    private GalleryFragmentHost mHost;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         Context context = getActivity();
         mAdapter = new PhotoThumbnailAdapter(context);
-        mMultiChoiceManager = new MultiChoiceManager(context, this);
-        mMultiChoiceManager.setSelectionManager(mSelectionManager);
         Bundle args = getArguments();
         if (args != null) {
             mAlbumPath = args.getString(KEY_ALBUM_URI, null);
@@ -71,14 +69,6 @@ public class AlbumFragment extends Fragment implements OnItemClickListener,
     }
 
     @Override
-    public void setSelectionManager(SelectionManager manager) {
-        mSelectionManager = manager;
-        if (mMultiChoiceManager != null) {
-            mMultiChoiceManager.setSelectionManager(manager);
-        }
-    }
-
-    @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         View root = inflater.inflate(R.layout.photo_set, container, false);
@@ -90,7 +80,7 @@ public class AlbumFragment extends Fragment implements OnItemClickListener,
         mEmptyView.setVisibility(View.GONE);
         mAlbumView.setAdapter(mAdapter);
         mAlbumView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
-        mAlbumView.setMultiChoiceModeListener(mMultiChoiceManager);
+        mAlbumView.setMultiChoiceModeListener(mHost.getMultiChoiceManager());
         getLoaderManager().initLoader(LOADER_ALBUM, null, this);
         updateEmptyStatus();
         return root;
@@ -104,6 +94,18 @@ public class AlbumFragment extends Fragment implements OnItemClickListener,
     }
 
     @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        mHost = (GalleryFragmentHost) activity;
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+        mHost = null;
+    }
+
+    @Override
     public void onItemClick(AdapterView<?> parent, View view, int position,
             long id) {
         if (mLoaderCompatShim == null) {
index 17dc69c..6bfc051 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.android.photos;
 
+import android.app.Activity;
 import android.app.Fragment;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Context;
@@ -32,7 +33,6 @@ import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.GridView;
-import android.widget.Toast;
 
 import com.android.gallery3d.R;
 import com.android.photos.adapters.AlbumSetCursorAdapter;
@@ -44,14 +44,13 @@ import java.util.ArrayList;
 
 
 public class AlbumSetFragment extends Fragment implements OnItemClickListener,
-    LoaderCallbacks<Cursor>, MultiChoiceManager.Delegate, SelectionManager.Client {
+    LoaderCallbacks<Cursor>, MultiChoiceManager.Delegate {
 
     private GridView mAlbumSetView;
     private View mEmptyView;
     private AlbumSetCursorAdapter mAdapter;
     private LoaderCompatShim<Cursor> mLoaderCompatShim;
-    private MultiChoiceManager mMultiChoiceManager;
-    private SelectionManager mSelectionManager;
+    private GalleryFragmentHost mHost;
 
     private static final int LOADER_ALBUMSET = 1;
 
@@ -60,16 +59,18 @@ public class AlbumSetFragment extends Fragment implements OnItemClickListener,
         super.onCreate(savedInstanceState);
         Context context = getActivity();
         mAdapter = new AlbumSetCursorAdapter(context);
-        mMultiChoiceManager = new MultiChoiceManager(context, this);
-        mMultiChoiceManager.setSelectionManager(mSelectionManager);
     }
 
     @Override
-    public void setSelectionManager(SelectionManager manager) {
-        mSelectionManager = manager;
-        if (mMultiChoiceManager != null) {
-            mMultiChoiceManager.setSelectionManager(manager);
-        }
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        mHost = (GalleryFragmentHost) activity;
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+        mHost = null;
     }
 
     @Override
@@ -81,7 +82,7 @@ public class AlbumSetFragment extends Fragment implements OnItemClickListener,
         mEmptyView.setVisibility(View.GONE);
         mAlbumSetView.setAdapter(mAdapter);
         mAlbumSetView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
-        mAlbumSetView.setMultiChoiceModeListener(mMultiChoiceManager);
+        mAlbumSetView.setMultiChoiceModeListener(mHost.getMultiChoiceManager());
         mAlbumSetView.setOnItemClickListener(this);
         getLoaderManager().initLoader(LOADER_ALBUMSET, null, this);
         updateEmptyStatus();
index ddf04e3..78824d1 100644 (file)
@@ -21,29 +21,29 @@ import android.app.ActionBar.Tab;
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentTransaction;
-import android.content.Context;
 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;
 
 import java.util.ArrayList;
 
-public class GalleryActivity extends Activity {
+public class GalleryActivity extends Activity implements GalleryFragmentHost {
 
-    private SelectionManager mSelectionManager;
+    private MultiChoiceManager mMultiChoiceManager;
     private ViewPager mViewPager;
     private TabsAdapter mTabsAdapter;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mSelectionManager = new SelectionManager(this);
+        mMultiChoiceManager = new MultiChoiceManager(this);
         mViewPager = new ViewPager(this);
         mViewPager.setId(R.id.viewpager);
         setContentView(mViewPager);
@@ -134,11 +134,8 @@ public class GalleryActivity extends Activity {
         @Override
         public Fragment getItem(int position) {
             TabInfo info = mTabs.get(position);
-            Fragment item = Fragment.instantiate(mActivity, info.clss.getName(),
+            return Fragment.instantiate(mActivity, info.clss.getName(),
                     info.args);
-            ((SelectionManager.Client) item).setSelectionManager(
-                    mActivity.mSelectionManager);
-            return item;
         }
 
         @Override
@@ -152,6 +149,12 @@ public class GalleryActivity extends Activity {
         }
 
         @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) {
         }
 
@@ -173,4 +176,9 @@ public class GalleryActivity extends Activity {
         public void onTabReselected(Tab tab, FragmentTransaction ft) {
         }
     }
+
+    @Override
+    public MultiChoiceManager getMultiChoiceManager() {
+        return mMultiChoiceManager;
+    }
 }
diff --git a/src/com/android/photos/GalleryFragmentHost.java b/src/com/android/photos/GalleryFragmentHost.java
new file mode 100644 (file)
index 0000000..e533df1
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.photos;
+
+public interface GalleryFragmentHost {
+    public MultiChoiceManager getMultiChoiceManager();
+}
index d339cb7..0e25c74 100644 (file)
@@ -32,9 +32,7 @@ import android.widget.ShareActionProvider;
 import android.widget.ShareActionProvider.OnShareTargetSelectedListener;
 
 import com.android.gallery3d.R;
-import com.android.gallery3d.app.MuteVideo;
 import com.android.gallery3d.app.TrimVideo;
-import com.android.gallery3d.data.MediaItem;
 import com.android.gallery3d.data.MediaObject;
 import com.android.gallery3d.filtershow.FilterShowActivity;
 import com.android.gallery3d.util.GalleryUtils;
@@ -65,13 +63,19 @@ public class MultiChoiceManager implements MultiChoiceModeListener,
 
     private ArrayList<Uri> mSelectedShareableUrisArray = new ArrayList<Uri>();
 
-    public MultiChoiceManager(Context context, Delegate delegate) {
-        mContext = context;
-        mDelegate = delegate;
+    public MultiChoiceManager(Activity activity) {
+        mContext = activity;
+        mSelectionManager = new SelectionManager(activity);
     }
 
-    public void setSelectionManager(SelectionManager selectionManager) {
-        mSelectionManager = selectionManager;
+    public void setDelegate(Delegate delegate) {
+        if (mDelegate == delegate) {
+            return;
+        }
+        if (mActionMode != null) {
+            mActionMode.finish();
+        }
+        mDelegate = delegate;
     }
 
     @Override
@@ -95,6 +99,7 @@ public class MultiChoiceManager implements MultiChoiceModeListener,
             return GalleryUtils.MIME_TYPE_ALL;
         }
     }
+
     @Override
     public void onItemCheckedStateChanged(ActionMode mode, int position, long id,
             boolean checked) {
index 769f131..c6ec032 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.android.photos;
 
+import android.app.Activity;
 import android.app.Fragment;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Context;
@@ -42,7 +43,7 @@ import com.android.photos.shims.MediaItemsLoader;
 import java.util.ArrayList;
 
 public class PhotoSetFragment extends Fragment implements OnItemClickListener,
-    LoaderCallbacks<Cursor>, MultiChoiceManager.Delegate, SelectionManager.Client  {
+    LoaderCallbacks<Cursor>, MultiChoiceManager.Delegate {
 
     private static final int LOADER_PHOTOSET = 1;
 
@@ -52,24 +53,25 @@ public class PhotoSetFragment extends Fragment implements OnItemClickListener,
     private boolean mInitialLoadComplete = false;
     private LoaderCompatShim<Cursor> mLoaderCompatShim;
     private PhotoThumbnailAdapter mAdapter;
-    private MultiChoiceManager mMultiChoiceManager;
-    private SelectionManager mSelectionManager;
+    private GalleryFragmentHost mHost;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         Context context = getActivity();
         mAdapter = new PhotoThumbnailAdapter(context);
-        mMultiChoiceManager = new MultiChoiceManager(context, this);
-        mMultiChoiceManager.setSelectionManager(mSelectionManager);
     }
 
     @Override
-    public void setSelectionManager(SelectionManager manager) {
-        mSelectionManager = manager;
-        if (mMultiChoiceManager != null) {
-            mMultiChoiceManager.setSelectionManager(manager);
-        }
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        mHost = (GalleryFragmentHost) activity;
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+        mHost = null;
     }
 
     @Override
@@ -84,7 +86,7 @@ public class PhotoSetFragment extends Fragment implements OnItemClickListener,
         mEmptyView.setVisibility(View.GONE);
         mPhotoSetView.setAdapter(mAdapter);
         mPhotoSetView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
-        mPhotoSetView.setMultiChoiceModeListener(mMultiChoiceManager);
+        mPhotoSetView.setMultiChoiceModeListener(mHost.getMultiChoiceManager());
         getLoaderManager().initLoader(LOADER_PHOTOSET, null, this);
         updateEmptyStatus();
         return root;