summaryrefslogtreecommitdiffstats
path: root/src/com/android/photos/MultiChoiceManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/photos/MultiChoiceManager.java')
-rw-r--r--src/com/android/photos/MultiChoiceManager.java127
1 files changed, 111 insertions, 16 deletions
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;
+ }
}