diff options
author | Chih-Chung Chang <chihchung@google.com> | 2009-07-01 14:52:24 +0800 |
---|---|---|
committer | Chih-Chung Chang <chihchung@google.com> | 2009-07-01 16:53:04 +0800 |
commit | 35f8af0ff228adfeec6bb40844d362f6dd62dab6 (patch) | |
tree | 8ce01a381085b334db677ba68f58db45537fd327 | |
parent | 387833adb5ea8ff6be37a5582ef965da839668bd (diff) | |
download | packages_apps_LegacyCamera-35f8af0ff228adfeec6bb40844d362f6dd62dab6.zip packages_apps_LegacyCamera-35f8af0ff228adfeec6bb40844d362f6dd62dab6.tar.gz packages_apps_LegacyCamera-35f8af0ff228adfeec6bb40844d362f6dd62dab6.tar.bz2 |
Fix 1950477: Menu items for video review are incorrect.
-rw-r--r-- | src/com/android/camera/ImageGallery.java | 1 | ||||
-rwxr-xr-x | src/com/android/camera/ImageManager.java | 9 | ||||
-rw-r--r-- | src/com/android/camera/MenuHelper.java | 110 | ||||
-rw-r--r-- | src/com/android/camera/ReviewImage.java | 36 | ||||
-rw-r--r-- | src/com/android/camera/SelectedImageGetter.java | 27 | ||||
-rw-r--r-- | src/com/android/camera/Util.java | 7 | ||||
-rw-r--r-- | src/com/android/camera/VideoCamera.java | 25 | ||||
-rw-r--r-- | src/com/android/camera/ViewImage.java | 36 | ||||
-rw-r--r-- | src/com/android/camera/gallery/BaseImageList.java | 4 |
9 files changed, 100 insertions, 155 deletions
diff --git a/src/com/android/camera/ImageGallery.java b/src/com/android/camera/ImageGallery.java index 55a666c..4d75ad9 100644 --- a/src/com/android/camera/ImageGallery.java +++ b/src/com/android/camera/ImageGallery.java @@ -759,7 +759,6 @@ public class ImageGallery extends Activity implements MenuHelper.MenuItemsResult r = MenuHelper.addImageMenuItems( menu, MenuHelper.INCLUDE_ALL, - isImage, ImageGallery.this, mHandler, mDeletePhotoRunnable, diff --git a/src/com/android/camera/ImageManager.java b/src/com/android/camera/ImageManager.java index 7a7767b..986fd03 100755 --- a/src/com/android/camera/ImageManager.java +++ b/src/com/android/camera/ImageManager.java @@ -145,6 +145,13 @@ public class ImageManager { } /** + * @return true if the mimetype is a video mimetype. + */ + public static boolean isVideoMimeType(String mimeType) { + return mimeType.startsWith("video/"); + } + + /** * @return true if the image is an image. */ public static boolean isImage(IImage image) { @@ -156,7 +163,7 @@ public class ImageManager { */ public static boolean isVideo(IImage image) { // This is the right implementation, but we use instanceof for speed. - //return Util.isVideoMimeType(image.getMimeType()); + //return isVideoMimeType(image.getMimeType()); return (image instanceof VideoObject); } diff --git a/src/com/android/camera/MenuHelper.java b/src/com/android/camera/MenuHelper.java index 5316d97..dd3250a 100644 --- a/src/com/android/camera/MenuHelper.java +++ b/src/com/android/camera/MenuHelper.java @@ -332,8 +332,7 @@ public class MenuHelper { // Displays detailed information about the image/video. private static boolean onDetailsClicked(MenuInvoker onInvoke, final Handler handler, - final Activity activity, - final boolean isImage) { + final Activity activity) { onInvoke.run(new MenuCallback() { public void run(Uri u, IImage image) { if (image == null) { @@ -364,7 +363,7 @@ public class MenuHelper { int dimensionWidth = 0; int dimensionHeight = 0; - if (isImage) { + if (ImageManager.isImage(image)) { // getWidth is much slower than reading from EXIF dimensionWidth = image.getWidth(); dimensionHeight = image.getHeight(); @@ -592,7 +591,7 @@ public class MenuHelper { // Called when "Share" is clicked. private static boolean onImageShareClicked(MenuInvoker onInvoke, - final Activity activity, final boolean isImage) { + final Activity activity) { onInvoke.run(new MenuCallback() { public void run(Uri u, IImage image) { if (image == null) return; @@ -602,7 +601,7 @@ public class MenuHelper { String mimeType = image.getMimeType(); intent.setType(mimeType); intent.putExtra(Intent.EXTRA_STREAM, u); - boolean isImage = ImageManager.isImageMimeType(mimeType); + boolean isImage = ImageManager.isImage(image); try { activity.startActivity(Intent.createChooser(intent, activity.getText(isImage @@ -633,10 +632,21 @@ public class MenuHelper { return true; } + // Called when "Delete" is clicked. + private static boolean onDeleteClicked(MenuInvoker onInvoke, + final Activity activity, final Runnable onDelete) { + onInvoke.run(new MenuCallback() { + public void run(Uri uri, IImage image) { + if (image != null) { + deleteImage(activity, onDelete, image); + } + }}); + return true; + } + static MenuItemsResult addImageMenuItems( Menu menu, int inclusions, - final boolean isImage, final Activity activity, final Handler handler, final Runnable onDelete, @@ -645,8 +655,12 @@ public class MenuHelper { new ArrayList<MenuItem>(); final ArrayList<MenuItem> requiresNoDrmAccessItems = new ArrayList<MenuItem>(); + final ArrayList<MenuItem> requiresImageItems = + new ArrayList<MenuItem>(); + final ArrayList<MenuItem> requiresVideoItems = + new ArrayList<MenuItem>(); - if (isImage && ((inclusions & INCLUDE_ROTATE_MENU) != 0)) { + if ((inclusions & INCLUDE_ROTATE_MENU) != 0) { SubMenu rotateSubmenu = menu.addSubMenu(IMAGE_SAVING_ITEM, MENU_IMAGE_ROTATE, 40, R.string.rotate) .setIcon(android.R.drawable.ic_menu_rotate); @@ -654,28 +668,34 @@ public class MenuHelper { // since the items within the submenu won't be shown anyway. This // is really a framework bug in that it shouldn't show the submenu // if the submenu has no visible items. - requiresWriteAccessItems.add(rotateSubmenu.getItem()); - requiresWriteAccessItems.add( - rotateSubmenu.add(0, MENU_IMAGE_ROTATE_LEFT, 50, - R.string.rotate_left) + MenuItem rotateLeft = rotateSubmenu.add(0, MENU_IMAGE_ROTATE_LEFT, + 50, R.string.rotate_left) .setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { return onRotateClicked(onInvoke, -90); } - }).setAlphabeticShortcut('l')); - requiresWriteAccessItems.add( - rotateSubmenu.add(0, MENU_IMAGE_ROTATE_RIGHT, 60, - R.string.rotate_right) + }).setAlphabeticShortcut('l'); + + MenuItem rotateRight = rotateSubmenu.add(0, MENU_IMAGE_ROTATE_RIGHT, + 60, R.string.rotate_right) .setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { return onRotateClicked(onInvoke, 90); } - }).setAlphabeticShortcut('r')); + }).setAlphabeticShortcut('r'); + + requiresWriteAccessItems.add(rotateSubmenu.getItem()); + requiresWriteAccessItems.add(rotateLeft); + requiresWriteAccessItems.add(rotateRight); + + requiresImageItems.add(rotateSubmenu.getItem()); + requiresImageItems.add(rotateLeft); + requiresImageItems.add(rotateRight); } - if (isImage && ((inclusions & INCLUDE_CROP_MENU) != 0)) { + if ((inclusions & INCLUDE_CROP_MENU) != 0) { MenuItem autoCrop = menu.add(IMAGE_SAVING_ITEM, MENU_IMAGE_CROP, 73, R.string.camera_crop); autoCrop.setIcon(android.R.drawable.ic_menu_crop); @@ -686,9 +706,10 @@ public class MenuHelper { } }); requiresWriteAccessItems.add(autoCrop); + requiresImageItems.add(autoCrop); } - if (isImage && ((inclusions & INCLUDE_SET_MENU) != 0)) { + if ((inclusions & INCLUDE_SET_MENU) != 0) { MenuItem setMenu = menu.add(IMAGE_SAVING_ITEM, MENU_IMAGE_SET, 75, R.string.camera_set); setMenu.setIcon(android.R.drawable.ic_menu_set_as); @@ -698,6 +719,7 @@ public class MenuHelper { return onSetAsClicked(onInvoke, activity); } }); + requiresImageItems.add(setMenu); } if ((inclusions & INCLUDE_SHARE_MENU) != 0) { @@ -705,8 +727,7 @@ public class MenuHelper { R.string.camera_share).setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { - return onImageShareClicked(onInvoke, activity, - isImage); + return onImageShareClicked(onInvoke, activity); } }); item1.setIcon(android.R.drawable.ic_menu_share); @@ -721,8 +742,7 @@ public class MenuHelper { deleteItem.setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { - deleteImpl(activity, onDelete, isImage); - return true; + return onDeleteClicked(onInvoke, activity, onDelete); } }) .setAlphabeticShortcut('d') @@ -733,15 +753,14 @@ public class MenuHelper { MenuItem detailsMenu = menu.add(0, 0, 80, R.string.details) .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { - return onDetailsClicked(onInvoke, handler, activity, - isImage); + return onDetailsClicked(onInvoke, handler, activity); } }); detailsMenu.setIcon(R.drawable.ic_menu_view_details); } - if ((isImage) && ((inclusions & INCLUDE_SHOWMAP_MENU) != 0)) { - menu.add(0, 0, 80, R.string.show_on_map) + if ((inclusions & INCLUDE_SHOWMAP_MENU) != 0) { + MenuItem showOnMapItem = menu.add(0, 0, 80, R.string.show_on_map) .setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { @@ -749,16 +768,20 @@ public class MenuHelper { handler, activity); } }).setIcon(R.drawable.ic_menu_3d_globe); + requiresImageItems.add(showOnMapItem); } - if ((!isImage) && ((inclusions & INCLUDE_VIEWPLAY_MENU) != 0)) { - menu.add(VIDEO_SAVING_ITEM, MENU_VIDEO_PLAY, 0, R.string.video_play) + if ((inclusions & INCLUDE_VIEWPLAY_MENU) != 0) { + MenuItem videoPlayItem = menu.add(VIDEO_SAVING_ITEM, + MENU_VIDEO_PLAY, 0, R.string.video_play) .setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { return onViewPlayClicked(onInvoke, activity); } }); + videoPlayItem.setIcon(com.android.internal.R.drawable.ic_menu_play_clip); + requiresVideoItems.add(videoPlayItem); } return new MenuItemsResult() { @@ -769,16 +792,31 @@ public class MenuHelper { if (image == null) { return; } - boolean readOnly = image.isReadonly(); - boolean isDrm = image.isDrm(); - for (MenuItem item : requiresWriteAccessItems) { - item.setVisible(!readOnly); - item.setEnabled(!readOnly); + ArrayList<MenuItem> enableList = new ArrayList<MenuItem>(); + ArrayList<MenuItem> disableList = new ArrayList<MenuItem>(); + ArrayList<MenuItem> list; + + list = image.isReadonly() ? disableList : enableList; + list.addAll(requiresWriteAccessItems); + + list = image.isDrm() ? disableList : enableList; + list.addAll(requiresNoDrmAccessItems); + + list = ImageManager.isImage(image) ? enableList : disableList; + list.addAll(requiresImageItems); + + list = ImageManager.isVideo(image) ? enableList : disableList; + list.addAll(requiresVideoItems); + + for (MenuItem item : enableList) { + item.setVisible(true); + item.setEnabled(true); } - for (MenuItem item : requiresNoDrmAccessItems) { - item.setVisible(!isDrm); - item.setEnabled(!isDrm); + + for (MenuItem item : disableList) { + item.setVisible(false); + item.setEnabled(false); } } diff --git a/src/com/android/camera/ReviewImage.java b/src/com/android/camera/ReviewImage.java index 1e40823..eec57db 100644 --- a/src/com/android/camera/ReviewImage.java +++ b/src/com/android/camera/ReviewImage.java @@ -317,42 +317,22 @@ public class ReviewImage extends Activity implements View.OnClickListener { public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); - final SelectedImageGetter selectedImageGetter = - new SelectedImageGetter() { - public IImage getCurrentImage() { - return mAllImages.getImageAt(mCurrentPosition); - } - - public Uri getCurrentImageUri() { - return mAllImages.getImageAt(mCurrentPosition) - .fullSizeImageUri(); - } - }; - mImageMenuRunnable = MenuHelper.addImageMenuItems( menu, MenuHelper.INCLUDE_ALL, - true, ReviewImage.this, mHandler, mDeletePhotoRunnable, new MenuHelper.MenuInvoker() { public void run(final MenuHelper.MenuCallback cb) { - setMode(MODE_NORMAL); - Thread t = new Thread() { - @Override - public void run() { - cb.run(selectedImageGetter.getCurrentImageUri(), - selectedImageGetter.getCurrentImage()); - mHandler.post(new Runnable() { - public void run() { - mImageView.clear(); - setImage(mCurrentPosition); - } - }); - } - }; - t.start(); + setMode(MODE_NORMAL); + + IImage image = mAllImages.getImageAt(mCurrentPosition); + Uri uri = image.fullSizeImageUri(); + cb.run(uri, image); + + mImageView.clear(); + setImage(mCurrentPosition); } }); diff --git a/src/com/android/camera/SelectedImageGetter.java b/src/com/android/camera/SelectedImageGetter.java deleted file mode 100644 index a9e5db1..0000000 --- a/src/com/android/camera/SelectedImageGetter.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2007 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.camera; - -import com.android.camera.gallery.IImage; - -import android.net.Uri; - -interface SelectedImageGetter { - IImage getCurrentImage(); - Uri getCurrentImageUri(); -} - diff --git a/src/com/android/camera/Util.java b/src/com/android/camera/Util.java index 6689d1e..e68cf49 100644 --- a/src/com/android/camera/Util.java +++ b/src/com/android/camera/Util.java @@ -243,13 +243,6 @@ public class Util { } /** - * @return true if the mimetype is a video mimetype. - */ - public static boolean isVideoMimeType(String mimeType) { - return mimeType.startsWith("video/"); - } - - /** * Create a video thumbnail for a video. May return null if the video is * corrupt. * diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java index ae30579..106588c 100644 --- a/src/com/android/camera/VideoCamera.java +++ b/src/com/android/camera/VideoCamera.java @@ -698,31 +698,6 @@ public class VideoCamera extends Activity implements View.OnClickListener, return false; } else { addBaseMenuItems(menu); - int menuFlags = - MenuHelper.INCLUDE_ALL & ~MenuHelper.INCLUDE_ROTATE_MENU - & ~MenuHelper.INCLUDE_DETAILS_MENU; - MenuHelper.addImageMenuItems(menu, menuFlags, false, VideoCamera.this, mHandler, - // Handler for deletion - new Runnable() { - public void run() { - // What do we do here? - // mContentResolver.delete(uri, null, null); - } - }, new MenuHelper.MenuInvoker() { - public void run(final MenuHelper.MenuCallback cb) { - } - }); - - MenuItem gallery = - menu.add(MenuHelper.IMAGE_SAVING_ITEM, MENU_SAVE_GALLERY_PHOTO, 0, - R.string.camera_gallery_photos_text).setOnMenuItemClickListener( - new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - gotoGallery(); - return true; - } - }); - gallery.setIcon(android.R.drawable.ic_menu_gallery); } return true; } diff --git a/src/com/android/camera/ViewImage.java b/src/com/android/camera/ViewImage.java index 1f272dc..dc0851f 100644 --- a/src/com/android/camera/ViewImage.java +++ b/src/com/android/camera/ViewImage.java @@ -352,42 +352,22 @@ public class ViewImage extends Activity implements View.OnClickListener { }); item.setIcon(android.R.drawable.ic_menu_slideshow); - final SelectedImageGetter selectedImageGetter = - new SelectedImageGetter() { - public IImage getCurrentImage() { - return mAllImages.getImageAt(mCurrentPosition); - } - - public Uri getCurrentImageUri() { - return mAllImages.getImageAt(mCurrentPosition) - .fullSizeImageUri(); - } - }; - mImageMenuRunnable = MenuHelper.addImageMenuItems( menu, MenuHelper.INCLUDE_ALL, - true, ViewImage.this, mHandler, mDeletePhotoRunnable, new MenuHelper.MenuInvoker() { public void run(final MenuHelper.MenuCallback cb) { - setMode(MODE_NORMAL); - Thread t = new Thread() { - @Override - public void run() { - cb.run(selectedImageGetter.getCurrentImageUri(), - selectedImageGetter.getCurrentImage()); - mHandler.post(new Runnable() { - public void run() { - mImageView.clear(); - setImage(mCurrentPosition); - } - }); - } - }; - t.start(); + setMode(MODE_NORMAL); + + IImage image = mAllImages.getImageAt(mCurrentPosition); + Uri uri = image.fullSizeImageUri(); + cb.run(uri, image); + + mImageView.clear(); + setImage(mCurrentPosition); } }); diff --git a/src/com/android/camera/gallery/BaseImageList.java b/src/com/android/camera/gallery/BaseImageList.java index f8aa808..545ef01 100644 --- a/src/com/android/camera/gallery/BaseImageList.java +++ b/src/com/android/camera/gallery/BaseImageList.java @@ -18,6 +18,7 @@ package com.android.camera.gallery; import com.android.camera.ExifInterface; import com.android.camera.Util; +import com.android.camera.ImageManager; import android.content.ContentResolver; import android.content.ContentUris; @@ -271,8 +272,7 @@ public abstract class BaseImageList implements IImageList { String filePath = existingImage.getDataPath(); if (filePath != null) { - String mimeType = existingImage.getMimeType(); - boolean isVideo = Util.isVideoMimeType(mimeType); + boolean isVideo = ImageManager.isVideo(existingImage); if (isVideo) { bitmap = Util.createVideoThumbnail(filePath); } else { |