diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-12-17 18:05:54 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-12-17 18:05:54 -0800 |
commit | 0eaec58e292ce4eaa6baadecf643f0f65e48d278 (patch) | |
tree | 78ef71512fa619ca4befa57b239be433f6aae74e /src/com/android/camera/MenuHelper.java | |
parent | 1d4c75065966c4f6f56900e31f655bfd1b334435 (diff) | |
download | LegacyCamera-0eaec58e292ce4eaa6baadecf643f0f65e48d278.zip LegacyCamera-0eaec58e292ce4eaa6baadecf643f0f65e48d278.tar.gz LegacyCamera-0eaec58e292ce4eaa6baadecf643f0f65e48d278.tar.bz2 |
Code drop from //branches/cupcake/...@124589
Diffstat (limited to 'src/com/android/camera/MenuHelper.java')
-rw-r--r-- | src/com/android/camera/MenuHelper.java | 394 |
1 files changed, 175 insertions, 219 deletions
diff --git a/src/com/android/camera/MenuHelper.java b/src/com/android/camera/MenuHelper.java index 033fc9c..9e4fb82 100644 --- a/src/com/android/camera/MenuHelper.java +++ b/src/com/android/camera/MenuHelper.java @@ -23,12 +23,14 @@ import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Handler; +import android.provider.MediaStore; import android.util.Config; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; +import android.view.MenuItem.OnMenuItemClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; @@ -39,16 +41,18 @@ import android.widget.Toast; import java.util.ArrayList; +import com.android.camera.ImageManager.IImage; + public class MenuHelper { static private final String TAG = "MenuHelper"; - + static public final int GENERIC_ITEM = 1; static public final int IMAGE_SAVING_ITEM = 2; static public final int VIDEO_SAVING_ITEM = 3; static public final int IMAGE_MODE_ITEM = 4; static public final int VIDEO_MODE_ITEM = 5; static public final int MENU_ITEM_MAX = 5; - + static public final int INCLUDE_ALL = 0xFFFFFFFF; static public final int INCLUDE_VIEWPLAY_MENU = (1 << 0); static public final int INCLUDE_SHARE_MENU = (1 << 1); @@ -57,84 +61,52 @@ public class MenuHelper { static public final int INCLUDE_DELETE_MENU = (1 << 4); static public final int INCLUDE_ROTATE_MENU = (1 << 5); static public final int INCLUDE_DETAILS_MENU = (1 << 5); - + + static public final int MENU_SWITCH_CAMERA_MODE = 0; + static public final int MENU_CAPTURE_PICTURE = 1; + static public final int MENU_CAPTURE_VIDEO = 2; static public final int MENU_IMAGE_SHARE = 10; - static public final int MENU_IMAGE_SHARE_EMAIL = 11; - static public final int MENU_IMAGE_SHARE_MMS = 12; - static public final int MENU_IMAGE_SHARE_PICASA =13; static public final int MENU_IMAGE_SET = 14; static public final int MENU_IMAGE_SET_WALLPAPER = 15; static public final int MENU_IMAGE_SET_CONTACT = 16; static public final int MENU_IMAGE_SET_MYFAVE = 17; static public final int MENU_IMAGE_CROP = 18; static public final int MENU_IMAGE_ROTATE = 19; - static public final int MENU_IMAGE_ROTATE_LEFT = 20; + static public final int MENU_IMAGE_ROTATE_LEFT = 20; static public final int MENU_IMAGE_ROTATE_RIGHT = 21; static public final int MENU_IMAGE_TOSS = 22; static public final int MENU_VIDEO_PLAY = 23; static public final int MENU_VIDEO_SHARE = 24; - static public final int MENU_VIDEO_SHARE_MMS = 25; - static public final int MENU_VIDEO_SHARE_YOUTUBE = 26; static public final int MENU_VIDEO_TOSS = 27; - static public final int MENU_IMAGE_SHARE_PICASA_ALL =28; - + public interface MenuItemsResult { public void gettingReadyToOpen(Menu menu, ImageManager.IImage image); public void aboutToCall(MenuItem item, ImageManager.IImage image); } - + public interface MenuInvoker { public void run(MenuCallback r); } - + public interface MenuCallback { public void run(Uri uri, ImageManager.IImage image); } static MenuItemsResult addImageMenuItems( - Menu menu, + Menu menu, int inclusions, + final boolean isImage, final Activity activity, final Handler handler, final Runnable onDelete, final MenuInvoker onInvoke) { - final ArrayList<MenuItem> requiresWriteAccessItems = new ArrayList<MenuItem>(); - final ArrayList<MenuItem> requiresNoDrmAccessItems = new ArrayList<MenuItem>(); - if ((inclusions & INCLUDE_SHARE_MENU) != 0) { - if (Config.LOGV) - Log.v(TAG, ">>>>> add share"); - MenuItem item = menu.add(IMAGE_SAVING_ITEM, MENU_IMAGE_SHARE, 10, - R.string.camera_share).setOnMenuItemClickListener( - new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - onInvoke.run(new MenuCallback() { - public void run(Uri u, ImageManager.IImage image) { - if (image == null) - return; - - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_SEND); - intent.setType(image.getMimeType()); - intent.putExtra(Intent.EXTRA_STREAM, u); - try { - activity.startActivity(Intent.createChooser(intent, - activity.getText(R.string.sendImage))); - } catch (android.content.ActivityNotFoundException ex) { - Toast.makeText(activity, R.string.no_way_to_share_image, Toast.LENGTH_SHORT).show(); - } - } - }); - return true; - } - }); - item.setIcon(android.R.drawable.ic_menu_share); - requiresNoDrmAccessItems.add(item); - } + final ArrayList<MenuItem> requiresWriteAccessItems = new ArrayList<MenuItem>(); + final ArrayList<MenuItem> requiresNoDrmAccessItems = new ArrayList<MenuItem>(); - if ((inclusions & INCLUDE_ROTATE_MENU) != 0) { + if (isImage && ((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); - // Don't show the rotate submenu if the item at hand is read only + // Don't show the rotate submenu if the item at hand is read only // 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. @@ -158,7 +130,7 @@ public class MenuHelper { public void run(Uri u, ImageManager.IImage image) { if (image == null || image.isReadonly()) return; - + image.rotateImageBy(90); } }); @@ -167,21 +139,8 @@ public class MenuHelper { }).setAlphabeticShortcut('r')); } } - - if ((inclusions & INCLUDE_DELETE_MENU) != 0) { - MenuItem deleteItem = menu.add(IMAGE_SAVING_ITEM, MENU_IMAGE_TOSS, 70, R.string.camera_toss); - requiresWriteAccessItems.add(deleteItem); - deleteItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - deletePhoto(activity, onDelete); - return true; - } - }) - .setAlphabeticShortcut('d') - .setIcon(android.R.drawable.ic_menu_delete); - } - - if ((inclusions & INCLUDE_CROP_MENU) != 0) { + + if (isImage && ((inclusions & INCLUDE_CROP_MENU) != 0)) { MenuItem autoCrop = menu.add(IMAGE_SAVING_ITEM, MENU_IMAGE_CROP, 73, R.string.camera_crop).setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() { @@ -190,7 +149,7 @@ public class MenuHelper { public void run(Uri u, ImageManager.IImage image) { if (u == null) return; - + Intent cropIntent = new Intent(); cropIntent.setClass(activity, CropImage.class); cropIntent.setData(u); @@ -203,8 +162,8 @@ public class MenuHelper { autoCrop.setIcon(android.R.drawable.ic_menu_crop); requiresWriteAccessItems.add(autoCrop); } - - if ((inclusions & INCLUDE_SET_MENU) != 0) { + + if (isImage && ((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); @@ -214,7 +173,7 @@ public class MenuHelper { public void run(Uri u, ImageManager.IImage image) { if (u == null || image == null) return; - + if (Config.LOGV) Log.v(TAG, "in callback u is " + u + "; mime type is " + image.getMimeType()); Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); @@ -228,6 +187,56 @@ public class MenuHelper { }); } + if ((inclusions & INCLUDE_SHARE_MENU) != 0) { + if (Config.LOGV) + Log.v(TAG, ">>>>> add share"); + MenuItem item1 = menu.add(IMAGE_SAVING_ITEM, MENU_IMAGE_SHARE, 10, + R.string.camera_share).setOnMenuItemClickListener( + new MenuItem.OnMenuItemClickListener() { + public boolean onMenuItemClick(MenuItem item) { + onInvoke.run(new MenuCallback() { + public void run(Uri u, ImageManager.IImage image) { + if (image == null) + return; + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_SEND); + String mimeType = image.getMimeType(); + intent.setType(mimeType); + intent.putExtra(Intent.EXTRA_STREAM, u); + boolean isImage = ImageManager.isImageMimeType(mimeType); + try { + activity.startActivity(Intent.createChooser(intent, + activity.getText( + isImage ? R.string.sendImage : R.string.sendVideo))); + } catch (android.content.ActivityNotFoundException ex) { + Toast.makeText(activity, + isImage ? R.string.no_way_to_share_image + : R.string.no_way_to_share_video, + Toast.LENGTH_SHORT).show(); + } + } + }); + return true; + } + }); + item1.setIcon(android.R.drawable.ic_menu_share); + MenuItem item = item1; + requiresNoDrmAccessItems.add(item); + } + + if ((inclusions & INCLUDE_DELETE_MENU) != 0) { + MenuItem deleteItem = menu.add(IMAGE_SAVING_ITEM, MENU_IMAGE_TOSS, 70, R.string.camera_toss); + requiresWriteAccessItems.add(deleteItem); + deleteItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + public boolean onMenuItemClick(MenuItem item) { + deleteImageImpl(activity, onDelete, isImage); + return true; + } + }) + .setAlphabeticShortcut('d') + .setIcon(android.R.drawable.ic_menu_delete); + } + if ((inclusions & INCLUDE_DETAILS_MENU) != 0) { MenuItem detailsMenu = menu.add(0, 0, 80, R.string.details).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { @@ -237,9 +246,9 @@ public class MenuHelper { return; AlertDialog.Builder builder = new AlertDialog.Builder(activity); - + final View d = View.inflate(activity, R.layout.detailsview, null); - + ImageView imageView = (ImageView) d.findViewById(R.id.details_thumbnail_image); imageView.setImageBitmap(image.miniThumbBitmap()); @@ -250,8 +259,8 @@ public class MenuHelper { String lengthString = ""; try { long length = data.available(); - lengthString = - android.content.Formatter.formatFileSize(activity, length); + lengthString = + android.text.format.Formatter.formatFileSize(activity, length); data.close(); } catch (java.io.IOException ex) { @@ -260,9 +269,14 @@ public class MenuHelper { ((TextView)d.findViewById(R.id.details_attrname_1)).setText(R.string.details_file_size); ((TextView)d.findViewById(R.id.details_attrvalu_1)).setText(lengthString); - String dimensionsString = String.valueOf(image.getWidth() + " X " + image.getHeight()); - ((TextView)d.findViewById(R.id.details_attrname_2)).setText(R.string.details_image_resolution); - ((TextView)d.findViewById(R.id.details_attrvalu_2)).setText(dimensionsString); + if (isImage) { + String dimensionsString = String.valueOf(image.getWidth() + " X " + image.getHeight()); + ((TextView)d.findViewById(R.id.details_attrname_2)).setText(R.string.details_image_resolution); + ((TextView)d.findViewById(R.id.details_attrvalu_2)).setText(dimensionsString); + } else { + d.findViewById(R.id.details_attrname_2).setVisibility(View.GONE); + d.findViewById(R.id.details_attrvalu_2).setVisibility(View.GONE); + } String dateString = ""; long dateTaken = image.getDateTaken(); @@ -270,19 +284,19 @@ public class MenuHelper { java.util.Date date = new java.util.Date(image.getDateTaken()); java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat(); dateString = dateFormat.format(date); - + ((TextView)d.findViewById(R.id.details_attrname_3)).setText(R.string.details_date_taken); ((TextView)d.findViewById(R.id.details_attrvalu_3)).setText(dateString); } else { d.findViewById(R.id.details_daterow).setVisibility(View.GONE); } - + builder.setIcon(android.R.drawable.ic_dialog_info) .setTitle(R.string.details_panel_title) .setView(d) .show(); - + } }); return true; @@ -290,7 +304,23 @@ public class MenuHelper { }); detailsMenu.setIcon(R.drawable.ic_menu_view_details); } - + + if ((!isImage) && ((inclusions & INCLUDE_VIEWPLAY_MENU) != 0)) { + menu.add(VIDEO_SAVING_ITEM, MENU_VIDEO_PLAY, 0, R.string.video_play) + .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + public boolean onMenuItemClick(MenuItem item) { + onInvoke.run(new MenuCallback() { + public void run(Uri uri, IImage image) { + Intent intent = new Intent(Intent.ACTION_VIEW, + image.fullSizeImageUri()); + activity.startActivity(intent); + }}); + return true; + } + }); + } + + return new MenuItemsResult() { public void gettingReadyToOpen(Menu menu, ImageManager.IImage image) { // protect against null here. this isn't strictly speaking required @@ -321,94 +351,25 @@ public class MenuHelper { }; } - static MenuItemsResult addVideoMenuItems( - Menu menu, - int inclusions, - final Activity activity, - final Handler handler, - final SelectedImageGetter mGetter, - final Runnable onDelete, - final Runnable preWork, - final Runnable postWork) { - - if ((inclusions & INCLUDE_VIEWPLAY_MENU) != 0) { - menu.add(VIDEO_SAVING_ITEM, MENU_VIDEO_PLAY, 0, R.string.video_play).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - if (preWork != null) - preWork.run(); - - Intent intent = new Intent(Intent.ACTION_VIEW, mGetter.getCurrentImageUri()); - activity.startActivity(intent); - - // don't do the postWork since we're launching another activity - return true; - } - }); - } - - if ((inclusions & INCLUDE_SHARE_MENU) != 0) { - MenuItem item = menu.add(VIDEO_SAVING_ITEM, 0, 0, R.string.camera_share).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - Uri u = mGetter.getCurrentImageUri(); - if (u == null) - return true; - - if (preWork != null) - preWork.run(); - - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_SEND); - intent.setType(mGetter.getCurrentImage().getMimeType()); - intent.putExtra(Intent.EXTRA_STREAM, u); - try { - activity.startActivity(Intent.createChooser(intent, - activity.getText(R.string.sendVideo))); - } catch (android.content.ActivityNotFoundException ex) { - Toast.makeText(activity, R.string.no_way_to_share_video, Toast.LENGTH_SHORT).show(); - - if (postWork != null) - postWork.run(); - } - return true; - } - }); - item.setIcon(android.R.drawable.ic_menu_share); - } - - if ((inclusions & INCLUDE_DELETE_MENU) != 0) { - MenuItem deleteMenu = menu.add(VIDEO_SAVING_ITEM, MENU_VIDEO_TOSS, 0, R.string.camera_toss).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - if (preWork != null) - preWork.run(); - - activity.getContentResolver().delete(mGetter.getCurrentImageUri(), null, null); - - if (onDelete != null) - onDelete.run(); - - if (postWork != null) - postWork.run(); - - return true; - } - }); - deleteMenu.setIcon(android.R.drawable.ic_menu_delete); - deleteMenu.setAlphabeticShortcut('d'); - } + static void deletePhoto(Activity activity, Runnable onDelete) { + deleteImageImpl(activity, onDelete, true); + } - return null; + static void deleteImage(Activity activity, Runnable onDelete, IImage image) { + deleteImageImpl(activity, onDelete, ImageManager.isImage(image)); } - - static void deletePhoto(Activity activity, final Runnable onDelete) { + + private static void deleteImageImpl(Activity activity, final Runnable onDelete, boolean isPhoto) { boolean confirm = android.preference.PreferenceManager.getDefaultSharedPreferences(activity).getBoolean("pref_gallery_confirm_delete_key", true); if (!confirm) { if (onDelete != null) onDelete.run(); } else { android.app.AlertDialog.Builder b = new android.app.AlertDialog.Builder(activity); - b.setIcon(R.drawable.delete_image); + b.setIcon(android.R.drawable.ic_dialog_alert); b.setTitle(R.string.confirm_delete_title); - b.setMessage(R.string.confirm_delete_message); + b.setMessage(isPhoto? R.string.confirm_delete_message + : R.string.confirm_delete_video_message); b.setPositiveButton(android.R.string.ok, new android.content.DialogInterface.OnClickListener() { public void onClick(android.content.DialogInterface v, int x) { if (onDelete != null) @@ -423,7 +384,62 @@ public class MenuHelper { b.create().show(); } } - + + static void addSwitchModeMenuItem(Menu menu, final Activity activity, + final boolean switchToVideo) { + int group = switchToVideo ? MenuHelper.IMAGE_MODE_ITEM : MenuHelper.VIDEO_MODE_ITEM; + int labelId = switchToVideo ? R.string.switch_to_video_lable + : R.string.switch_to_camera_lable; + int iconId = switchToVideo ? R.drawable.ic_menu_camera_video_view + : R.drawable.ic_menu_camera; + MenuItem item = menu.add(group, MENU_SWITCH_CAMERA_MODE, 0, + labelId).setOnMenuItemClickListener( + new OnMenuItemClickListener() { + public boolean onMenuItemClick(MenuItem item) { + String action = switchToVideo ? MediaStore.INTENT_ACTION_VIDEO_CAMERA + : MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA; + Intent intent = new Intent(action); + intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); + activity.finish(); + activity.startActivity(intent); + return true; + } + }); + item.setIcon(iconId); + } + + static void addCaptureMenuItems(Menu menu, final Activity activity) { + + menu.add(0, MENU_CAPTURE_PICTURE, 1, R.string.capture_picture) + .setOnMenuItemClickListener( + new MenuItem.OnMenuItemClickListener() { + public boolean onMenuItemClick(MenuItem item) { + Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA); + try { + activity.startActivity(intent); + } catch (android.content.ActivityNotFoundException e) { + // Ignore exception + } + return true; + } + }) + .setIcon(R.drawable.ic_menu_camera); + + menu.add(0, MENU_CAPTURE_VIDEO, 2, R.string.capture_video) + .setOnMenuItemClickListener( + new MenuItem.OnMenuItemClickListener() { + public boolean onMenuItemClick(MenuItem item) { + Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA); + try { + activity.startActivity(intent); + } catch (android.content.ActivityNotFoundException e) { + // Ignore exception + } + return true; + } + }) + .setIcon(R.drawable.ic_menu_camera_video_view); + } static MenuItem addFlipOrientation(Menu menu, final Activity activity, final SharedPreferences prefs) { // position 41 after rotate return menu @@ -457,65 +473,5 @@ public class MenuHelper { ? android.content.pm.ActivityInfo.SCREEN_ORIENTATION_USER : req); } - - static public class YouTubeUploadInfoDialog extends Dialog { - private CheckBox mPrivate; - private ImageManager.VideoObject mVideo; - private EditText mTitle; - private EditText mTags; - private EditText mDescription; - private Spinner mCategory; - private Button mUpload; - - public YouTubeUploadInfoDialog(final Activity activity, - final ArrayList<String> categoriesShort, - final ArrayList<String> categoriesLong, - ImageManager.VideoObject video, - final Runnable postRunnable) { - super(activity, android.R.style.Theme_Dialog); - mVideo = video; - setContentView(R.layout.youtube_upload_info); - setTitle(R.string.upload_dialog_title); - - mPrivate = (CheckBox)findViewById(R.id.public_or_private); - if (!mPrivate.isChecked()) { - mPrivate.setChecked(true); - } - - mTitle = (EditText)findViewById(R.id.video_title); - mTags = (EditText)findViewById(R.id.video_tags); - mDescription = (EditText)findViewById(R.id.video_description); - mCategory = (Spinner)findViewById(R.id.category); - - if (Config.LOGV) - Log.v(TAG, "setting categories in adapter"); - android.widget.ArrayAdapter<String> categories = new android.widget.ArrayAdapter<String>(activity, android.R.layout.simple_spinner_item, categoriesLong); - categories.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - mCategory.setAdapter(categories); - - if (mVideo != null) { - mTitle.setText(mVideo.getTitle()); - mTags.setText(mVideo.getTags()); - mDescription.setText(mVideo.getDescription()); - } - - mUpload = (Button)findViewById(R.id.do_upload); - mUpload.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) - { - if (mVideo != null) { - mVideo.setName(mTitle.getText().toString()); - mVideo.setDescription(mDescription.getText().toString()); - mVideo.setTags(mTags.getText().toString()); - } - - YouTubeUploadInfoDialog.this.dismiss(); - UploadAction.uploadImage(activity, mVideo); - if (postRunnable != null) - postRunnable.run(); - } - }); - } - } } |