diff options
Diffstat (limited to 'src/com/android/camera/WideAnglePanoramaUI.java')
-rw-r--r-- | src/com/android/camera/WideAnglePanoramaUI.java | 495 |
1 files changed, 0 insertions, 495 deletions
diff --git a/src/com/android/camera/WideAnglePanoramaUI.java b/src/com/android/camera/WideAnglePanoramaUI.java deleted file mode 100644 index 58a1a3231..000000000 --- a/src/com/android/camera/WideAnglePanoramaUI.java +++ /dev/null @@ -1,495 +0,0 @@ -/* - * Copyright (C) 2013 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.app.AlertDialog; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Matrix; -import android.graphics.Point; -import android.graphics.Rect; -import android.graphics.SurfaceTexture; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.TextureView; -import android.view.View; -import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.android.camera.ui.CameraControls; -import com.android.camera.util.CameraUtil; -import com.android.camera2.R; - -/** - * The UI of {@link WideAnglePanoramaModule}. - */ -public class WideAnglePanoramaUI implements - TextureView.SurfaceTextureListener, - ShutterButton.OnShutterButtonListener, - View.OnLayoutChangeListener { - - @SuppressWarnings("unused") - private static final String TAG = "CAM_WidePanoramaUI"; - - private CameraActivity mActivity; - private WideAnglePanoramaController mController; - - private ViewGroup mRootView; - private FrameLayout mCaptureLayout; - private View mReviewLayout; - private ImageView mReview; - private View mPreviewBorder; - private View mLeftIndicator; - private View mRightIndicator; - private View mCaptureIndicator; - private PanoProgressBar mCaptureProgressBar; - private PanoProgressBar mSavingProgressBar; - private TextView mTooFastPrompt; - private View mPreviewLayout; - private ViewGroup mReviewControl; - private TextureView mTextureView; - private ShutterButton mShutterButton; - private CameraControls mCameraControls; - - private Matrix mProgressDirectionMatrix = new Matrix(); - private float[] mProgressAngle = new float[2]; - - private DialogHelper mDialogHelper; - - // Color definitions. - private int mIndicatorColor; - private int mIndicatorColorFast; - private int mReviewBackground; - private SurfaceTexture mSurfaceTexture; - private View mPreviewCover; - - /** Constructor. */ - public WideAnglePanoramaUI( - CameraActivity activity, - WideAnglePanoramaController controller, - ViewGroup root) { - mActivity = activity; - mController = controller; - mRootView = root; - - createContentView(); - } - - public void onStartCapture() { - mShutterButton.setImageResource(R.drawable.btn_shutter_recording); - mCaptureIndicator.setVisibility(View.VISIBLE); - showDirectionIndicators(PanoProgressBar.DIRECTION_NONE); - } - - public void showPreviewUI() { - mCaptureLayout.setVisibility(View.VISIBLE); - showUI(); - } - - public void onStopCapture() { - mCaptureIndicator.setVisibility(View.INVISIBLE); - hideTooFastIndication(); - hideDirectionIndicators(); - } - - public void hideUI() { - mCameraControls.setVisibility(View.INVISIBLE); - } - - public void showUI() { - mCameraControls.setVisibility(View.VISIBLE); - } - - public void onPreviewFocusChanged(boolean previewFocused) { - if (previewFocused) { - showUI(); - } else { - hideUI(); - } - } - - public boolean arePreviewControlsVisible() { - return (mCameraControls.getVisibility() == View.VISIBLE); - } - - public void setCaptureProgressOnDirectionChangeListener( - PanoProgressBar.OnDirectionChangeListener listener) { - mCaptureProgressBar.setOnDirectionChangeListener(listener); - } - - public void resetCaptureProgress() { - mCaptureProgressBar.reset(); - } - - public void setMaxCaptureProgress(int max) { - mCaptureProgressBar.setMaxProgress(max); - } - - public void showCaptureProgress() { - mCaptureProgressBar.setVisibility(View.VISIBLE); - } - - public void updateCaptureProgress( - float panningRateXInDegree, float panningRateYInDegree, - float progressHorizontalAngle, float progressVerticalAngle, - float maxPanningSpeed) { - - if ((Math.abs(panningRateXInDegree) > maxPanningSpeed) - || (Math.abs(panningRateYInDegree) > maxPanningSpeed)) { - showTooFastIndication(); - } else { - hideTooFastIndication(); - } - - // progressHorizontalAngle and progressVerticalAngle are relative to the - // camera. Convert them to UI direction. - mProgressAngle[0] = progressHorizontalAngle; - mProgressAngle[1] = progressVerticalAngle; - mProgressDirectionMatrix.mapPoints(mProgressAngle); - - int angleInMajorDirection = - (Math.abs(mProgressAngle[0]) > Math.abs(mProgressAngle[1])) - ? (int) mProgressAngle[0] - : (int) mProgressAngle[1]; - mCaptureProgressBar.setProgress((angleInMajorDirection)); - } - - public void setProgressOrientation(int orientation) { - mProgressDirectionMatrix.reset(); - mProgressDirectionMatrix.postRotate(orientation); - } - - public void showDirectionIndicators(int direction) { - switch (direction) { - case PanoProgressBar.DIRECTION_NONE: - mLeftIndicator.setVisibility(View.VISIBLE); - mRightIndicator.setVisibility(View.VISIBLE); - break; - case PanoProgressBar.DIRECTION_LEFT: - mLeftIndicator.setVisibility(View.VISIBLE); - mRightIndicator.setVisibility(View.INVISIBLE); - break; - case PanoProgressBar.DIRECTION_RIGHT: - mLeftIndicator.setVisibility(View.INVISIBLE); - mRightIndicator.setVisibility(View.VISIBLE); - break; - } - } - - public SurfaceTexture getSurfaceTexture() { - return mSurfaceTexture; - } - - @Override - public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i2) { - mSurfaceTexture = surfaceTexture; - mController.onPreviewUIReady(); - } - - @Override - public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i2) { - - } - - @Override - public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { - mController.onPreviewUIDestroyed(); - mSurfaceTexture = null; - Log.d(TAG, "surfaceTexture is destroyed"); - return true; - } - - @Override - public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { - // Make sure preview cover is hidden if preview data is available. - if (mPreviewCover.getVisibility() != View.GONE) { - mPreviewCover.setVisibility(View.GONE); - } - } - - private void hideDirectionIndicators() { - mLeftIndicator.setVisibility(View.INVISIBLE); - mRightIndicator.setVisibility(View.INVISIBLE); - } - - public Point getPreviewAreaSize() { - return new Point( - mTextureView.getWidth(), mTextureView.getHeight()); - } - - public void reset() { - mShutterButton.setImageResource(R.drawable.btn_new_shutter); - mReviewLayout.setVisibility(View.GONE); - mCaptureProgressBar.setVisibility(View.INVISIBLE); - } - - public void showFinalMosaic(Bitmap bitmap, int orientation) { - if (bitmap != null && orientation != 0) { - Matrix rotateMatrix = new Matrix(); - rotateMatrix.setRotate(orientation); - bitmap = Bitmap.createBitmap( - bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), - rotateMatrix, false); - } - - mReview.setImageBitmap(bitmap); - mCaptureLayout.setVisibility(View.GONE); - mReviewLayout.setVisibility(View.VISIBLE); - } - - public void onConfigurationChanged( - boolean isLandscape, boolean threadRunning) { - Drawable lowResReview = null; - if (threadRunning) lowResReview = mReview.getDrawable(); - - // Change layout in response to configuration change - LayoutInflater inflater = (LayoutInflater) - mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - - mReviewControl.removeAllViews(); - inflater.inflate(R.layout.pano_review_control, mReviewControl, true); - - mRootView.bringChildToFront(mCameraControls); - setViews(mActivity.getResources()); - if (threadRunning) { - mReview.setImageDrawable(lowResReview); - mCaptureLayout.setVisibility(View.GONE); - mReviewLayout.setVisibility(View.VISIBLE); - } - } - - public void resetSavingProgress() { - mSavingProgressBar.reset(); - mSavingProgressBar.setRightIncreasing(true); - } - - public void updateSavingProgress(int progress) { - mSavingProgressBar.setProgress(progress); - } - - @Override - public void onShutterButtonFocus(boolean pressed) { - // Do nothing. - } - - @Override - public void onShutterButtonClick() { - mController.onShutterButtonClick(); - } - - @Override - public void onLayoutChange( - View v, int l, int t, int r, int b, - int oldl, int oldt, int oldr, int oldb) { - mController.onPreviewUILayoutChange(l, t, r, b); - } - - public void showAlertDialog( - String title, String failedString, - String OKString, Runnable runnable) { - mDialogHelper.showAlertDialog(title, failedString, OKString, runnable); - } - - public void showWaitingDialog(String title) { - mDialogHelper.showWaitingDialog(title); - } - - public void dismissAllDialogs() { - mDialogHelper.dismissAll(); - } - - private void createContentView() { - LayoutInflater inflator = (LayoutInflater) mActivity - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - inflator.inflate(R.layout.panorama_module, mRootView, true); - - Resources appRes = mActivity.getResources(); - mIndicatorColor = appRes.getColor(R.color.pano_progress_indication); - mReviewBackground = appRes.getColor(R.color.review_background); - mIndicatorColorFast = appRes.getColor(R.color.pano_progress_indication_fast); - - mPreviewCover = mRootView.findViewById(R.id.preview_cover); - mPreviewLayout = mRootView.findViewById(R.id.pano_preview_layout); - mReviewControl = (ViewGroup) mRootView.findViewById(R.id.pano_review_control); - mReviewLayout = mRootView.findViewById(R.id.pano_review_layout); - mReview = (ImageView) mRootView.findViewById(R.id.pano_reviewarea); - mCaptureLayout = (FrameLayout) mRootView.findViewById(R.id.panorama_capture_layout); - mCaptureProgressBar = (PanoProgressBar) mRootView.findViewById(R.id.pano_pan_progress_bar); - mCaptureProgressBar.setBackgroundColor(appRes.getColor(R.color.pano_progress_empty)); - mCaptureProgressBar.setDoneColor(appRes.getColor(R.color.pano_progress_done)); - mCaptureProgressBar.setIndicatorColor(mIndicatorColor); - mCaptureProgressBar.setIndicatorWidth(20); - - mPreviewBorder = mCaptureLayout.findViewById(R.id.pano_preview_area_border); - - mLeftIndicator = mRootView.findViewById(R.id.pano_pan_left_indicator); - mRightIndicator = mRootView.findViewById(R.id.pano_pan_right_indicator); - mLeftIndicator.setEnabled(false); - mRightIndicator.setEnabled(false); - mTooFastPrompt = (TextView) mRootView.findViewById(R.id.pano_capture_too_fast_textview); - mCaptureIndicator = mRootView.findViewById(R.id.pano_capture_indicator); - - mShutterButton = (ShutterButton) mRootView.findViewById(R.id.shutter_button); - mShutterButton.setImageResource(R.drawable.btn_new_shutter); - mShutterButton.setOnShutterButtonListener(this); - // Hide menu and indicators. - mRootView.findViewById(R.id.menu).setVisibility(View.GONE); - mRootView.findViewById(R.id.on_screen_indicators).setVisibility(View.GONE); - mReview.setBackgroundColor(mReviewBackground); - - mTextureView = (TextureView) mRootView.findViewById(R.id.pano_preview_textureview); - mTextureView.setSurfaceTextureListener(this); - mTextureView.addOnLayoutChangeListener(this); - mCameraControls = (CameraControls) mRootView.findViewById(R.id.camera_controls); - - mDialogHelper = new DialogHelper(); - setViews(appRes); - } - - private void setViews(Resources appRes) { - int weight = appRes.getInteger(R.integer.SRI_pano_layout_weight); - - LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mPreviewLayout.getLayoutParams(); - lp.weight = weight; - mPreviewLayout.setLayoutParams(lp); - - lp = (LinearLayout.LayoutParams) mReview.getLayoutParams(); - lp.weight = weight; - mPreviewLayout.setLayoutParams(lp); - - mSavingProgressBar = (PanoProgressBar) mRootView.findViewById(R.id.pano_saving_progress_bar); - mSavingProgressBar.setIndicatorWidth(0); - mSavingProgressBar.setMaxProgress(100); - mSavingProgressBar.setBackgroundColor(appRes.getColor(R.color.pano_progress_empty)); - mSavingProgressBar.setDoneColor(appRes.getColor(R.color.pano_progress_indication)); - - View cancelButton = mRootView.findViewById(R.id.pano_review_cancel_button); - cancelButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View arg0) { - mController.cancelHighResStitching(); - } - }); - - - } - - private void showTooFastIndication() { - mTooFastPrompt.setVisibility(View.VISIBLE); - // The PreviewArea also contains the border for "too fast" indication. - mPreviewBorder.setVisibility(View.VISIBLE); - mCaptureProgressBar.setIndicatorColor(mIndicatorColorFast); - mLeftIndicator.setEnabled(true); - mRightIndicator.setEnabled(true); - } - - private void hideTooFastIndication() { - mTooFastPrompt.setVisibility(View.GONE); - mPreviewBorder.setVisibility(View.INVISIBLE); - mCaptureProgressBar.setIndicatorColor(mIndicatorColor); - mLeftIndicator.setEnabled(false); - mRightIndicator.setEnabled(false); - } - - public void flipPreviewIfNeeded() { - // Rotation needed to display image correctly clockwise - int cameraOrientation = mController.getCameraOrientation(); - // Display rotated counter-clockwise - int displayRotation = CameraUtil.getDisplayRotation(mActivity); - // Rotation needed to display image correctly on current display - int rotation = (cameraOrientation - displayRotation + 360) % 360; - if (rotation >= 180) { - mTextureView.setRotation(180); - } else { - mTextureView.setRotation(0); - } - } - - public void showPreviewCover() { - mPreviewCover.setVisibility(View.VISIBLE); - } - - private class DialogHelper { - private ProgressDialog mProgressDialog; - private AlertDialog mAlertDialog; - - DialogHelper() { - mProgressDialog = null; - mAlertDialog = null; - } - - public void dismissAll() { - if (mAlertDialog != null) { - mAlertDialog.dismiss(); - mAlertDialog = null; - } - if (mProgressDialog != null) { - mProgressDialog.dismiss(); - mProgressDialog = null; - } - } - - public void showAlertDialog( - CharSequence title, CharSequence message, - CharSequence buttonMessage, final Runnable buttonRunnable) { - dismissAll(); - mAlertDialog = (new AlertDialog.Builder(mActivity)) - .setTitle(title) - .setMessage(message) - .setNeutralButton(buttonMessage, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - buttonRunnable.run(); - } - }) - .show(); - } - - public void showWaitingDialog(CharSequence message) { - dismissAll(); - mProgressDialog = ProgressDialog.show(mActivity, null, message, true, false); - } - } - - private static class FlipBitmapDrawable extends BitmapDrawable { - - public FlipBitmapDrawable(Resources res, Bitmap bitmap) { - super(res, bitmap); - } - - @Override - public void draw(Canvas canvas) { - Rect bounds = getBounds(); - int cx = bounds.centerX(); - int cy = bounds.centerY(); - canvas.save(Canvas.MATRIX_SAVE_FLAG); - canvas.rotate(180, cx, cy); - super.draw(canvas); - canvas.restore(); - } - } -} |