diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:49 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:49 -0800 |
commit | becfb351a5bc43050128f44eb1bcfbcc0c6dcb7a (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /src/com/android/camera/MenuHelper.java | |
parent | a6aa03f5bd2270bcc52ba1899c22d881955e8e7e (diff) | |
download | LegacyCamera-becfb351a5bc43050128f44eb1bcfbcc0c6dcb7a.zip LegacyCamera-becfb351a5bc43050128f44eb1bcfbcc0c6dcb7a.tar.gz LegacyCamera-becfb351a5bc43050128f44eb1bcfbcc0c6dcb7a.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'src/com/android/camera/MenuHelper.java')
-rw-r--r-- | src/com/android/camera/MenuHelper.java | 718 |
1 files changed, 0 insertions, 718 deletions
diff --git a/src/com/android/camera/MenuHelper.java b/src/com/android/camera/MenuHelper.java deleted file mode 100644 index ffb99ef..0000000 --- a/src/com/android/camera/MenuHelper.java +++ /dev/null @@ -1,718 +0,0 @@ -/* - * Copyright (C) 2008 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 java.io.Closeable; -import java.util.ArrayList; - -import android.app.Activity; -import android.app.AlertDialog; -import android.content.ActivityNotFoundException; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.res.Configuration; -import android.media.MediaMetadataRetriever; -import android.net.Uri; -import android.os.Environment; -import android.os.Handler; -import android.os.StatFs; -import android.provider.MediaStore; -import android.provider.MediaStore.Images; -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.ImageView; -import android.widget.TextView; -import android.widget.Toast; - -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); - static public final int INCLUDE_SET_MENU = (1 << 2); - static public final int INCLUDE_CROP_MENU = (1 << 3); - 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_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_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_TOSS = 27; - - public static final int NO_STORAGE_ERROR = -1; - public static final int CANNOT_STAT_ERROR = -2; - - /** Activity result code used to report crop results. - */ - public static final int RESULT_COMMON_MENU_CROP = 490; - - 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); - } - - private static void closeSilently(Closeable target) { - try { - if (target != null) target.close(); - } catch (Throwable t) { - // ignore all exceptions, that's what silently means - } - } - - public static long getImageFileSize(ImageManager.IImage image) { - java.io.InputStream data = image.fullSizeImageData(); - try { - return data.available(); - } catch (java.io.IOException ex) { - return -1; - } finally { - closeSilently(data); - } - } - - static MenuItemsResult addImageMenuItems( - 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 (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 - // 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()); - if (rotateSubmenu != null) { - requiresWriteAccessItems.add(rotateSubmenu.add(0, MENU_IMAGE_ROTATE_LEFT, 50, R.string.rotate_left).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - onInvoke.run(new MenuCallback() { - public void run(Uri u, ImageManager.IImage image) { - if (image == null || image.isReadonly()) - return; - image.rotateImageBy(-90); - } - }); - return true; - } - }).setAlphabeticShortcut('l')); - requiresWriteAccessItems.add(rotateSubmenu.add(0, MENU_IMAGE_ROTATE_RIGHT, 60, R.string.rotate_right).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - onInvoke.run(new MenuCallback() { - public void run(Uri u, ImageManager.IImage image) { - if (image == null || image.isReadonly()) - return; - - image.rotateImageBy(90); - } - }); - return true; - } - }).setAlphabeticShortcut('r')); - } - } - - 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() { - public boolean onMenuItemClick(MenuItem item) { - onInvoke.run(new MenuCallback() { - public void run(Uri u, ImageManager.IImage image) { - if (u == null) - return; - - Intent cropIntent = new Intent(); - cropIntent.setClass(activity, CropImage.class); - cropIntent.setData(u); - activity.startActivityForResult(cropIntent, RESULT_COMMON_MENU_CROP); - } - }); - return true; - } - }); - autoCrop.setIcon(android.R.drawable.ic_menu_crop); - requiresWriteAccessItems.add(autoCrop); - } - - 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); - - setMenu.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - onInvoke.run(new MenuCallback() { - 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); - intent.setDataAndType(u, image.getMimeType()); - intent.putExtra("mimeType", image.getMimeType()); - activity.startActivity(Intent.createChooser(intent, activity.getText(R.string.setImage))); - } - }); - return true; - } - }); - } - - 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) { - onInvoke.run(new MenuCallback() { - public void run(Uri u, ImageManager.IImage image) { - if (image == null) - 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()); - - TextView textView = (TextView) d.findViewById(R.id.details_image_title); - textView.setText(image.getDisplayName()); - - long length = getImageFileSize(image); - String lengthString = lengthString = length < 0 ? "" - : android.text.format.Formatter.formatFileSize(activity, length); - ((TextView)d.findViewById(R.id.details_file_size_value)) - .setText(lengthString); - - int dimensionWidth = 0; - int dimensionHeight = 0; - if (isImage) { - dimensionWidth = image.getWidth(); - dimensionHeight = image.getHeight(); - d.findViewById(R.id.details_duration_row).setVisibility(View.GONE); - d.findViewById(R.id.details_frame_rate_row).setVisibility(View.GONE); - d.findViewById(R.id.details_bit_rate_row).setVisibility(View.GONE); - d.findViewById(R.id.details_format_row).setVisibility(View.GONE); - d.findViewById(R.id.details_codec_row).setVisibility(View.GONE); - } else { - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - try { - retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY); - retriever.setDataSource(image.getDataPath()); - try { - dimensionWidth = Integer.parseInt( - retriever.extractMetadata( - MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)); - dimensionHeight = Integer.parseInt( - retriever.extractMetadata( - MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)); - } catch (NumberFormatException e) { - dimensionWidth = 0; - dimensionHeight = 0; - } - - try { - int durationMs = Integer.parseInt(retriever.extractMetadata( - MediaMetadataRetriever.METADATA_KEY_DURATION)); - String durationValue = formatDuration( - activity, durationMs); - ((TextView)d.findViewById(R.id.details_duration_value)) - .setText(durationValue); - } catch (NumberFormatException e) { - d.findViewById(R.id.details_frame_rate_row) - .setVisibility(View.GONE); - } - - try { - String frame_rate = String.format( - activity.getString(R.string.details_fps), - Integer.parseInt( - retriever.extractMetadata( - MediaMetadataRetriever.METADATA_KEY_FRAME_RATE))); - ((TextView)d.findViewById(R.id.details_frame_rate_value)) - .setText(frame_rate); - } catch (NumberFormatException e) { - d.findViewById(R.id.details_frame_rate_row) - .setVisibility(View.GONE); - } - - try { - long bitRate = Long.parseLong(retriever.extractMetadata( - MediaMetadataRetriever.METADATA_KEY_BIT_RATE)); - String bps; - if (bitRate < 1000000) { - bps = String.format( - activity.getString(R.string.details_kbps), - bitRate / 1000); - } else { - bps = String.format( - activity.getString(R.string.details_mbps), - ((double) bitRate) / 1000000.0); - } - ((TextView)d.findViewById(R.id.details_bit_rate_value)) - .setText(bps); - } catch (NumberFormatException e) { - d.findViewById(R.id.details_bit_rate_row) - .setVisibility(View.GONE); - } - - String format = retriever.extractMetadata( - MediaMetadataRetriever.METADATA_KEY_VIDEO_FORMAT); - ((TextView)d.findViewById(R.id.details_format_value)) - .setText(format); - - String codec = retriever.extractMetadata( - MediaMetadataRetriever.METADATA_KEY_CODEC); - - if (codec == null) { - d.findViewById(R.id.details_codec_row). - setVisibility(View.GONE); - } else { - ((TextView)d.findViewById(R.id.details_codec_value)) - .setText(codec); - } - } catch(RuntimeException ex) { - // Assume this is a corrupt video file. - } finally { - try { - retriever.release(); - } catch (RuntimeException ex) { - // Ignore failures while cleaning up. - } - } - } - - String dimensionsString = String.format( - activity.getString(R.string.details_dimension_x), - dimensionWidth, dimensionHeight); - ((TextView)d.findViewById(R.id.details_resolution_value)) - .setText(dimensionsString); - - String dateString = ""; - long dateTaken = image.getDateTaken(); - if (dateTaken != 0) { - 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_date_taken_value)) - .setText(dateString); - } else { - d.findViewById(R.id.details_date_taken_row) - .setVisibility(View.GONE); - } - - builder.setNeutralButton(R.string.details_ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - - builder.setIcon(android.R.drawable.ic_dialog_info) - .setTitle(R.string.details_panel_title) - .setView(d) - .show(); - - } - }); - return true; - } - }); - 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 - // but if a client app isn't handling sdcard removal properly it - // could happen - if (image == null) { - return; - } - boolean readOnly = image.isReadonly(); - boolean isDrm = image.isDrm(); - if (Config.LOGV) - Log.v(TAG, "readOnly: " + readOnly + "; drm: " + isDrm); - for (MenuItem item: requiresWriteAccessItems) { - if (Config.LOGV) - Log.v(TAG, "item is " + item.toString()); - item.setVisible(!readOnly); - item.setEnabled(!readOnly); - } - for (MenuItem item: requiresNoDrmAccessItems) { - if (Config.LOGV) - Log.v(TAG, "item is " + item.toString()); - item.setVisible(!isDrm); - item.setEnabled(!isDrm); - } - } - public void aboutToCall(MenuItem menu, ImageManager.IImage image) { - } - }; - } - - static void deletePhoto(Activity activity, Runnable onDelete) { - deleteImageImpl(activity, onDelete, true); - } - - static void deleteImage(Activity activity, Runnable onDelete, IImage image) { - if (image != null) { - deleteImageImpl(activity, onDelete, ImageManager.isImage(image)); - } - } - - 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 { - displayDeleteDialog(activity, onDelete, isPhoto); - } - } - - public static void displayDeleteDialog(Activity activity, - final Runnable onDelete, boolean isPhoto) { - android.app.AlertDialog.Builder b = new android.app.AlertDialog.Builder(activity); - b.setIcon(android.R.drawable.ic_dialog_alert); - b.setTitle(R.string.confirm_delete_title); - 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) - onDelete.run(); - } - }); - b.setNegativeButton(android.R.string.cancel, new android.content.DialogInterface.OnClickListener() { - public void onClick(android.content.DialogInterface v, int x) { - - } - }); - 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 - : android.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 gotoStillImageCapture(Activity activity) { - Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - try { - activity.startActivity(intent); - } catch (ActivityNotFoundException e) { - Log.e(TAG, "Could not start still image capture activity", e); - } - } - - static void gotoCameraImageGallery(Activity activity) { - gotoGallery(activity, R.string.gallery_camera_bucket_name, ImageManager.INCLUDE_IMAGES); - } - - static void gotoCameraVideoGallery(Activity activity) { - gotoGallery(activity, R.string.gallery_camera_videos_bucket_name, - ImageManager.INCLUDE_VIDEOS); - } - - static private void gotoGallery(Activity activity, int windowTitleId, int mediaTypes) { - Uri target = Images.Media.INTERNAL_CONTENT_URI.buildUpon().appendQueryParameter("bucketId", - ImageManager.CAMERA_IMAGE_BUCKET_ID).build(); - Intent intent = new Intent(Intent.ACTION_VIEW, target); - intent.putExtra("windowTitle", activity.getString(windowTitleId)); - intent.putExtra("mediaTypes", mediaTypes); - // Request unspecified so that we match the current camera orientation rather than - // matching the "flip orientation" preference. - // Disabled because people don't care for it. Also it's - // not as compelling now that we have implemented have quick orientation flipping. - // intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, - // android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); - try { - activity.startActivity(intent); - } catch (ActivityNotFoundException e) { - Log.e(TAG, "Could not start gallery activity", e); - } - } - - 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(android.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 - // D - return menu - .add(Menu.CATEGORY_SECONDARY, 304, 41, R.string.flip_orientation) - .setOnMenuItemClickListener( - new MenuItem.OnMenuItemClickListener() { - public boolean onMenuItemClick(MenuItem item) { - // Check what our actual orientation is - int current = activity.getResources().getConfiguration().orientation; - int newOrientation = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; - if (current == Configuration.ORIENTATION_LANDSCAPE) { - newOrientation = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; - } - SharedPreferences.Editor editor = prefs.edit(); - editor.putInt("nuorientation", newOrientation); - editor.commit(); - requestOrientation(activity, prefs, true); - return true; - } - }) - .setIcon(android.R.drawable.ic_menu_always_landscape_portrait); - } - - static void requestOrientation(Activity activity, SharedPreferences prefs) { - requestOrientation(activity, prefs, false); - } - - static private void requestOrientation(Activity activity, SharedPreferences prefs, - boolean ignoreIntentExtra) { - int req = prefs.getInt("nuorientation", - android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); - // A little trick: use USER instead of UNSPECIFIED, so we ignore the - // orientation set by the activity below. It may have forced a landscape - // orientation, which the user has now cleared here. - if (req == android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) { - req = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_USER; - } - if (! ignoreIntentExtra) { - Intent intent = activity.getIntent(); - req = intent.getIntExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, req); - } - activity.setRequestedOrientation(req); - } - - static void setFlipOrientationEnabled(Activity activity, MenuItem flipItem) { - int keyboard = activity.getResources().getConfiguration().hardKeyboardHidden; - flipItem.setEnabled(keyboard != android.content.res.Configuration.HARDKEYBOARDHIDDEN_NO); - } - - public static String formatDuration(final Activity activity, int durationMs) { - int duration = durationMs / 1000; - int h = duration / 3600; - int m = (duration - h * 3600) / 60; - int s = duration - (h * 3600 + m * 60); - String durationValue; - if (h == 0) { - durationValue = String.format( - activity.getString(R.string.details_ms), m, s); - } else { - durationValue = String.format( - activity.getString(R.string.details_hms), h, m, s); - } - return durationValue; - } - - public static void showStorageToast(Activity activity) { - showStorageToast(activity, calculatePicturesRemaining()); - } - - public static void showStorageToast(Activity activity, int remaining) { - String noStorageText = null; - - if (remaining == MenuHelper.NO_STORAGE_ERROR) { - String state = Environment.getExternalStorageState(); - if (state == Environment.MEDIA_CHECKING) { - noStorageText = activity.getString(R.string.preparing_sd); - } else { - noStorageText = activity.getString(R.string.no_storage); - } - } else if (remaining < 1) { - noStorageText = activity.getString(R.string.not_enough_space); - } - - if (noStorageText != null) { - Toast.makeText(activity, noStorageText, 5000).show(); - } - } - - public static int calculatePicturesRemaining() { - try { - if (!ImageManager.hasStorage()) { - return NO_STORAGE_ERROR; - } else { - String storageDirectory = Environment.getExternalStorageDirectory().toString(); - StatFs stat = new StatFs(storageDirectory); - float remaining = ((float)stat.getAvailableBlocks() * (float)stat.getBlockSize()) / 400000F; - return (int)remaining; - } - } catch (Exception ex) { - // if we can't stat the filesystem then we don't know how many - // pictures are remaining. it might be zero but just leave it - // blank since we really don't know. - return CANNOT_STAT_ERROR; - } - } -} - |