Merge "Camera: Fix instability during ZSL snapshot"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8152f81..daedbab 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -143,6 +143,11 @@
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
+ <receiver android:name="com.android.camera.CameraButtonIntentReceiver">
+ <intent-filter>
+ <action android:name="android.intent.action.CAMERA_BUTTON"/>
+ </intent-filter>
+ </receiver>
<service android:name="com.android.camera.MediaSaveService" />
</application>
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 3086fc8..df21958 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -305,6 +305,9 @@
@Override
public void onDataFullScreenChange(int dataID, boolean full) {
boolean isCameraID = isCameraPreview(dataID);
+ if (full && isCameraID){
+ updateStorageSpaceAndHint();
+ }
if (!isCameraID) {
if (!full) {
// Always show action bar in filmstrip mode
@@ -365,6 +368,16 @@
@Override
public void onDataFocusChanged(final int dataID, final boolean focused) {
+ boolean isPreview = isCameraPreview(dataID);
+ boolean isFullScreen = mFilmStripView.inFullScreen();
+ if (isFullScreen && isPreview){
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ updateStorageSpaceAndHint();
+ }
+ });
+ }
// Delay hiding action bar if there is any user interaction
if (mMainHandler.hasMessages(HIDE_ACTION_BAR)) {
mMainHandler.removeMessages(HIDE_ACTION_BAR);
@@ -1151,6 +1164,7 @@
}
mLocalImagesObserver.setActivityPaused(false);
mLocalVideosObserver.setActivityPaused(false);
+ updateStorageSpaceAndHint();
}
@Override
@@ -1214,6 +1228,7 @@
public void onBackPressed() {
if (!mFilmStripView.inCameraFullscreen()) {
mFilmStripView.getController().goToFirstItem();
+ mCurrentModule.resizeForPreviewAspectRatio();
} else if (!mCurrentModule.onBackPressed()) {
super.onBackPressed();
}
diff --git a/src/com/android/camera/CameraModule.java b/src/com/android/camera/CameraModule.java
index 55cae9f..48d7eec 100644
--- a/src/com/android/camera/CameraModule.java
+++ b/src/com/android/camera/CameraModule.java
@@ -66,4 +66,6 @@
public void onMediaSaveServiceConnected(MediaSaveService s);
public boolean arePreviewControlsVisible();
+
+ public void resizeForPreviewAspectRatio();
}
diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java
index cc81ab8..0f4d3b7 100644
--- a/src/com/android/camera/PhotoMenu.java
+++ b/src/com/android/camera/PhotoMenu.java
@@ -171,24 +171,6 @@
});
mRenderer.addItem(item3);
- // camera switcher
- // Exposure compensation.
- if (group.findPreference(CameraSettings.KEY_EXPOSURE) != null) {
- item = makeItem(CameraSettings.KEY_EXPOSURE);
- item.setLabel(res.getString(R.string.pref_exposure_label));
- mRenderer.addItem(item);
- }
- // More settings.
- PieItem more = makeItem(R.drawable.ic_settings_holo_light);
- more.setLabel(res.getString(R.string.camera_menu_more_label));
- mRenderer.addItem(more);
-
- // Flash.
- if (group.findPreference(CameraSettings.KEY_FLASH_MODE) != null) {
- item = makeItem(CameraSettings.KEY_FLASH_MODE);
- item.setLabel(res.getString(R.string.pref_camera_flashmode_label));
- mRenderer.addItem(item);
- }
// Camera switcher.
if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) {
item = makeSwitchItem(CameraSettings.KEY_CAMERA_ID, false);
@@ -211,56 +193,6 @@
});
mRenderer.addItem(item);
}
- // Location.
- if (group.findPreference(CameraSettings.KEY_RECORD_LOCATION) != null) {
- item = makeSwitchItem(CameraSettings.KEY_RECORD_LOCATION, true);
- more.addItem(item);
- if (mActivity.isSecureCamera()) {
- // Prevent location preference from getting changed in secure camera mode
- item.setEnabled(false);
- }
- }
- // Countdown timer.
- final ListPreference ctpref = group.findPreference(CameraSettings.KEY_TIMER);
- final ListPreference beeppref = group.findPreference(CameraSettings.KEY_TIMER_SOUND_EFFECTS);
- item = makeItem(R.drawable.ic_timer);
- item.setLabel(res.getString(R.string.pref_camera_timer_title).toUpperCase(locale));
- item.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(PieItem item) {
- CountdownTimerPopup timerPopup = (CountdownTimerPopup) mActivity.getLayoutInflater().inflate(
- R.layout.countdown_setting_popup, null, false);
- timerPopup.initialize(ctpref, beeppref);
- timerPopup.setSettingChangedListener(PhotoMenu.this);
- mUI.dismissPopup();
- mPopup = timerPopup;
- mUI.showPopup(mPopup);
- }
- });
- more.addItem(item);
- // Image size.
- item = makeItem(R.drawable.ic_imagesize);
- final ListPreference sizePref = group.findPreference(CameraSettings.KEY_PICTURE_SIZE);
- item.setLabel(res.getString(R.string.pref_camera_picturesize_title).toUpperCase(locale));
- item.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(PieItem item) {
- ListPrefSettingPopup popup = (ListPrefSettingPopup) mActivity.getLayoutInflater().inflate(
- R.layout.list_pref_setting_popup, null, false);
- popup.initialize(sizePref);
- popup.setSettingChangedListener(PhotoMenu.this);
- mUI.dismissPopup();
- mPopup = popup;
- mUI.showPopup(mPopup);
- }
- });
- more.addItem(item);
- // White balance.
- if (group.findPreference(CameraSettings.KEY_WHITE_BALANCE) != null) {
- item = makeItem(CameraSettings.KEY_WHITE_BALANCE);
- item.setLabel(res.getString(R.string.pref_camera_whitebalance_label));
- more.addItem(item);
- }
}
@Override
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index db25574..176885c 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -644,7 +644,8 @@
}
}
- private void resizeForPreviewAspectRatio() {
+ @Override
+ public void resizeForPreviewAspectRatio() {
setPreviewFrameLayoutCameraOrientation();
Size size = mParameters.getPictureSize();
Log.e(TAG,"Width = "+ size.width+ "Height = "+size.height);
@@ -756,7 +757,12 @@
mFaceDetectionStarted = false;
mCameraDevice.setFaceDetectionCallback(null, null);
mCameraDevice.stopFaceDetection();
- mUI.clearFaces();
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run(){
+ mUI.clearFaces();
+ }
+ }, 100);
}
}
@@ -1285,7 +1291,9 @@
mNamedImages.nameNewImage(mCaptureStartTime);
- mFaceDetectionStarted = false;
+ if (mSnapshotMode != CameraInfo.CAMERA_SUPPORT_MODE_ZSL) {
+ mFaceDetectionStarted = false;
+ }
UsageStatistics.onEvent(UsageStatistics.COMPONENT_CAMERA,
UsageStatistics.ACTION_CAPTURE_DONE, "Photo");
return true;
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java
index 1d4751b..66db1d0 100644
--- a/src/com/android/camera/PhotoUI.java
+++ b/src/com/android/camera/PhotoUI.java
@@ -160,7 +160,7 @@
protected Bitmap doInBackground(Void... params) {
// Decode image in background.
Bitmap bitmap = CameraUtil.downSample(mData, DOWN_SAMPLE_FACTOR);
- if (mOrientation != 0 || mMirror) {
+ if ((mOrientation != 0 || mMirror) && (bitmap != null)) {
Matrix m = new Matrix();
m.preRotate(mOrientation);
if (mMirror) {
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 36e5862..057332b 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -223,6 +223,13 @@
return;
}
mParameters = mCameraDevice.getParameters();
+ String sceneMode = mParameters.getSceneMode();
+ if ((null != sceneMode) && (!sceneMode.equals(Parameters.SCENE_MODE_AUTO))){
+ if (CameraUtil.isSupported(Parameters.SCENE_MODE_AUTO,
+ mParameters.getSupportedSceneModes())){
+ mParameters.setSceneMode(Parameters.SCENE_MODE_AUTO);
+ }
+ }
}
//QCOM data Members Starts here
@@ -790,7 +797,8 @@
mUI.cameraOrientationPreviewResize(false);
}
- private void resizeForPreviewAspectRatio() {
+ @Override
+ public void resizeForPreviewAspectRatio() {
setPreviewFrameLayoutCameraOrientation();
mUI.setAspectRatio(
(double) mProfile.videoFrameWidth / mProfile.videoFrameHeight);
diff --git a/src/com/android/camera/WideAnglePanoramaModule.java b/src/com/android/camera/WideAnglePanoramaModule.java
index 6f872ea..c4080df 100644
--- a/src/com/android/camera/WideAnglePanoramaModule.java
+++ b/src/com/android/camera/WideAnglePanoramaModule.java
@@ -329,6 +329,13 @@
return false;
}
Parameters parameters = mCameraDevice.getParameters();
+ String sceneMode = parameters.getSceneMode();
+ if ((null != sceneMode) && (!sceneMode.equals(Parameters.SCENE_MODE_AUTO))){
+ if (CameraUtil.isSupported(Parameters.SCENE_MODE_AUTO,
+ parameters.getSupportedSceneModes())){
+ parameters.setSceneMode(Parameters.SCENE_MODE_AUTO);
+ }
+ }
setupCaptureParams(parameters);
configureCamera(parameters);
return true;
@@ -482,9 +489,24 @@
@Override
public void onPreviewUILayoutChange(int l, int t, int r, int b) {
Log.d(TAG, "layout change: " + (r - l) + "/" + (b - t));
+ boolean capturePending = false;
+ if (mCaptureState == CAPTURE_STATE_MOSAIC){
+ capturePending = true;
+ }
mPreviewUIWidth = r - l;
mPreviewUIHeight = b - t;
configMosaicPreview();
+ if (capturePending == true){
+ mMainHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ if (!mPaused){
+ mMainHandler.removeMessages(MSG_RESET_TO_PREVIEW);
+ startCapture();
+ }
+ }
+ });
+ }
}
@Override
@@ -852,6 +874,10 @@
}
@Override
+ public void resizeForPreviewAspectRatio() {
+ }
+
+ @Override
public void onResumeBeforeSuper() {
mPaused = false;
}
diff --git a/src/com/android/camera/ui/FilmStripView.java b/src/com/android/camera/ui/FilmStripView.java
index d2695b5..9945952 100644
--- a/src/com/android/camera/ui/FilmStripView.java
+++ b/src/com/android/camera/ui/FilmStripView.java
@@ -1844,7 +1844,7 @@
// Check the current one.
ViewItem curr = mViewItem[mCurrentItem];
int dataId = curr.getId();
- if (reporter.isDataRemoved(dataId)) {
+ if (reporter.isDataRemoved(dataId) || mDataAdapter.getTotalNumber() == 1) {
reload();
return;
}
@@ -1920,7 +1920,9 @@
if (v != mCameraView) {
removeView(v);
}
- mDataAdapter.getImageData(mViewItem[i].getId()).recycle();
+ if (mDataAdapter.getImageData(mViewItem[i].getId()) != null) {
+ mDataAdapter.getImageData(mViewItem[i].getId()).recycle();
+ }
}
// Clear out the mViewItems and rebuild with camera in the center.
diff --git a/src/com/android/camera/ui/PieRenderer.java b/src/com/android/camera/ui/PieRenderer.java
index 3967f79..008bc40 100644
--- a/src/com/android/camera/ui/PieRenderer.java
+++ b/src/com/android/camera/ui/PieRenderer.java
@@ -114,7 +114,7 @@
private int mPieCenterX;
private int mPieCenterY;
private int mSliceRadius;
- private int mArcRadius;
+ private int mArcRadius, mMaxArcRadius;
private int mArcOffset;
private int mDialAngle;
@@ -221,6 +221,7 @@
mMenuArcPaint.setStyle(Paint.Style.STROKE);
mSliceRadius = res.getDimensionPixelSize(R.dimen.pie_item_radius);
mArcRadius = res.getDimensionPixelSize(R.dimen.pie_arc_radius);
+ mMaxArcRadius = mArcRadius;
mArcOffset = res.getDimensionPixelSize(R.dimen.pie_arc_offset);
mLabel = new TextDrawable(res);
mLabel.setDropShadow(true);
@@ -348,6 +349,12 @@
mCenterX = (r - l) / 2;
mCenterY = (b - t) / 2;
+ int layoutWidth = r - l;
+ if( (layoutWidth > 0) && ((mMaxArcRadius + mCenterX) > layoutWidth) ){
+ mArcRadius = layoutWidth - mCenterX;
+ } else {
+ mArcRadius = mMaxArcRadius;
+ }
mFocusX = mCenterX;
mFocusY = mCenterY;
resetPieCenter();