summaryrefslogtreecommitdiffstats
path: root/src/com/android/photos
diff options
context:
space:
mode:
authorBobby Georgescu <georgescu@google.com>2013-03-14 15:19:23 -0700
committerBobby Georgescu <georgescu@google.com>2013-03-14 15:53:42 -0700
commit48e9a7730db170c4dfd36156323cd54ddafe7117 (patch)
tree66b862eff4f34b0674b7a09770d5c30d8daa8cb8 /src/com/android/photos
parentacca4ee0fefe6442b853510b6b360f6cb7ad1bc5 (diff)
downloadandroid_packages_apps_Snap-48e9a7730db170c4dfd36156323cd54ddafe7117.tar.gz
android_packages_apps_Snap-48e9a7730db170c4dfd36156323cd54ddafe7117.tar.bz2
android_packages_apps_Snap-48e9a7730db170c4dfd36156323cd54ddafe7117.zip
Add many contextual actions to new gallery
Change-Id: Ied57636c7bf0804ad015ddc664e177633c549e08
Diffstat (limited to 'src/com/android/photos')
-rw-r--r--src/com/android/photos/AlbumSetFragment.java4
-rw-r--r--src/com/android/photos/MultiChoiceManager.java127
-rw-r--r--src/com/android/photos/PhotoSetFragment.java5
-rw-r--r--src/com/android/photos/SelectionManager.java44
4 files changed, 162 insertions, 18 deletions
diff --git a/src/com/android/photos/AlbumSetFragment.java b/src/com/android/photos/AlbumSetFragment.java
index d0bc81fd6..20c6db4c9 100644
--- a/src/com/android/photos/AlbumSetFragment.java
+++ b/src/com/android/photos/AlbumSetFragment.java
@@ -165,4 +165,8 @@ public class AlbumSetFragment extends Fragment implements OnItemClickListener,
return mAlbumSetView.getCheckedItemCount();
}
+ @Override
+ public Uri getItemUri(Object item) {
+ return mLoaderCompatShim.uriForItem((Cursor) item);
+ }
}
diff --git a/src/com/android/photos/MultiChoiceManager.java b/src/com/android/photos/MultiChoiceManager.java
index e00c842fe..d339cb721 100644
--- a/src/com/android/photos/MultiChoiceManager.java
+++ b/src/com/android/photos/MultiChoiceManager.java
@@ -16,10 +16,12 @@
package com.android.photos;
+import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
+import android.provider.MediaStore.Files.FileColumns;
import android.util.SparseBooleanArray;
import android.view.ActionMode;
import android.view.Menu;
@@ -30,7 +32,12 @@ 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;
import java.util.ArrayList;
import java.util.List;
@@ -44,6 +51,7 @@ public class MultiChoiceManager implements MultiChoiceModeListener,
public int getItemMediaType(Object item);
public int getItemSupportedOperations(Object item);
public ArrayList<Uri> getSubItemUrisForItem(Object item);
+ public Uri getItemUri(Object item);
public Object getItemAtPosition(int position);
public Object getPathForItemAtPosition(int position);
public void deleteItemWithPath(Object itemPath);
@@ -52,11 +60,10 @@ public class MultiChoiceManager implements MultiChoiceModeListener,
private SelectionManager mSelectionManager;
private ShareActionProvider mShareActionProvider;
private ActionMode mActionMode;
- private int numSubItemsCollected = 0;
private Context mContext;
private Delegate mDelegate;
- private ArrayList<Uri> mSelectedUrisArray = new ArrayList<Uri>();
+ private ArrayList<Uri> mSelectedShareableUrisArray = new ArrayList<Uri>();
public MultiChoiceManager(Context context, Delegate delegate) {
mContext = context;
@@ -69,7 +76,7 @@ public class MultiChoiceManager implements MultiChoiceModeListener,
@Override
public ArrayList<Uri> getSelectedShareableUris() {
- return mSelectedUrisArray;
+ return mSelectedShareableUrisArray;
}
private void updateSelectedTitle(ActionMode mode) {
@@ -78,34 +85,57 @@ public class MultiChoiceManager implements MultiChoiceModeListener,
R.plurals.number_of_items_selected, count, count));
}
+ private String getItemMimetype(Object item) {
+ int type = mDelegate.getItemMediaType(item);
+ if (type == FileColumns.MEDIA_TYPE_IMAGE) {
+ return GalleryUtils.MIME_TYPE_IMAGE;
+ } else if (type == FileColumns.MEDIA_TYPE_VIDEO) {
+ return GalleryUtils.MIME_TYPE_VIDEO;
+ } else {
+ return GalleryUtils.MIME_TYPE_ALL;
+ }
+ }
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id,
boolean checked) {
updateSelectedTitle(mode);
Object item = mDelegate.getItemAtPosition(position);
- ArrayList<Uri> subItems = mDelegate.getSubItemUrisForItem(item);
- if (checked) {
- mSelectedUrisArray.addAll(subItems);
- numSubItemsCollected += subItems.size();
- } else {
- mSelectedUrisArray.removeAll(subItems);
- numSubItemsCollected -= subItems.size();
+ int supported = mDelegate.getItemSupportedOperations(item);
+
+ if ((supported & MediaObject.SUPPORT_SHARE) > 0) {
+ ArrayList<Uri> subItems = mDelegate.getSubItemUrisForItem(item);
+ if (checked) {
+ mSelectedShareableUrisArray.addAll(subItems);
+ } else {
+ mSelectedShareableUrisArray.removeAll(subItems);
+ }
}
mSelectionManager.onItemSelectedStateChanged(mShareActionProvider,
mDelegate.getItemMediaType(item),
- mDelegate.getItemSupportedOperations(item),
+ supported,
checked);
updateActionItemVisibilities(mode.getMenu(),
mSelectionManager.getSupportedOperations());
}
private void updateActionItemVisibilities(Menu menu, int supportedOperations) {
- MenuItem shareItem = menu.findItem(R.id.menu_share);
+ MenuItem editItem = menu.findItem(R.id.menu_edit);
MenuItem deleteItem = menu.findItem(R.id.menu_delete);
- shareItem.setVisible((supportedOperations & MediaObject.SUPPORT_SHARE) > 0);
+ MenuItem shareItem = menu.findItem(R.id.menu_share);
+ MenuItem cropItem = menu.findItem(R.id.menu_crop);
+ MenuItem trimItem = menu.findItem(R.id.menu_trim);
+ MenuItem muteItem = menu.findItem(R.id.menu_mute);
+ MenuItem setAsItem = menu.findItem(R.id.menu_set_as);
+
+ editItem.setVisible((supportedOperations & MediaObject.SUPPORT_EDIT) > 0);
deleteItem.setVisible((supportedOperations & MediaObject.SUPPORT_DELETE) > 0);
+ shareItem.setVisible((supportedOperations & MediaObject.SUPPORT_SHARE) > 0);
+ cropItem.setVisible((supportedOperations & MediaObject.SUPPORT_CROP) > 0);
+ trimItem.setVisible((supportedOperations & MediaObject.SUPPORT_TRIM) > 0);
+ muteItem.setVisible((supportedOperations & MediaObject.SUPPORT_MUTE) > 0);
+ setAsItem.setVisible((supportedOperations & MediaObject.SUPPORT_SETAS) > 0);
}
@Override
@@ -126,7 +156,7 @@ public class MultiChoiceManager implements MultiChoiceModeListener,
// 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<Uri>();
+ mSelectedShareableUrisArray = new ArrayList<Uri>();
mSelectionManager.onClearSelection();
mSelectionManager.setSelectedUriSource(null);
mShareActionProvider = null;
@@ -165,11 +195,20 @@ public class MultiChoiceManager implements MultiChoiceModeListener,
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- switch (item.getItemId()) {
+ int actionItemId = item.getItemId();
+ switch (actionItemId) {
case R.id.menu_delete:
BulkDeleteTask deleteTask = new BulkDeleteTask(mDelegate,
getPathsForSelectedItems());
- deleteTask.execute();
+ deleteTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ mode.finish();
+ return true;
+ case R.id.menu_edit:
+ case R.id.menu_crop:
+ case R.id.menu_trim:
+ case R.id.menu_mute:
+ case R.id.menu_set_as:
+ singleItemAction(getSelectedItem(), actionItemId);
mode.finish();
return true;
default:
@@ -177,6 +216,49 @@ public class MultiChoiceManager implements MultiChoiceModeListener,
}
}
+ private void singleItemAction(Object item, int actionItemId) {
+ Intent intent = new Intent();
+ String mime = getItemMimetype(item);
+ Uri uri = mDelegate.getItemUri(item);
+ switch (actionItemId) {
+ case R.id.menu_edit:
+ intent.setDataAndType(uri, mime)
+ .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ .setAction(Intent.ACTION_EDIT);
+ mContext.startActivity(Intent.createChooser(intent, null));
+ return;
+ case R.id.menu_crop:
+ intent.setDataAndType(uri, mime)
+ .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ .setAction(FilterShowActivity.CROP_ACTION)
+ .setClass(mContext, FilterShowActivity.class);
+ mContext.startActivity(intent);
+ return;
+ case R.id.menu_trim:
+ intent.setData(uri)
+ .setClass(mContext, TrimVideo.class);
+ mContext.startActivity(intent);
+ return;
+ case R.id.menu_mute:
+ /* TODO need a way to get the file path of an item
+ MuteVideo muteVideo = new MuteVideo(filePath,
+ uri, (Activity) mContext);
+ muteVideo.muteInBackground();
+ */
+ return;
+ case R.id.menu_set_as:
+ intent.setDataAndType(uri, mime)
+ .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ .setAction(Intent.ACTION_ATTACH_DATA)
+ .putExtra("mimeType", mime);
+ mContext.startActivity(Intent.createChooser(
+ intent, mContext.getString(R.string.set_as)));
+ return;
+ default:
+ return;
+ }
+ }
+
private List<Object> getPathsForSelectedItems() {
List<Object> paths = new ArrayList<Object>();
SparseBooleanArray selected = mDelegate.getSelectedItemPositions();
@@ -187,4 +269,17 @@ public class MultiChoiceManager implements MultiChoiceModeListener,
}
return paths;
}
+
+ public Object getSelectedItem() {
+ if (mDelegate.getSelectedItemCount() != 1) {
+ return null;
+ }
+ SparseBooleanArray selected = mDelegate.getSelectedItemPositions();
+ for (int i = 0; i < selected.size(); i++) {
+ if (selected.valueAt(i)) {
+ return mDelegate.getItemAtPosition(selected.keyAt(i));
+ }
+ }
+ return null;
+ }
}
diff --git a/src/com/android/photos/PhotoSetFragment.java b/src/com/android/photos/PhotoSetFragment.java
index b485cd051..769f13113 100644
--- a/src/com/android/photos/PhotoSetFragment.java
+++ b/src/com/android/photos/PhotoSetFragment.java
@@ -176,4 +176,9 @@ public class PhotoSetFragment extends Fragment implements OnItemClickListener,
public int getSelectedItemCount() {
return mPhotoSetView.getCheckedItemCount();
}
+
+ @Override
+ public Uri getItemUri(Object item) {
+ return mLoaderCompatShim.uriForItem((Cursor) item);
+ }
}
diff --git a/src/com/android/photos/SelectionManager.java b/src/com/android/photos/SelectionManager.java
index ce340c731..b64b493bb 100644
--- a/src/com/android/photos/SelectionManager.java
+++ b/src/com/android/photos/SelectionManager.java
@@ -70,6 +70,11 @@ public class SelectionManager {
private int mSelectedShareableImageCount = 0;
private int mSelectedShareableVideoCount = 0;
private int mSelectedDeletableCount = 0;
+ private int mSelectedEditableCount = 0;
+ private int mSelectedCroppableCount = 0;
+ private int mSelectedSetableCount = 0;
+ private int mSelectedTrimmableCount = 0;
+ private int mSelectedMuteableCount = 0;
private ArrayList<Uri> mCachedShareableUris = null;
@@ -83,6 +88,21 @@ public class SelectionManager {
if ((itemSupportedOperations & MediaObject.SUPPORT_DELETE) > 0) {
mSelectedDeletableCount += increment;
}
+ if ((itemSupportedOperations & MediaObject.SUPPORT_EDIT) > 0) {
+ mSelectedEditableCount += increment;
+ }
+ if ((itemSupportedOperations & MediaObject.SUPPORT_CROP) > 0) {
+ mSelectedCroppableCount += increment;
+ }
+ if ((itemSupportedOperations & MediaObject.SUPPORT_SETAS) > 0) {
+ mSelectedSetableCount += increment;
+ }
+ if ((itemSupportedOperations & MediaObject.SUPPORT_TRIM) > 0) {
+ mSelectedTrimmableCount += increment;
+ }
+ if ((itemSupportedOperations & MediaObject.SUPPORT_MUTE) > 0) {
+ mSelectedMuteableCount += increment;
+ }
if ((itemSupportedOperations & MediaObject.SUPPORT_SHARE) > 0) {
mSelectedShareableCount += increment;
if (itemType == FileColumns.MEDIA_TYPE_IMAGE) {
@@ -117,8 +137,6 @@ public class SelectionManager {
}
}
share.setShareIntent(mShareIntent);
-
- // TODO update editability, etc.
}
public int getSupportedOperations() {
@@ -126,6 +144,23 @@ public class SelectionManager {
return 0;
}
int supported = 0;
+ if (mSelectedTotalCount == 1) {
+ if (mSelectedCroppableCount == 1) {
+ supported |= MediaObject.SUPPORT_CROP;
+ }
+ if (mSelectedEditableCount == 1) {
+ supported |= MediaObject.SUPPORT_EDIT;
+ }
+ if (mSelectedSetableCount == 1) {
+ supported |= MediaObject.SUPPORT_SETAS;
+ }
+ if (mSelectedTrimmableCount == 1) {
+ supported |= MediaObject.SUPPORT_TRIM;
+ }
+ if (mSelectedMuteableCount == 1) {
+ supported |= MediaObject.SUPPORT_MUTE;
+ }
+ }
if (mSelectedDeletableCount == mSelectedTotalCount) {
supported |= MediaObject.SUPPORT_DELETE;
}
@@ -141,6 +176,11 @@ public class SelectionManager {
mSelectedShareableImageCount = 0;
mSelectedShareableVideoCount = 0;
mSelectedDeletableCount = 0;
+ mSelectedEditableCount = 0;
+ mSelectedCroppableCount = 0;
+ mSelectedSetableCount = 0;
+ mSelectedTrimmableCount = 0;
+ mSelectedMuteableCount = 0;
mCachedShareableUris = null;
mShareIntent.removeExtra(Intent.EXTRA_STREAM);
mShareIntent.setAction(null).setType(null);