From a40965b95af786ed2aa13ff63e38b92881f3c315 Mon Sep 17 00:00:00 2001 From: Bobby Georgescu Date: Wed, 20 Mar 2013 12:03:17 -0700 Subject: Refactor fragment/activity coupling in new Gallery Change-Id: I7cc54b352197e1975cff286f4add7d0f42637841 --- src/com/android/photos/AlbumActivity.java | 13 +++++++---- src/com/android/photos/AlbumFragment.java | 30 +++++++++++++------------ src/com/android/photos/AlbumSetFragment.java | 25 +++++++++++---------- src/com/android/photos/GalleryActivity.java | 24 +++++++++++++------- src/com/android/photos/GalleryFragmentHost.java | 21 +++++++++++++++++ src/com/android/photos/MultiChoiceManager.java | 19 ++++++++++------ src/com/android/photos/PhotoSetFragment.java | 24 +++++++++++--------- 7 files changed, 100 insertions(+), 56 deletions(-) create mode 100644 src/com/android/photos/GalleryFragmentHost.java diff --git a/src/com/android/photos/AlbumActivity.java b/src/com/android/photos/AlbumActivity.java index a6e7ef79d..7488a5cee 100644 --- a/src/com/android/photos/AlbumActivity.java +++ b/src/com/android/photos/AlbumActivity.java @@ -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; + } } diff --git a/src/com/android/photos/AlbumFragment.java b/src/com/android/photos/AlbumFragment.java index 377da0970..36416c6f6 100644 --- a/src/com/android/photos/AlbumFragment.java +++ b/src/com/android/photos/AlbumFragment.java @@ -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, MultiChoiceManager.Delegate, SelectionManager.Client { + LoaderCallbacks, MultiChoiceManager.Delegate { protected static final String KEY_ALBUM_URI = "AlbumUri"; private static final int LOADER_ALBUM = 1; @@ -53,31 +54,20 @@ public class AlbumFragment extends Fragment implements OnItemClickListener, private boolean mInitialLoadComplete = false; private LoaderCompatShim 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); } } - @Override - public void setSelectionManager(SelectionManager manager) { - mSelectionManager = manager; - if (mMultiChoiceManager != null) { - mMultiChoiceManager.setSelectionManager(manager); - } - } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -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; @@ -103,6 +93,18 @@ public class AlbumFragment extends Fragment implements OnItemClickListener, ? View.VISIBLE : View.GONE); } + @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) { diff --git a/src/com/android/photos/AlbumSetFragment.java b/src/com/android/photos/AlbumSetFragment.java index 17dc69c97..6bfc05127 100644 --- a/src/com/android/photos/AlbumSetFragment.java +++ b/src/com/android/photos/AlbumSetFragment.java @@ -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, MultiChoiceManager.Delegate, SelectionManager.Client { + LoaderCallbacks, MultiChoiceManager.Delegate { private GridView mAlbumSetView; private View mEmptyView; private AlbumSetCursorAdapter mAdapter; private LoaderCompatShim 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(); diff --git a/src/com/android/photos/GalleryActivity.java b/src/com/android/photos/GalleryActivity.java index ddf04e365..78824d1ba 100644 --- a/src/com/android/photos/GalleryActivity.java +++ b/src/com/android/photos/GalleryActivity.java @@ -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 @@ -151,6 +148,12 @@ public class GalleryActivity extends Activity { 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) { } @@ -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 index 000000000..e533df1aa --- /dev/null +++ b/src/com/android/photos/GalleryFragmentHost.java @@ -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(); +} diff --git a/src/com/android/photos/MultiChoiceManager.java b/src/com/android/photos/MultiChoiceManager.java index d339cb721..0e25c740e 100644 --- a/src/com/android/photos/MultiChoiceManager.java +++ b/src/com/android/photos/MultiChoiceManager.java @@ -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 mSelectedShareableUrisArray = new ArrayList(); - 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) { diff --git a/src/com/android/photos/PhotoSetFragment.java b/src/com/android/photos/PhotoSetFragment.java index 769f13113..c6ec0328d 100644 --- a/src/com/android/photos/PhotoSetFragment.java +++ b/src/com/android/photos/PhotoSetFragment.java @@ -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, MultiChoiceManager.Delegate, SelectionManager.Client { + LoaderCallbacks, 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 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; -- cgit v1.2.3