summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChih-Chung Chang <chihchung@google.com>2009-07-01 14:52:24 +0800
committerChih-Chung Chang <chihchung@google.com>2009-07-01 16:53:04 +0800
commit35f8af0ff228adfeec6bb40844d362f6dd62dab6 (patch)
tree8ce01a381085b334db677ba68f58db45537fd327
parent387833adb5ea8ff6be37a5582ef965da839668bd (diff)
downloadpackages_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.java1
-rwxr-xr-xsrc/com/android/camera/ImageManager.java9
-rw-r--r--src/com/android/camera/MenuHelper.java110
-rw-r--r--src/com/android/camera/ReviewImage.java36
-rw-r--r--src/com/android/camera/SelectedImageGetter.java27
-rw-r--r--src/com/android/camera/Util.java7
-rw-r--r--src/com/android/camera/VideoCamera.java25
-rw-r--r--src/com/android/camera/ViewImage.java36
-rw-r--r--src/com/android/camera/gallery/BaseImageList.java4
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 {