1869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu/* 2869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * Copyright (C) 2013 The Android Open Source Project 3869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * 4869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * Licensed under the Apache License, Version 2.0 (the "License"); 5869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * you may not use this file except in compliance with the License. 6869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * You may obtain a copy of the License at 7869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * 8869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * http://www.apache.org/licenses/LICENSE-2.0 9869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * 10869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * Unless required by applicable law or agreed to in writing, software 11869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * distributed under the License is distributed on an "AS IS" BASIS, 12869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * See the License for the specific language governing permissions and 14869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu * limitations under the License. 15869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu */ 16869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 17869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescupackage com.android.photos; 18869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 191a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescuimport android.app.Activity; 20869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.content.Context; 21869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.content.Intent; 22869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.net.Uri; 23869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.os.AsyncTask; 241a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescuimport android.provider.MediaStore.Files.FileColumns; 25869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.util.SparseBooleanArray; 26869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.view.ActionMode; 27869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.view.Menu; 28869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.view.MenuInflater; 29869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.view.MenuItem; 30869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.widget.AbsListView.MultiChoiceModeListener; 31869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.widget.ShareActionProvider; 32869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.widget.ShareActionProvider.OnShareTargetSelectedListener; 33869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 34869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport com.android.gallery3d.R; 351a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescuimport com.android.gallery3d.app.TrimVideo; 36869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport com.android.gallery3d.data.MediaObject; 371a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescuimport com.android.gallery3d.filtershow.FilterShowActivity; 38d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunkimport com.android.gallery3d.filtershow.crop.CropActivity; 391a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescuimport com.android.gallery3d.util.GalleryUtils; 40869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 41869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport java.util.ArrayList; 42869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport java.util.List; 43869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 44869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescupublic class MultiChoiceManager implements MultiChoiceModeListener, 45869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu OnShareTargetSelectedListener, SelectionManager.SelectedUriSource { 46869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 47c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu public interface Provider { 48c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu public MultiChoiceManager getMultiChoiceManager(); 49c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu } 50c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu 51869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public interface Delegate { 52869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public SparseBooleanArray getSelectedItemPositions(); 53869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public int getSelectedItemCount(); 54869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public int getItemMediaType(Object item); 55869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public int getItemSupportedOperations(Object item); 56869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public ArrayList<Uri> getSubItemUrisForItem(Object item); 571a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu public Uri getItemUri(Object item); 58869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public Object getItemAtPosition(int position); 59869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public Object getPathForItemAtPosition(int position); 60869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public void deleteItemWithPath(Object itemPath); 61869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 62869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 63869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private SelectionManager mSelectionManager; 64869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private ShareActionProvider mShareActionProvider; 65869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private ActionMode mActionMode; 66869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private Context mContext; 67869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private Delegate mDelegate; 68869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 691a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu private ArrayList<Uri> mSelectedShareableUrisArray = new ArrayList<Uri>(); 70869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 71ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu public MultiChoiceManager(Activity activity) { 72ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu mContext = activity; 73ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu mSelectionManager = new SelectionManager(activity); 74869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 75869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 76ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu public void setDelegate(Delegate delegate) { 77ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu if (mDelegate == delegate) { 78ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu return; 79ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu } 80ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu if (mActionMode != null) { 81ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu mActionMode.finish(); 82ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu } 83ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu mDelegate = delegate; 84869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 85869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 86869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu @Override 87869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public ArrayList<Uri> getSelectedShareableUris() { 881a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return mSelectedShareableUrisArray; 89869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 90869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 91869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private void updateSelectedTitle(ActionMode mode) { 92869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu int count = mDelegate.getSelectedItemCount(); 93869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mode.setTitle(mContext.getResources().getQuantityString( 94869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu R.plurals.number_of_items_selected, count, count)); 95869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 96869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 971a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu private String getItemMimetype(Object item) { 981a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu int type = mDelegate.getItemMediaType(item); 991a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu if (type == FileColumns.MEDIA_TYPE_IMAGE) { 1001a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return GalleryUtils.MIME_TYPE_IMAGE; 1011a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } else if (type == FileColumns.MEDIA_TYPE_VIDEO) { 1021a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return GalleryUtils.MIME_TYPE_VIDEO; 1031a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } else { 1041a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return GalleryUtils.MIME_TYPE_ALL; 1051a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } 1061a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } 107ef43b57345a7fbb39e22289328f52f16dcd45635Bobby Georgescu 108869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu @Override 109869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public void onItemCheckedStateChanged(ActionMode mode, int position, long id, 110869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu boolean checked) { 111869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu updateSelectedTitle(mode); 112869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu Object item = mDelegate.getItemAtPosition(position); 113869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 1141a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu int supported = mDelegate.getItemSupportedOperations(item); 1151a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu 1161a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu if ((supported & MediaObject.SUPPORT_SHARE) > 0) { 1171a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu ArrayList<Uri> subItems = mDelegate.getSubItemUrisForItem(item); 1181a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu if (checked) { 1191a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu mSelectedShareableUrisArray.addAll(subItems); 1201a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } else { 1211a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu mSelectedShareableUrisArray.removeAll(subItems); 1221a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } 123869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 124869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 125869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mSelectionManager.onItemSelectedStateChanged(mShareActionProvider, 126869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mDelegate.getItemMediaType(item), 1271a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu supported, 128869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu checked); 129869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu updateActionItemVisibilities(mode.getMenu(), 130869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mSelectionManager.getSupportedOperations()); 131869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 132869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 133869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private void updateActionItemVisibilities(Menu menu, int supportedOperations) { 1341a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu MenuItem editItem = menu.findItem(R.id.menu_edit); 135869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu MenuItem deleteItem = menu.findItem(R.id.menu_delete); 1361a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu MenuItem shareItem = menu.findItem(R.id.menu_share); 1371a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu MenuItem cropItem = menu.findItem(R.id.menu_crop); 1381a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu MenuItem trimItem = menu.findItem(R.id.menu_trim); 1391a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu MenuItem muteItem = menu.findItem(R.id.menu_mute); 1401a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu MenuItem setAsItem = menu.findItem(R.id.menu_set_as); 1411a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu 1421a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu editItem.setVisible((supportedOperations & MediaObject.SUPPORT_EDIT) > 0); 143869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu deleteItem.setVisible((supportedOperations & MediaObject.SUPPORT_DELETE) > 0); 1441a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu shareItem.setVisible((supportedOperations & MediaObject.SUPPORT_SHARE) > 0); 1451a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu cropItem.setVisible((supportedOperations & MediaObject.SUPPORT_CROP) > 0); 1461a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu trimItem.setVisible((supportedOperations & MediaObject.SUPPORT_TRIM) > 0); 1471a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu muteItem.setVisible((supportedOperations & MediaObject.SUPPORT_MUTE) > 0); 1481a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu setAsItem.setVisible((supportedOperations & MediaObject.SUPPORT_SETAS) > 0); 149869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 150869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 151869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu @Override 152869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public boolean onCreateActionMode(ActionMode mode, Menu menu) { 153869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mSelectionManager.setSelectedUriSource(this); 154869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mActionMode = mode; 155869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu MenuInflater inflater = mode.getMenuInflater(); 156869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu inflater.inflate(R.menu.gallery_multiselect, menu); 157869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu MenuItem menuItem = menu.findItem(R.id.menu_share); 158869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider(); 159869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mShareActionProvider.setOnShareTargetSelectedListener(this); 160869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu updateSelectedTitle(mode); 161869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu return true; 162869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 163869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 164869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu @Override 165869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public void onDestroyActionMode(ActionMode mode) { 166869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu // onDestroyActionMode gets called when the share target was selected, 167869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu // but apparently before the ArrayList is serialized in the intent 168869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu // so we can't clear the old one here. 1691a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu mSelectedShareableUrisArray = new ArrayList<Uri>(); 170869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mSelectionManager.onClearSelection(); 171869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mSelectionManager.setSelectedUriSource(null); 172869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mShareActionProvider = null; 173869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mActionMode = null; 174869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 175869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 176869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu @Override 177869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 178869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu updateSelectedTitle(mode); 179869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu return false; 180869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 181869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 182869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu @Override 183869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public boolean onShareTargetSelected(ShareActionProvider provider, Intent intent) { 184869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mActionMode.finish(); 185869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu return false; 186869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 187869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 188869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private static class BulkDeleteTask extends AsyncTask<Void, Void, Void> { 189869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private Delegate mDelegate; 190869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private List<Object> mPaths; 191869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 192869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public BulkDeleteTask(Delegate delegate, List<Object> paths) { 193869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mDelegate = delegate; 194869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mPaths = paths; 195869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 196869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 197869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu @Override 198869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu protected Void doInBackground(Void... ignored) { 199869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu for (Object path : mPaths) { 200869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mDelegate.deleteItemWithPath(path); 201869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 202869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu return null; 203869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 204869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 205869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 206869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu @Override 207869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 2081a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu int actionItemId = item.getItemId(); 2091a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu switch (actionItemId) { 210869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu case R.id.menu_delete: 211869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu BulkDeleteTask deleteTask = new BulkDeleteTask(mDelegate, 212869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu getPathsForSelectedItems()); 2131a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu deleteTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 2141a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu mode.finish(); 2151a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return true; 2161a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu case R.id.menu_edit: 2171a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu case R.id.menu_crop: 2181a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu case R.id.menu_trim: 2191a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu case R.id.menu_mute: 2201a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu case R.id.menu_set_as: 2211a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu singleItemAction(getSelectedItem(), actionItemId); 222869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu mode.finish(); 223869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu return true; 224869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu default: 225869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu return false; 226869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 227869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 228869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu 2291a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu private void singleItemAction(Object item, int actionItemId) { 2301a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu Intent intent = new Intent(); 2311a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu String mime = getItemMimetype(item); 2321a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu Uri uri = mDelegate.getItemUri(item); 2331a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu switch (actionItemId) { 2341a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu case R.id.menu_edit: 2351a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu intent.setDataAndType(uri, mime) 2361a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) 2371a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu .setAction(Intent.ACTION_EDIT); 2381a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu mContext.startActivity(Intent.createChooser(intent, null)); 2391a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return; 2401a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu case R.id.menu_crop: 2411a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu intent.setDataAndType(uri, mime) 2421a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) 243d25fdea42988c72312ab3be0be76ab75e4d944c8Ruben Brunk .setAction(CropActivity.CROP_ACTION) 2441a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu .setClass(mContext, FilterShowActivity.class); 2451a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu mContext.startActivity(intent); 2461a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return; 2471a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu case R.id.menu_trim: 2481a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu intent.setData(uri) 2491a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu .setClass(mContext, TrimVideo.class); 2501a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu mContext.startActivity(intent); 2511a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return; 2521a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu case R.id.menu_mute: 2531a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu /* TODO need a way to get the file path of an item 2541a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu MuteVideo muteVideo = new MuteVideo(filePath, 2551a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu uri, (Activity) mContext); 2561a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu muteVideo.muteInBackground(); 2571a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu */ 2581a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return; 2591a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu case R.id.menu_set_as: 2601a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu intent.setDataAndType(uri, mime) 2611a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) 2621a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu .setAction(Intent.ACTION_ATTACH_DATA) 2631a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu .putExtra("mimeType", mime); 2641a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu mContext.startActivity(Intent.createChooser( 2651a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu intent, mContext.getString(R.string.set_as))); 2661a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return; 2671a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu default: 2681a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return; 2691a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } 2701a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } 2711a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu 272869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu private List<Object> getPathsForSelectedItems() { 273869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu List<Object> paths = new ArrayList<Object>(); 274869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu SparseBooleanArray selected = mDelegate.getSelectedItemPositions(); 275869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu for (int i = 0; i < selected.size(); i++) { 276869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu if (selected.valueAt(i)) { 277869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu paths.add(mDelegate.getPathForItemAtPosition(i)); 278869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 279869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 280869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu return paths; 281869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu } 2821a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu 2831a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu public Object getSelectedItem() { 2841a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu if (mDelegate.getSelectedItemCount() != 1) { 2851a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return null; 2861a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } 2871a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu SparseBooleanArray selected = mDelegate.getSelectedItemPositions(); 2881a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu for (int i = 0; i < selected.size(); i++) { 2891a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu if (selected.valueAt(i)) { 2901a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return mDelegate.getItemAtPosition(selected.keyAt(i)); 2911a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } 2921a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } 2931a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu return null; 2941a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu } 295869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu} 296