From e2bc54a09412790da5ac7d19c52b964e49e14c25 Mon Sep 17 00:00:00 2001 From: Bobby Georgescu Date: Fri, 8 Mar 2013 20:15:15 -0800 Subject: Sharing support for albums, bulk operations infrastructure Change-Id: I590f60ab85ffbd9cf9d7cd9982627604fa1b427f --- src/com/android/photos/PhotoSetFragment.java | 139 ++++++++------------------- 1 file changed, 39 insertions(+), 100 deletions(-) (limited to 'src/com/android/photos/PhotoSetFragment.java') diff --git a/src/com/android/photos/PhotoSetFragment.java b/src/com/android/photos/PhotoSetFragment.java index 25d80360d..b485cd051 100644 --- a/src/com/android/photos/PhotoSetFragment.java +++ b/src/com/android/photos/PhotoSetFragment.java @@ -18,41 +18,31 @@ package com.android.photos; import android.app.Fragment; import android.app.LoaderManager.LoaderCallbacks; +import android.content.Context; import android.content.Intent; import android.content.Loader; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.SparseBooleanArray; -import android.view.ActionMode; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AbsListView.MultiChoiceModeListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; -import android.widget.ShareActionProvider; -import android.widget.ShareActionProvider.OnShareTargetSelectedListener; import com.android.gallery3d.R; import com.android.gallery3d.app.Gallery; -import com.android.gallery3d.data.MediaItem; import com.android.photos.adapters.PhotoThumbnailAdapter; import com.android.photos.data.PhotoSetLoader; import com.android.photos.shims.LoaderCompatShim; import com.android.photos.shims.MediaItemsLoader; import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; -public class PhotoSetFragment extends Fragment implements LoaderCallbacks, - OnItemClickListener, SelectionManager.SelectedUriSource, MultiChoiceModeListener, - OnShareTargetSelectedListener { +public class PhotoSetFragment extends Fragment implements OnItemClickListener, + LoaderCallbacks, MultiChoiceManager.Delegate, SelectionManager.Client { private static final int LOADER_PHOTOSET = 1; @@ -62,14 +52,24 @@ public class PhotoSetFragment extends Fragment implements LoaderCallbacks mLoaderCompatShim; private PhotoThumbnailAdapter mAdapter; + private MultiChoiceManager mMultiChoiceManager; private SelectionManager mSelectionManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - GalleryActivity activity = (GalleryActivity) getActivity(); - mSelectionManager = activity.getSelectionManager(); - mAdapter = new PhotoThumbnailAdapter(activity); + 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); + } } @Override @@ -84,7 +84,7 @@ public class PhotoSetFragment extends Fragment implements LoaderCallbacks mSelectedUris = new HashSet(); - private ArrayList mSelectedUrisArray = new ArrayList(); - @Override - public ArrayList getSelectedShareableUris() { - mSelectedUrisArray.clear(); - mSelectedUrisArray.addAll(mSelectedUris); - return mSelectedUrisArray; - } - - public ArrayList getSelectedShareableUrisUncached() { - mSelectedUrisArray.clear(); - SparseBooleanArray selected = mPhotoSetView.getCheckedItemPositions(); - - for (int i = 0; i < selected.size(); i++) { - if (selected.valueAt(i)) { - Cursor item = mAdapter.getItem(selected.keyAt(i)); - int supported = item.getInt(PhotoSetLoader.INDEX_SUPPORTED_OPERATIONS); - if ((supported & MediaItem.SUPPORT_SHARE) > 0) { - mSelectedUrisArray.add(mLoaderCompatShim.uriForItem(item)); - } - } - } - - return mSelectedUrisArray; + public void onLoaderReset(Loader loader) { } @Override - public void onLoaderReset(Loader loader) { + public int getItemMediaType(Object item) { + return ((Cursor) item).getInt(PhotoSetLoader.INDEX_MEDIA_TYPE); } - - private ShareActionProvider mShareActionProvider; - private ActionMode mActionMode; - private boolean mSharePending = false; - - private void updateSelectedTitle(ActionMode mode) { - int count = mPhotoSetView.getCheckedItemCount(); - mode.setTitle(getResources().getQuantityString( - R.plurals.number_of_items_selected, count, count)); + @Override + public int getItemSupportedOperations(Object item) { + return ((Cursor) item).getInt(PhotoSetLoader.INDEX_SUPPORTED_OPERATIONS); } @Override - public void onItemCheckedStateChanged(ActionMode mode, int position, long id, - boolean checked) { - updateSelectedTitle(mode); - Cursor item = mAdapter.getItem(position); - - if (checked) { - mSelectedUris.add(mLoaderCompatShim.uriForItem(item)); - } else { - mSelectedUris.remove(mLoaderCompatShim.uriForItem(item)); - } - - mSelectionManager.onItemSelectedStateChanged(mShareActionProvider, - item.getInt(PhotoSetLoader.INDEX_MEDIA_TYPE), - item.getInt(PhotoSetLoader.INDEX_SUPPORTED_OPERATIONS), - checked); + public Object getItemAtPosition(int position) { + return mAdapter.getItem(position); } + private ArrayList mSubItemUriTemp = new ArrayList(1); @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - mSelectionManager.setSelectedUriSource(PhotoSetFragment.this); - mActionMode = mode; - MenuInflater inflater = mode.getMenuInflater(); - inflater.inflate(R.menu.gallery_multiselect, menu); - MenuItem menuItem = menu.findItem(R.id.menu_share); - mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider(); - mShareActionProvider.setOnShareTargetSelectedListener(this); - updateSelectedTitle(mode); - return true; + public ArrayList getSubItemUrisForItem(Object item) { + mSubItemUriTemp.clear(); + mSubItemUriTemp.add(mLoaderCompatShim.uriForItem((Cursor) item)); + return mSubItemUriTemp; } + @Override - public void onDestroyActionMode(ActionMode mode) { - mSelectedUris.clear(); - if (mSharePending) { - // onDestroyActionMode gets called when the share target was selected, - // but apparently before the ArrayList is serialized in the intent - // so we can't clear the old one here. - mSelectedUrisArray = new ArrayList(); - mSharePending = false; - } else { - mSelectedUrisArray.clear(); - } - mSelectionManager.onClearSelection(); - mSelectionManager.setSelectedUriSource(null); - mShareActionProvider = null; - mActionMode = null; + public Object getPathForItemAtPosition(int position) { + return mLoaderCompatShim.getPathForItem(mAdapter.getItem(position)); } @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - updateSelectedTitle(mode); - return false; + public void deleteItemWithPath(Object itemPath) { + mLoaderCompatShim.deleteItemWithPath(itemPath); } @Override - public boolean onShareTargetSelected(ShareActionProvider provider, Intent intent) { - mSharePending = true; - mActionMode.finish(); - return false; + public SparseBooleanArray getSelectedItemPositions() { + return mPhotoSetView.getCheckedItemPositions(); } @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - return false; + public int getSelectedItemCount() { + return mPhotoSetView.getCheckedItemCount(); } } -- cgit v1.2.3