diff options
author | Ray Chen <raychen@google.com> | 2010-02-05 10:53:40 +0800 |
---|---|---|
committer | Ray Chen <raychen@google.com> | 2010-02-08 15:42:15 +0800 |
commit | 550f04e9cf356b5be7436447d53172895c8407b8 (patch) | |
tree | 26f3bc9146ee40fee6b9cf088669d22eecbbd8d0 /src | |
parent | e978fed2db93d98fce576dc873afd53e6469b595 (diff) | |
download | LegacyCamera-550f04e9cf356b5be7436447d53172895c8407b8.zip LegacyCamera-550f04e9cf356b5be7436447d53172895c8407b8.tar.gz LegacyCamera-550f04e9cf356b5be7436447d53172895c8407b8.tar.bz2 |
Fix issue 2340332 Inconsistent UI between review mode in Camera app and album view in Gallery app
http://b/2340332
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/camera/Camera.java | 9 | ||||
-rw-r--r-- | src/com/android/camera/ReviewImage.java | 837 | ||||
-rw-r--r-- | src/com/android/camera/VideoCamera.java | 7 |
3 files changed, 2 insertions, 851 deletions
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java index b71165b..0ef423a 100644 --- a/src/com/android/camera/Camera.java +++ b/src/com/android/camera/Camera.java @@ -1961,14 +1961,7 @@ public class Camera extends NoSearchActivity implements View.OnClickListener, private void viewLastImage() { if (mThumbController.isUriValid()) { - Uri targetUri = mThumbController.getUri(); - targetUri = targetUri.buildUpon().appendQueryParameter( - "bucketId", ImageManager.CAMERA_IMAGE_BUCKET_ID).build(); - Intent intent = new Intent(this, ReviewImage.class); - intent.setData(targetUri); - intent.putExtra(MediaStore.EXTRA_FULL_SCREEN, true); - intent.putExtra(MediaStore.EXTRA_SHOW_ACTION_ICONS, true); - intent.putExtra("com.android.camera.ReviewMode", true); + Intent intent = new Intent(Intent.ACTION_VIEW, mThumbController.getUri()); try { startActivity(intent); } catch (ActivityNotFoundException ex) { diff --git a/src/com/android/camera/ReviewImage.java b/src/com/android/camera/ReviewImage.java deleted file mode 100644 index 73c3096..0000000 --- a/src/com/android/camera/ReviewImage.java +++ /dev/null @@ -1,837 +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 android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Bundle; -import android.provider.MediaStore; -import android.util.AttributeSet; -import android.util.Log; -import android.view.GestureDetector; -import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.Window; -import android.view.WindowManager; -import android.view.View.OnTouchListener; -import android.view.animation.AlphaAnimation; -import android.view.animation.Animation; -import android.widget.Toast; -import android.widget.ZoomButtonsController; - -import com.android.camera.gallery.IImage; -import com.android.camera.gallery.IImageList; -import com.android.camera.gallery.VideoObject; - -/** - * An activity displays a full picture and can navigate in a specific image - * list. - * - * <p>The user view one image at a time, and can click "previous" and "next" - * button to see the previous or next image. - */ -public class ReviewImage extends NoSearchActivity - implements View.OnClickListener { - private static final String STATE_URI = "uri"; - private static final String TAG = "ReviewImage"; - private static final double ASPECT_RATIO = 4.0 / 3.0; - - private ImageGetter mGetter; - private Uri mSavedUri; - boolean mPaused = true; - private boolean mShowControls = true; - - // Choices for what adjacents to load. - private static final int[] sOrderAdjacents = new int[] {0, 1, -1}; - - final GetterHandler mHandler = new GetterHandler(); - - private boolean mFullScreenInNormalMode; - - int mCurrentPosition = 0; - - private View mRootView; - private View mControlBar; - private View mNextImageView; - private View mPrevImageView; - private final Animation mHideNextImageViewAnimation = - new AlphaAnimation(1F, 0F); - private final Animation mHidePrevImageViewAnimation = - new AlphaAnimation(1F, 0F); - private final Animation mShowNextImageViewAnimation = - new AlphaAnimation(0F, 1F); - private final Animation mShowPrevImageViewAnimation = - new AlphaAnimation(0F, 1F); - - public static final String KEY_IMAGE_LIST = "image_list"; - private static final String STATE_SHOW_CONTROLS = "show_controls"; - - ImageManager.ImageListParam mParam; - IImageList mAllImages; - - private final ImageViewTouchBase [] mSlideShowImageViews = - new ImageViewTouchBase[2]; - - GestureDetector mGestureDetector; - private ZoomButtonsController mZoomButtonsController; - - // The image view displayed for normal mode. - private ImageViewTouch2 mImageView; - // This is the cache for thumbnail bitmaps. - private BitmapCache mCache; - private MenuHelper.MenuItemsResult mImageMenuRunnable; - private final Runnable mDismissOnScreenControlRunner = new Runnable() { - public void run() { - hideOnScreenControls(); - } - }; - - private void updateNextPrevControls() { - boolean showPrev = mCurrentPosition > 0; - boolean showNext = mCurrentPosition < mAllImages.getCount() - 1; - - boolean prevIsVisible = mPrevImageView.getVisibility() == View.VISIBLE; - boolean nextIsVisible = mNextImageView.getVisibility() == View.VISIBLE; - - if (showPrev && !prevIsVisible) { - Animation a = mShowPrevImageViewAnimation; - a.setDuration(500); - mPrevImageView.startAnimation(a); - mPrevImageView.setVisibility(View.VISIBLE); - } else if (!showPrev && prevIsVisible) { - Animation a = mHidePrevImageViewAnimation; - a.setDuration(500); - mPrevImageView.startAnimation(a); - mPrevImageView.setVisibility(View.GONE); - } - - if (showNext && !nextIsVisible) { - Animation a = mShowNextImageViewAnimation; - a.setDuration(500); - mNextImageView.startAnimation(a); - mNextImageView.setVisibility(View.VISIBLE); - } else if (!showNext && nextIsVisible) { - Animation a = mHideNextImageViewAnimation; - a.setDuration(500); - mNextImageView.startAnimation(a); - mNextImageView.setVisibility(View.GONE); - } - } - - private void showOnScreenControls() { - - // If the view has not been attached to the window yet, the - // zoomButtonControls will not able to show up. So delay it until the - // view has attached to window. - if (mRootView.getWindowToken() == null) { - mHandler.postGetterCallback(new Runnable() { - public void run() { - showOnScreenControls(); - } - }); - return; - } - - // we may need to update the next/prev button due to index changing - updateNextPrevControls(); - - if (ImageManager.isImage(mAllImages.getImageAt(mCurrentPosition))) { - updateZoomButtonsEnabled(); - mZoomButtonsController.setVisible(true); - } else { - mZoomButtonsController.setVisible(false); - } - } - - private void hideOnScreenControls() { - if (mNextImageView.getVisibility() == View.VISIBLE) { - Animation a = mHideNextImageViewAnimation; - a.setDuration(500); - mNextImageView.startAnimation(a); - mNextImageView.setVisibility(View.INVISIBLE); - } - - if (mPrevImageView.getVisibility() == View.VISIBLE) { - Animation a = mHidePrevImageViewAnimation; - a.setDuration(500); - mPrevImageView.startAnimation(a); - mPrevImageView.setVisibility(View.INVISIBLE); - } - - mZoomButtonsController.setVisible(false); - } - - private void scheduleDismissOnScreenControls() { - mHandler.removeCallbacks(mDismissOnScreenControlRunner); - mHandler.postDelayed(mDismissOnScreenControlRunner, 2000); - } - - @Override - public boolean dispatchTouchEvent(MotionEvent m) { - if (mZoomButtonsController.isVisible()) { - scheduleDismissOnScreenControls(); - } - return super.dispatchTouchEvent(m); - } - - private void updateZoomButtonsEnabled() { - ImageViewTouch2 imageView = mImageView; - float scale = imageView.getScale(); - mZoomButtonsController.setZoomInEnabled(scale < imageView.mMaxZoom); - mZoomButtonsController.setZoomOutEnabled(scale > 1); - } - - @Override - protected void onDestroy() { - // This is necessary to make the ZoomButtonsController unregister - // its configuration change receiver. - if (mZoomButtonsController != null) { - mZoomButtonsController.setVisible(false); - } - - super.onDestroy(); - } - - private void setupOnScreenControls(View rootView, View ownerView) { - mNextImageView = rootView.findViewById(R.id.next_image); - mPrevImageView = rootView.findViewById(R.id.prev_image); - - mNextImageView.setOnClickListener(this); - mPrevImageView.setOnClickListener(this); - - setupZoomButtonController(ownerView); - setupOnTouchListeners(rootView); - } - - private void setupZoomButtonController(final View ownerView) { - mZoomButtonsController = new ZoomButtonsController(ownerView); - mZoomButtonsController.setAutoDismissed(false); - mZoomButtonsController.setZoomSpeed(100); - mZoomButtonsController.setOnZoomListener( - new ZoomButtonsController.OnZoomListener() { - public void onVisibilityChanged(boolean visible) { - if (visible) { - updateZoomButtonsEnabled(); - } - } - - public void onZoom(boolean zoomIn) { - if (zoomIn) { - mImageView.zoomIn(); - } else { - mImageView.zoomOut(); - } - mZoomButtonsController.setVisible(true); - updateZoomButtonsEnabled(); - } - }); - } - - private void setupOnTouchListeners(View rootView) { - mGestureDetector = new GestureDetector(this, new MyGestureListener()); - - // If the user touches anywhere on the panel (including the - // next/prev button). We show the on-screen controls. In addition - // to that, if the touch is not on the prev/next button, we - // pass the event to the gesture detector to detect double tap. - final OnTouchListener buttonListener = new OnTouchListener() { - public boolean onTouch(View v, MotionEvent event) { - scheduleDismissOnScreenControls(); - return false; - } - }; - - OnTouchListener rootListener = new OnTouchListener() { - public boolean onTouch(View v, MotionEvent event) { - buttonListener.onTouch(v, event); - mGestureDetector.onTouchEvent(event); - - // We do not use the return value of - // mGestureDetector.onTouchEvent because we will not receive - // the "up" event if we return false for the "down" event. - return true; - } - }; - - mNextImageView.setOnTouchListener(buttonListener); - mPrevImageView.setOnTouchListener(buttonListener); - rootView.setOnTouchListener(rootListener); - } - - private class MyGestureListener extends - GestureDetector.SimpleOnGestureListener { - - @Override - public boolean onScroll(MotionEvent e1, MotionEvent e2, - float distanceX, float distanceY) { - if (mPaused) return false; - ImageViewTouch2 imageView = mImageView; - if (imageView.getScale() > 1F) { - imageView.postTranslateCenter(-distanceX, -distanceY); - } - return true; - } - - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - if (mPaused) return false; - showOnScreenControls(); - scheduleDismissOnScreenControls(); - return true; - } - - @Override - public boolean onDoubleTap(MotionEvent e) { - if (mPaused) return false; - ImageViewTouch2 imageView = mImageView; - - // Switch between the original scale and 3x scale. - if (imageView.getScale() > 2F) { - mImageView.zoomTo(1f); - } else { - mImageView.zoomToPoint(3f, e.getX(), e.getY()); - } - return true; - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - - // These are the menu items already covered by the side buttons. - int sideButtons = MenuHelper.INCLUDE_DELETE_MENU - | MenuHelper.INCLUDE_SHARE_MENU - | MenuHelper.INCLUDE_SET_MENU - | MenuHelper.INCLUDE_VIEWPLAY_MENU; - - mImageMenuRunnable = MenuHelper.addImageMenuItems( - menu, - MenuHelper.INCLUDE_ALL & ~sideButtons, - ReviewImage.this, - mHandler, - mDeletePhotoRunnable, - new MenuHelper.MenuInvoker() { - public void run(final MenuHelper.MenuCallback cb) { - if (mPaused) return; - IImage image = mAllImages.getImageAt(mCurrentPosition); - Uri uri = image.fullSizeImageUri(); - cb.run(uri, image); - - mImageView.clear(); - setImage(mCurrentPosition, false); - } - }); - - return true; - } - - protected Runnable mDeletePhotoRunnable = new Runnable() { - public void run() { - mAllImages.removeImageAt(mCurrentPosition); - if (mAllImages.getCount() == 0) { - finish(); - return; - } else { - if (mCurrentPosition == mAllImages.getCount()) { - mCurrentPosition -= 1; - } - } - mImageView.clear(); - mCache.clear(); // Because the position number is changed. - setImage(mCurrentPosition, true); - } - }; - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - super.onPrepareOptionsMenu(menu); - if (mPaused) return false; - - IImage image = mAllImages.getImageAt(mCurrentPosition); - if (mImageMenuRunnable != null) { - mImageMenuRunnable.gettingReadyToOpen(menu, image); - } - - Uri uri = mAllImages.getImageAt(mCurrentPosition).fullSizeImageUri(); - MenuHelper.enableShareMenuItem(menu, MenuHelper.isWhiteListUri(uri)); - - MenuHelper.enableShowOnMapMenuItem(menu, - MenuHelper.hasLatLngData(image)); - - return true; - } - - @Override - public boolean onMenuItemSelected(int featureId, MenuItem item) { - boolean b = super.onMenuItemSelected(featureId, item); - if (mImageMenuRunnable != null) { - mImageMenuRunnable.aboutToCall(item, - mAllImages.getImageAt(mCurrentPosition)); - } - return b; - } - - void setImage(int pos, boolean showControls) { - mCurrentPosition = pos; - - Bitmap b = mCache.getBitmap(pos); - if (b != null) { - IImage image = mAllImages.getImageAt(pos); - mImageView.setImageRotateBitmapResetBase( - new RotateBitmap(b, image.getDegreesRotated()), true); - updateZoomButtonsEnabled(); - } - - ImageGetterCallback cb = new ImageGetterCallback() { - public void completed() { - } - - public boolean wantsThumbnail(int pos, int offset) { - return !mCache.hasBitmap(pos + offset); - } - - public boolean wantsFullImage(int pos, int offset) { - return offset == 0; - } - - public int fullImageSizeToUse(int pos, int offset) { - // this number should be bigger so that we can zoom. we may - // need to get fancier and read in the fuller size image as the - // user starts to zoom. - // Originally the value is set to 480 in order to avoid OOM. - // Now we set it to 2048 because of using - // native memory allocation for Bitmaps. - final int imageViewSize = 2048; - return imageViewSize; - } - - public int [] loadOrder() { - return sOrderAdjacents; - } - - public void imageLoaded(int pos, int offset, RotateBitmap bitmap, - boolean isThumb) { - // shouldn't get here after onPause() - - // We may get a result from a previous request. Ignore it. - if (pos != mCurrentPosition) { - bitmap.recycle(); - return; - } - - if (isThumb) { - mCache.put(pos + offset, bitmap.getBitmap()); - } - if (offset == 0) { - // isThumb: We always load thumb bitmap first, so we will - // reset the supp matrix for then thumb bitmap, and keep - // the supp matrix when the full bitmap is loaded. - mImageView.setImageRotateBitmapResetBase(bitmap, isThumb); - updateZoomButtonsEnabled(); - } - } - }; - - // Could be null if we're stopping a slide show in the course of pausing - if (mGetter != null) { - mGetter.setPosition(pos, cb, mAllImages, mHandler); - } - updateActionIcons(); - if (showControls) showOnScreenControls(); - scheduleDismissOnScreenControls(); - } - - @Override - public void onCreate(Bundle instanceState) { - super.onCreate(instanceState); - - Intent intent = getIntent(); - mFullScreenInNormalMode = intent.getBooleanExtra( - MediaStore.EXTRA_FULL_SCREEN, true); - - setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT); - requestWindowFeature(Window.FEATURE_NO_TITLE); - setContentView(R.layout.review_image); - - mRootView = findViewById(R.id.root); - mControlBar = findViewById(R.id.control_bar); - mImageView = (ImageViewTouch2) findViewById(R.id.image); - mImageView.setEnableTrackballScroll(true); - mCache = new BitmapCache(3); - mImageView.setRecycler(mCache); - - ((PreviewFrameLayout) findViewById( - R.id.frame_layout)).setAspectRatio(ASPECT_RATIO); - - - makeGetter(); - - mSlideShowImageViews[0] = - (ImageViewTouchBase) findViewById(R.id.image1_slideShow); - mSlideShowImageViews[1] = - (ImageViewTouchBase) findViewById(R.id.image2_slideShow); - for (ImageViewTouchBase v : mSlideShowImageViews) { - v.setVisibility(View.INVISIBLE); - v.setRecycler(mCache); - } - - mParam = getIntent().getParcelableExtra(KEY_IMAGE_LIST); - - if (instanceState != null) { - mSavedUri = instanceState.getParcelable(STATE_URI); - mShowControls = instanceState.getBoolean(STATE_SHOW_CONTROLS, true); - } else { - mSavedUri = getIntent().getData(); - } - - int[] reviewIds = {R.id.btn_delete, R.id.btn_share, R.id.btn_set_as, - R.id.btn_play, R.id.btn_done}; - for (int id : reviewIds) { - View view = mControlBar.findViewById(id); - view.setOnClickListener(this); - // Set the LinearLayout of the given button to visible - ((View) view.getParent()).setVisibility(View.VISIBLE); - } - - if (mFullScreenInNormalMode) { - getWindow().addFlags( - WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - - setupOnScreenControls(findViewById(R.id.mainPanel), mImageView); - } - - private void setButtonPanelVisibility(int id, int visibility) { - View button = mControlBar.findViewById(id); - ((View) button.getParent()).setVisibility(visibility); - } - - private void updateActionIcons() { - - IImage image = mAllImages.getImageAt(mCurrentPosition); - if (image instanceof VideoObject) { - setButtonPanelVisibility(R.id.btn_set_as, View.GONE); - setButtonPanelVisibility(R.id.btn_play, View.VISIBLE); - } else { - setButtonPanelVisibility(R.id.btn_set_as, View.VISIBLE); - setButtonPanelVisibility(R.id.btn_play, View.GONE); - } - } - - private void makeGetter() { - mGetter = new ImageGetter(getContentResolver()); - } - - private IImageList buildImageListFromUri(Uri uri) { - int sort = ImageManager.SORT_ASCENDING; - return ImageManager.makeImageList(getContentResolver(), uri, sort); - } - - private boolean init(Uri uri) { - if (uri == null) return false; - mAllImages = (mParam == null) - ? buildImageListFromUri(uri) - : ImageManager.makeImageList(getContentResolver(), mParam); - IImage image = mAllImages.getImageForUri(uri); - if (image == null) return false; - mCurrentPosition = mAllImages.getImageIndex(image); - return true; - } - - private Uri getCurrentUri() { - if (mAllImages.getCount() == 0) return null; - IImage image = mAllImages.getImageAt(mCurrentPosition); - return image.fullSizeImageUri(); - } - - @Override - public void onSaveInstanceState(Bundle b) { - super.onSaveInstanceState(b); - b.putParcelable(STATE_URI, - mAllImages.getImageAt(mCurrentPosition).fullSizeImageUri()); - b.putBoolean(STATE_SHOW_CONTROLS, mShowControls); - } - - @Override - public void onStart() { - super.onStart(); - mPaused = false; - - if (!init(mSavedUri)) { - Log.w(TAG, "init failed: " + mSavedUri); - finish(); - return; - } - - // normally this will never be zero but if one "backs" into this - // activity after removing the sdcard it could be zero. in that - // case just "finish" since there's nothing useful that can happen. - int count = mAllImages.getCount(); - if (count == 0) { - finish(); - return; - } else if (count <= mCurrentPosition) { - mCurrentPosition = count - 1; - } - - if (mGetter == null) { - makeGetter(); - } - - //show controls only for first time - setImage(mCurrentPosition, mShowControls); - mShowControls = false; - } - - @Override - public void onStop() { - super.onStop(); - mPaused = true; - - // mGetter could be null if we call finish() and leave early in - // onStart(). - if (mGetter != null) { - mGetter.cancelCurrent(); - mGetter.stop(); - mGetter = null; - } - - // removing all callback in the message queue - mHandler.removeAllGetterCallbacks(); - - if (mAllImages != null) { - mSavedUri = getCurrentUri(); - mAllImages.close(); - mAllImages = null; - } - - hideOnScreenControls(); - mImageView.clear(); - mCache.clear(); - - for (ImageViewTouchBase iv : mSlideShowImageViews) { - iv.clear(); - } - } - - private void startShareMediaActivity(IImage image) { - boolean isVideo = image instanceof VideoObject; - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_SEND); - intent.setType(image.getMimeType()); - intent.putExtra(Intent.EXTRA_STREAM, image.fullSizeImageUri()); - try { - startActivity(Intent.createChooser(intent, getText( - isVideo ? R.string.sendVideo : R.string.sendImage))); - } catch (android.content.ActivityNotFoundException ex) { - Toast.makeText(this, isVideo - ? R.string.no_way_to_share_image - : R.string.no_way_to_share_video, - Toast.LENGTH_SHORT).show(); - } - } - - private void startPlayVideoActivity() { - IImage image = mAllImages.getImageAt(mCurrentPosition); - Intent intent = new Intent( - Intent.ACTION_VIEW, image.fullSizeImageUri()); - try { - startActivity(intent); - } catch (android.content.ActivityNotFoundException ex) { - Log.e(TAG, "Couldn't view video " + image.fullSizeImageUri(), ex); - } - } - - public void onClick(View v) { - switch (v.getId()) { - case R.id.btn_delete: - MenuHelper.deleteImage(this, mDeletePhotoRunnable, - mAllImages.getImageAt(mCurrentPosition)); - break; - case R.id.btn_play: - startPlayVideoActivity(); - break; - case R.id.btn_share: { - IImage image = mAllImages.getImageAt(mCurrentPosition); - if (!MenuHelper.isWhiteListUri(image.fullSizeImageUri())) { - return; - } - startShareMediaActivity(image); - break; - } - case R.id.btn_set_as: { - IImage image = mAllImages.getImageAt(mCurrentPosition); - Intent intent = Util.createSetAsIntent(image); - try { - startActivity(Intent.createChooser( - intent, getText(R.string.setImage))); - } catch (android.content.ActivityNotFoundException ex) { - Toast.makeText(this, R.string.no_way_to_share_video, - Toast.LENGTH_SHORT).show(); - } - break; - } - case R.id.btn_done: - finish(); - break; - case R.id.next_image: - moveNextOrPrevious(1); - break; - case R.id.prev_image: - moveNextOrPrevious(-1); - break; - } - } - - private void moveNextOrPrevious(int delta) { - int nextImagePos = mCurrentPosition + delta; - if ((0 <= nextImagePos) && (nextImagePos < mAllImages.getCount())) { - setImage(nextImagePos, true); - showOnScreenControls(); - } - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, - Intent data) { - switch (requestCode) { - case MenuHelper.RESULT_COMMON_MENU_CROP: - if (resultCode == RESULT_OK) { - // The CropImage activity passes back the Uri of the - // cropped image as the Action rather than the Data. - mSavedUri = Uri.parse(data.getAction()); - - // if onStart() runs before, then set the returned - // image as currentImage. - if (mAllImages != null) { - IImage image = mAllImages.getImageForUri(mSavedUri); - // image could be null if SD card is removed. - if (image == null) { - finish(); - } else { - mCurrentPosition = mAllImages.getImageIndex(image); - setImage(mCurrentPosition, false); - } - } - } - break; - } - } -} - -class ImageViewTouch2 extends ImageViewTouchBase { - private final ReviewImage mViewImage; - private boolean mEnableTrackballScroll; - - public ImageViewTouch2(Context context) { - super(context); - mViewImage = (ReviewImage) context; - } - - public ImageViewTouch2(Context context, AttributeSet attrs) { - super(context, attrs); - mViewImage = (ReviewImage) context; - } - - public void setEnableTrackballScroll(boolean enable) { - mEnableTrackballScroll = enable; - } - - protected void postTranslateCenter(float dx, float dy) { - super.postTranslate(dx, dy); - center(true, true); - } - - private static final float PAN_RATE = 20; - - // This is the time we allow the dpad to change the image position again. - private long mNextChangePositionTime; - - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - if (mViewImage.mPaused) return false; - - // Don't respond to arrow keys if trackball scrolling is not enabled - if (!mEnableTrackballScroll) { - if ((keyCode >= KeyEvent.KEYCODE_DPAD_UP) - && (keyCode <= KeyEvent.KEYCODE_DPAD_RIGHT)) { - return super.onKeyDown(keyCode, event); - } - } - - int current = mViewImage.mCurrentPosition; - - int nextImagePos = -2; // default no next image - try { - switch (keyCode) { - case KeyEvent.KEYCODE_DPAD_LEFT: { - if (getScale() <= 1F && event.getEventTime() - >= mNextChangePositionTime) { - nextImagePos = current - 1; - mNextChangePositionTime = event.getEventTime() + 500; - } else { - panBy(PAN_RATE, 0); - center(true, false); - } - return true; - } - case KeyEvent.KEYCODE_DPAD_RIGHT: { - if (getScale() <= 1F && event.getEventTime() - >= mNextChangePositionTime) { - nextImagePos = current + 1; - mNextChangePositionTime = event.getEventTime() + 500; - } else { - panBy(-PAN_RATE, 0); - center(true, false); - } - return true; - } - case KeyEvent.KEYCODE_DPAD_UP: { - panBy(0, PAN_RATE); - center(false, true); - return true; - } - case KeyEvent.KEYCODE_DPAD_DOWN: { - panBy(0, -PAN_RATE); - center(false, true); - return true; - } - case KeyEvent.KEYCODE_DEL: - MenuHelper.deletePhoto( - mViewImage, mViewImage.mDeletePhotoRunnable); - break; - } - } finally { - if (nextImagePos >= 0 - && nextImagePos < mViewImage.mAllImages.getCount()) { - synchronized (mViewImage) { - mViewImage.setImage(nextImagePos, true); - } - } else if (nextImagePos != -2) { - center(true, true); - } - } - - return super.onKeyDown(keyCode, event); - } -} diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java index ee2164a..695341a 100644 --- a/src/com/android/camera/VideoCamera.java +++ b/src/com/android/camera/VideoCamera.java @@ -1287,12 +1287,7 @@ public class VideoCamera extends NoSearchActivity private void stopVideoRecordingAndShowReview() { stopVideoRecording(); if (mThumbController.isUriValid()) { - Uri targetUri = mThumbController.getUri(); - Intent intent = new Intent(this, ReviewImage.class); - intent.setData(targetUri); - intent.putExtra(MediaStore.EXTRA_FULL_SCREEN, true); - intent.putExtra(MediaStore.EXTRA_SHOW_ACTION_ICONS, true); - intent.putExtra("com.android.camera.ReviewMode", true); + Intent intent = new Intent(Intent.ACTION_VIEW, mThumbController.getUri()); try { startActivity(intent); } catch (ActivityNotFoundException ex) { |