import android.hardware.Camera;
import android.hardware.Camera.Face;
import android.hardware.Camera.FaceDetectionListener;
-import android.hardware.Camera.Parameters;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.ViewStub;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
-import android.widget.ImageView;
import android.widget.Toast;
import com.android.camera.CameraPreference.OnPreferenceChangedListener;
PreviewGestures.SingleTapListener,
FocusUI,
LocationManager.Listener,
- FaceDetectionListener {
+ FaceDetectionListener,
+ PreviewGestures.SwipeListener {
private static final String TAG = "CAM_UI";
private View mBlocker;
private PhotoMenu mMenu;
- // Small indicators which show the camera settings in the viewfinder.
- private ImageView mExposureIndicator;
- private ImageView mFlashIndicator;
- private ImageView mSceneIndicator;
- private ImageView mHdrIndicator;
- // A view group that contains all the small indicators.
- private View mOnScreenIndicators;
+ private OnScreenIndicators mOnScreenIndicators;
private PieRenderer mPieRenderer;
private ZoomRenderer mZoomRenderer;
private int mPreviewWidth = 0;
private int mPreviewHeight = 0;
+ private View mPreviewThumb;
private OnLayoutChangeListener mLayoutListener = new OnLayoutChangeListener() {
@Override
h = width;
}
if (mPreviewWidth != w || mPreviewHeight != h) {
+ mPreviewWidth = w;
+ mPreviewHeight = h;
mController.onScreenSizeChanged(width, height, w, h);
}
}
}
}
- mRootView.addOnLayoutChangeListener(mLayoutListener);
}
public View getRootView() {
}
private void initIndicators() {
- mOnScreenIndicators = mActivity.findViewById(R.id.on_screen_indicators);
- mExposureIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_exposure_indicator);
- mFlashIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_flash_indicator);
- mSceneIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_scenemode_indicator);
- mHdrIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_hdr_indicator);
+ mOnScreenIndicators = new OnScreenIndicators(mActivity,
+ mActivity.findViewById(R.id.on_screen_indicators));
}
public void onCameraOpened(PreferenceGroup prefGroup, ComboPreferences prefs,
if (mPieRenderer == null) {
mPieRenderer = new PieRenderer(mActivity);
mPieRenderer.setPieListener(this);
+ mRenderOverlay.addRenderer(mPieRenderer);
}
if (mMenu == null) {
mMenu = new PhotoMenu(mActivity, this, mPieRenderer);
if (mZoomRenderer == null) {
mZoomRenderer = new ZoomRenderer(mActivity);
+ mRenderOverlay.addRenderer(mZoomRenderer);
}
- mRenderOverlay.addRenderer(mPieRenderer);
- mRenderOverlay.addRenderer(mZoomRenderer);
if (mGestures == null) {
// this will handle gesture disambiguation and dispatching
- mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer);
+ mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer,
+ this);
}
- mGestures.clearTouchReceivers();
+ mGestures.reset();
mGestures.setRenderOverlay(mRenderOverlay);
mGestures.addTouchReceiver(mMenuButton);
- mGestures.addTouchReceiver(mBlocker);
+ mGestures.addUnclickableArea(mBlocker);
+ enablePreviewThumb(false);
// make sure to add touch targets for image capture
if (mController.isImageCaptureIntent()) {
if (mReviewCancelButton != null) {
mRenderOverlay.requestLayout();
initializeZoom(params);
- updateOnScreenIndicators(params, prefs);
+ updateOnScreenIndicators(params, prefGroup, prefs);
+ }
+
+ private void openMenu() {
+ if (mPieRenderer != null) {
+ // If autofocus is not finished, cancel autofocus so that the
+ // subsequent touch can be handled by PreviewGestures
+ if (mController.getCameraState() == PhotoController.FOCUSING) {
+ mController.cancelAutoFocus();
+ }
+ mPieRenderer.showInCenter();
+ }
}
public void initializeControlByIntent() {
mBlocker = mActivity.findViewById(R.id.blocker);
+ mPreviewThumb = mActivity.findViewById(R.id.preview_thumb);
+ mPreviewThumb.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mActivity.gotoGallery();
+ }
+ });
mMenuButton = mActivity.findViewById(R.id.menu);
mMenuButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- if (mPieRenderer != null) {
- // If autofocus is not finished, cancel autofocus so that the
- // subsequent touch can be handled by PreviewGestures
- if (mController.getCameraState() == PhotoController.FOCUSING) {
- mController.cancelAutoFocus();
- }
- mPieRenderer.showInCenter();
- }
+ openMenu();
}
});
if (mController.isImageCaptureIntent()) {
mShutterButton.setImageResource(R.drawable.btn_new_shutter);
mShutterButton.setOnShutterButtonListener(mController);
mShutterButton.setVisibility(View.VISIBLE);
+ mRootView.addOnLayoutChangeListener(mLayoutListener);
}
// called from onResume every other time
if (mMenu != null) {
mMenu.reloadPreferences();
}
+ mRootView.addOnLayoutChangeListener(mLayoutListener);
}
public void initializeZoom(Camera.Parameters params) {
}
}
+ @Override
public void showGpsOnScreenIndicator(boolean hasSignal) { }
+ @Override
public void hideGpsOnScreenIndicator() { }
public void overrideSettings(final String ... keyvalues) {
}
public void updateOnScreenIndicators(Camera.Parameters params,
- ComboPreferences prefs) {
+ PreferenceGroup group, ComboPreferences prefs) {
if (params == null) return;
- updateSceneOnScreenIndicator(params.getSceneMode());
- updateExposureOnScreenIndicator(params,
+ mOnScreenIndicators.updateSceneOnScreenIndicator(params.getSceneMode());
+ mOnScreenIndicators.updateExposureOnScreenIndicator(params,
CameraSettings.readExposure(prefs));
- updateFlashOnScreenIndicator(params.getFlashMode());
- updateHdrOnScreenIndicator(params.getSceneMode());
- }
-
- private void updateExposureOnScreenIndicator(Camera.Parameters params, int value) {
- if (mExposureIndicator == null) {
- return;
- }
- int id = 0;
- float step = params.getExposureCompensationStep();
- value = (int) Math.round(value * step);
- switch(value) {
- case -3:
- id = R.drawable.ic_indicator_ev_n3;
- break;
- case -2:
- id = R.drawable.ic_indicator_ev_n2;
- break;
- case -1:
- id = R.drawable.ic_indicator_ev_n1;
- break;
- case 0:
- id = R.drawable.ic_indicator_ev_0;
- break;
- case 1:
- id = R.drawable.ic_indicator_ev_p1;
- break;
- case 2:
- id = R.drawable.ic_indicator_ev_p2;
- break;
- case 3:
- id = R.drawable.ic_indicator_ev_p3;
- break;
- }
- mExposureIndicator.setImageResource(id);
- }
-
- private void updateFlashOnScreenIndicator(String value) {
- if (mFlashIndicator == null) {
- return;
- }
- if (value == null || Parameters.FLASH_MODE_OFF.equals(value)) {
- mFlashIndicator.setImageResource(R.drawable.ic_indicator_flash_off);
- } else {
- if (Parameters.FLASH_MODE_AUTO.equals(value)) {
- mFlashIndicator.setImageResource(R.drawable.ic_indicator_flash_auto);
- } else if (Parameters.FLASH_MODE_ON.equals(value)) {
- mFlashIndicator.setImageResource(R.drawable.ic_indicator_flash_on);
- } else {
- mFlashIndicator.setImageResource(R.drawable.ic_indicator_flash_off);
- }
- }
- }
-
- private void updateSceneOnScreenIndicator(String value) {
- if (mSceneIndicator == null) {
- return;
- }
- if ((value == null) || Parameters.SCENE_MODE_AUTO.equals(value)
- || Parameters.SCENE_MODE_HDR.equals(value)) {
- mSceneIndicator.setImageResource(R.drawable.ic_indicator_sce_off);
- } else {
- mSceneIndicator.setImageResource(R.drawable.ic_indicator_sce_on);
- }
- }
-
- private void updateHdrOnScreenIndicator(String value) {
- if (mHdrIndicator == null) {
- return;
- }
- if ((value != null) && Parameters.SCENE_MODE_HDR.equals(value)) {
- mHdrIndicator.setImageResource(R.drawable.ic_indicator_hdr_on);
- } else {
- mHdrIndicator.setImageResource(R.drawable.ic_indicator_hdr_off);
+ mOnScreenIndicators.updateFlashOnScreenIndicator(params.getFlashMode());
+ int wbIndex = 2;
+ ListPreference pref = group.findPreference(CameraSettings.KEY_WHITE_BALANCE);
+ if (pref != null) {
+ wbIndex = pref.getCurrentIndex();
}
+ mOnScreenIndicators.updateWBIndicator(wbIndex);
+ boolean location = RecordLocationPreference.get(
+ prefs, mActivity.getContentResolver());
+ mOnScreenIndicators.updateLocationIndicator(location);
}
public void setCameraState(int state) {
}
public boolean dispatchTouchEvent(MotionEvent m) {
- if (mPopup != null) {
- return mActivity.superDispatchTouchEvent(m);
- } else if (mGestures != null && mRenderOverlay != null) {
+ if (mGestures != null && mRenderOverlay != null) {
return mGestures.dispatchTouch(m);
}
return false;
mFaceView.setBlockDraw(!full);
}
if (mPopup != null) {
- dismissPopup(false, full);
+ dismissPopup(full);
}
if (mGestures != null) {
mGestures.setEnabled(full);
if (!full && mCountDownView != null) mCountDownView.cancelCountDown();
}
+ public void enablePreviewThumb(boolean enabled) {
+ if (enabled) {
+ mGestures.addTouchReceiver(mPreviewThumb);
+ mPreviewThumb.setVisibility(View.VISIBLE);
+ } else {
+ mGestures.removeTouchReceiver(mPreviewThumb);
+ mPreviewThumb.setVisibility(View.GONE);
+ }
+ }
+
public boolean removeTopLevelPopup() {
// Remove the top level popup or dialog box and return true if there's any
if (mPopup != null) {
- dismissPopup(true);
+ dismissPopup();
return true;
}
return false;
LayoutParams.WRAP_CONTENT);
lp.gravity = Gravity.CENTER;
((FrameLayout) mRootView).addView(mPopup, lp);
+ mGestures.addTouchReceiver(mPopup);
}
- public void dismissPopup(boolean topPopupOnly) {
- dismissPopup(topPopupOnly, true);
+ public void dismissPopup() {
+ dismissPopup(true);
}
- private void dismissPopup(boolean topOnly, boolean fullScreen) {
+ private void dismissPopup(boolean fullScreen) {
if (fullScreen) {
mActivity.showUI();
mBlocker.setVisibility(View.VISIBLE);
}
setShowMenu(fullScreen);
if (mPopup != null) {
+ mGestures.removeTouchReceiver(mPopup);
((FrameLayout) mRootView).removeView(mPopup);
mPopup = null;
}
- mMenu.popupDismissed(topOnly);
+ mMenu.popupDismissed();
}
public void onShowSwitcherPopup() {
// Remove all the popups/dialog boxes
boolean ret = false;
if (mPopup != null) {
- dismissPopup(false);
+ dismissPopup();
ret = true;
}
return ret;
@Override
public void onPieOpened(int centerX, int centerY) {
+ dismissPopup();
mActivity.cancelActivityTouchHandling();
mActivity.setSwipingEnabled(false);
if (mFaceView != null) {
@Override
public void clearFocus() {
- getFocusIndicator().clear();
+ FocusIndicator indicator = getFocusIndicator();
+ if (indicator != null) indicator.clear();
}
@Override
mFaceView.setFaces(faces);
}
+ @Override
+ public void onSwipe(int direction) {
+ if (direction == PreviewGestures.DIR_UP) {
+ openMenu();
+ }
+ }
+
}