| /* |
| * Copyright (C) 2014 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.graphics.Bitmap; |
| import android.graphics.Matrix; |
| import android.graphics.RectF; |
| import android.view.TextureView; |
| import android.view.View; |
| import android.view.ViewGroup; |
| |
| import com.android.camera.debug.Log; |
| import com.android.camera.ui.CountDownView; |
| import com.android.camera.ui.PreviewOverlay; |
| import com.android.camera.ui.PreviewOverlay.OnZoomChangedListener; |
| import com.android.camera.ui.PreviewStatusListener; |
| import com.android.camera.ui.ProgressOverlay; |
| import com.android.camera.ui.focus.FocusRing; |
| import com.android.camera2.R; |
| |
| /** |
| * Contains the UI for the CaptureModule. |
| */ |
| public class CaptureModuleUI implements PreviewStatusListener.PreviewAreaChangedListener { |
| |
| public interface CaptureModuleUIListener { |
| public void onZoomRatioChanged(float zoomRatio); |
| } |
| |
| private static final Log.Tag TAG = new Log.Tag("CaptureModuleUI"); |
| |
| private final CameraActivity mActivity; |
| private final CaptureModuleUIListener mListener; |
| private final View mRootView; |
| |
| private final PreviewOverlay mPreviewOverlay; |
| private final ProgressOverlay mProgressOverlay; |
| private final TextureView mPreviewView; |
| |
| private final FocusRing mFocusRing; |
| private final CountDownView mCountdownView; |
| |
| private int mPreviewAreaWidth; |
| private int mPreviewAreaHeight; |
| |
| /** Maximum zoom; intialize to 1.0 (disabled) */ |
| private float mMaxZoom = 1f; |
| |
| /** Set up listener to receive zoom changes from View and send to module. */ |
| private final OnZoomChangedListener mZoomChangedListener = new OnZoomChangedListener() { |
| @Override |
| public void onZoomValueChanged(float ratio) { |
| mListener.onZoomRatioChanged(ratio); |
| } |
| |
| @Override |
| public void onZoomStart() { |
| } |
| |
| @Override |
| public void onZoomEnd() { |
| } |
| }; |
| |
| public CaptureModuleUI(CameraActivity activity, View parent, CaptureModuleUIListener listener) { |
| mActivity = activity; |
| mListener = listener; |
| mRootView = parent; |
| |
| ViewGroup moduleRoot = (ViewGroup) mRootView.findViewById(R.id.module_layout); |
| mActivity.getLayoutInflater().inflate(R.layout.capture_module, moduleRoot, true); |
| |
| mPreviewView = (TextureView) mRootView.findViewById(R.id.preview_content); |
| |
| mPreviewOverlay = (PreviewOverlay) mRootView.findViewById(R.id.preview_overlay); |
| mProgressOverlay = (ProgressOverlay) mRootView.findViewById(R.id.progress_overlay); |
| |
| mFocusRing = (FocusRing) mRootView.findViewById(R.id.focus_ring); |
| mCountdownView = (CountDownView) mRootView.findViewById(R.id.count_down_view); |
| } |
| |
| /** |
| * Getter for the camera activity this UI is drawn into |
| */ |
| public CameraActivity getActivity() { |
| return mActivity; |
| } |
| |
| /** |
| * Getter for the width of the visible area of the preview. |
| */ |
| public int getPreviewAreaWidth() { |
| return mPreviewAreaWidth; |
| } |
| |
| /** |
| * Getter for the height of the visible area of the preview. |
| */ |
| public int getPreviewAreaHeight() { |
| return mPreviewAreaHeight; |
| } |
| |
| public Matrix getPreviewTransform(Matrix m) { |
| return mPreviewView.getTransform(m); |
| } |
| |
| public FocusRing getFocusRing() { |
| return mFocusRing; |
| } |
| |
| public void showDebugMessage(String message) { |
| /* NoOp */ |
| } |
| |
| /** |
| * Starts the countdown timer. |
| * |
| * @param sec seconds to countdown |
| */ |
| public void startCountdown(int sec) { |
| mCountdownView.startCountDown(sec); |
| } |
| |
| /** |
| * Sets a listener that gets notified when the countdown is finished. |
| */ |
| public void setCountdownFinishedListener(CountDownView.OnCountDownStatusListener listener) { |
| mCountdownView.setCountDownStatusListener(listener); |
| } |
| |
| /** |
| * Returns whether the countdown is on-going. |
| */ |
| public boolean isCountingDown() { |
| return mCountdownView.isCountingDown(); |
| } |
| |
| /** |
| * Cancels the on-going countdown, if any. |
| */ |
| public void cancelCountDown() { |
| mCountdownView.cancelCountDown(); |
| } |
| |
| /** |
| * Sets the progress of the gcam picture taking. |
| * |
| * @param percent amount of process done in percent 0-100. |
| */ |
| public void setPictureTakingProgress(int percent) { |
| mProgressOverlay.setProgress(percent); |
| } |
| |
| public Bitmap getBitMapFromPreview() { |
| Matrix m = new Matrix(); |
| m = getPreviewTransform(m); |
| Bitmap src = mPreviewView.getBitmap(); |
| return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), m, true); |
| } |
| |
| /** |
| * Enables zoom UI, setting maximum zoom. |
| * Called from Module when camera is available. |
| * |
| * @param maxZoom maximum zoom value. |
| */ |
| public void initializeZoom(float maxZoom) { |
| mMaxZoom = maxZoom; |
| mPreviewOverlay.setupZoom(mMaxZoom, 0, mZoomChangedListener); |
| } |
| |
| @Override |
| public void onPreviewAreaChanged(RectF previewArea) { |
| // TODO: mFaceView.onPreviewAreaChanged(previewArea); |
| mCountdownView.onPreviewAreaChanged(previewArea); |
| mProgressOverlay.setBounds(previewArea); |
| } |
| } |