diff options
Diffstat (limited to 'src/com/android/camera')
-rw-r--r-- | src/com/android/camera/CaptureModule.java | 47 | ||||
-rw-r--r-- | src/com/android/camera/CaptureUI.java | 9 | ||||
-rw-r--r-- | src/com/android/camera/SettingsManager.java | 18 |
3 files changed, 59 insertions, 15 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index ab2c88685..a4658daef 100644 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -207,6 +207,7 @@ public class CaptureModule implements CameraModule, PhotoController, private int mJpegFileSizeEstimation; private boolean mFirstPreviewLoaded; private int[] mPrecaptureRequestHashCode = new int[MAX_NUM_CAM]; + private int[] mLockRequestHashCode = new int[MAX_NUM_CAM]; private class MediaSaveNotifyThread extends Thread { private Uri uri; @@ -318,7 +319,9 @@ public class CaptureModule implements CameraModule, PhotoController, if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState || CaptureResult.CONTROL_AF_STATE_PASSIVE_FOCUSED == afState || - CaptureResult.CONTROL_AF_STATE_PASSIVE_UNFOCUSED == afState) { + CaptureResult.CONTROL_AF_STATE_PASSIVE_UNFOCUSED == afState || + (mLockRequestHashCode[id] == result.getRequest().hashCode() && + afState == CaptureResult.CONTROL_AF_STATE_INACTIVE)) { // CONTROL_AE_STATE can be null on some devices if (aeState == null || (aeState == CaptureResult .CONTROL_AE_STATE_CONVERGED) && isFlashOff(id)) { @@ -453,7 +456,7 @@ public class CaptureModule implements CameraModule, PhotoController, private int getCameraMode() { String value = mSettingsManager.getValue(SettingsManager.KEY_SCENE_MODE); - if (value != null && value.equals("-5")) return DUAL_MODE; + if (value != null && value.equals(SettingsManager.SCENE_MODE_DUAL_STRING)) return DUAL_MODE; value = mSettingsManager.getValue(SettingsManager.KEY_MONO_ONLY); if (value == null || !value.equals("on")) return BAYER_MODE; return MONO_MODE; @@ -696,9 +699,10 @@ public class CaptureModule implements CameraModule, PhotoController, builder.addTarget(getPreviewSurface(id)); applySettingsForLockFocus(builder, id); - + CaptureRequest request = builder.build(); + mLockRequestHashCode[id] = request.hashCode(); mState[id] = STATE_WAITING_LOCK; - mCaptureSession[id].capture(builder.build(), mCaptureCallback, mCameraHandler); + mCaptureSession[id].capture(request, mCaptureCallback, mCameraHandler); } catch (CameraAccessException e) { e.printStackTrace(); } @@ -770,7 +774,7 @@ public class CaptureModule implements CameraModule, PhotoController, // Orientation int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation(); - captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, ORIENTATIONS.get(rotation)); + captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, CameraUtil.getJpegRotation(id, rotation)); captureBuilder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO); captureBuilder.addTarget(getPreviewSurface(id)); captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode); @@ -1223,6 +1227,7 @@ public class CaptureModule implements CameraModule, PhotoController, } else { initializeSecondTime(); } + mUI.reInitUI(); mActivity.updateStorageSpaceAndHint(); estimateJpegFileSize(); mUI.enableShutter(true); @@ -1388,13 +1393,27 @@ public class CaptureModule implements CameraModule, PhotoController, } } - public boolean isTouchToFocusAllowed() { + public boolean isTakingPicture() { for (int i = 0; i < mTakingPicture.length; i++) { - if (mTakingPicture[i]) return false; + if (mTakingPicture[i]) return true; } + return false; + } + + private boolean isTouchToFocusAllowed() { + if (isTakingPicture() || isSceneModeOn()) return false; return true; } + private boolean isSceneModeOn() { + String scene = mSettingsManager.getValue(SettingsManager.KEY_SCENE_MODE); + if (scene == null) return false; + int mode = Integer.parseInt(scene); + if (mode != SettingsManager.SCENE_MODE_DUAL_INT && mode != CaptureRequest + .CONTROL_SCENE_MODE_DISABLED) return true; + return false; + } + @Override public void onCountDownFinished() { mUI.showUIAfterCountDown(); @@ -1690,6 +1709,10 @@ public class CaptureModule implements CameraModule, PhotoController, updatePreview = true; applyFlash(mPreviewRequestBuilder[cameraId], cameraId); break; + case SettingsManager.KEY_ISO: + updatePreview = true; + applyIso(mPreviewRequestBuilder[cameraId]); + break; } return updatePreview; } @@ -1720,7 +1743,8 @@ public class CaptureModule implements CameraModule, PhotoController, String value = mSettingsManager.getValue(SettingsManager.KEY_SCENE_MODE); if (value == null) return; int mode = Integer.parseInt(value); - if (mode != CaptureRequest.CONTROL_SCENE_MODE_DISABLED && mode != -5) { + if (mode != CaptureRequest.CONTROL_SCENE_MODE_DISABLED && mode != + SettingsManager.SCENE_MODE_DUAL_INT) { request.set(CaptureRequest.CONTROL_SCENE_MODE, mode); request.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_USE_SCENE_MODE); } else { @@ -1945,9 +1969,12 @@ public class CaptureModule implements CameraModule, PhotoController, } private int mCurrentMode; + private boolean checkNeedToRestart(String value) { - if (value.equals("-5") && mCurrentMode != DUAL_MODE) return true; - if (!value.equals("-5") && mCurrentMode == DUAL_MODE) return true; + if (value.equals(SettingsManager.SCENE_MODE_DUAL_STRING) && mCurrentMode != DUAL_MODE) + return true; + if (!value.equals(SettingsManager.SCENE_MODE_DUAL_STRING) && mCurrentMode == DUAL_MODE) + return true; return false; } diff --git a/src/com/android/camera/CaptureUI.java b/src/com/android/camera/CaptureUI.java index f47401514..50104570d 100644 --- a/src/com/android/camera/CaptureUI.java +++ b/src/com/android/camera/CaptureUI.java @@ -90,7 +90,6 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, SettingsManager.KEY_TIMER, SettingsManager.KEY_CAMERA_SAVEPATH, SettingsManager.KEY_LONGSHOT, - SettingsManager.KEY_ISO, SettingsManager.KEY_EXPOSURE, SettingsManager.KEY_WHITE_BALANCE, SettingsManager.KEY_CAMERA2 @@ -275,6 +274,12 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, return mSceneAndFilterLayout; } + public void reInitUI() { + initializeSettingMenu(); + initSceneModeButton(); + initFilterModeButton(); + } + // called from onResume but only the first time public void initializeFirstTime() { // Initialize shutter button. @@ -987,7 +992,7 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, mThumbnail.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (!CameraControls.isAnimating() && mModule.isTouchToFocusAllowed()) + if (!CameraControls.isAnimating() && !mModule.isTakingPicture()) mActivity.gotoGallery(); } }); diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index 86ecd6200..a01d2543b 100644 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -57,6 +57,9 @@ import java.util.Set; public class SettingsManager implements ListMenu.SettingsListener { public static final int RESOURCE_TYPE_THUMBNAIL = 0; public static final int RESOURCE_TYPE_LARGEICON = 1; + // Custom-Scenemodes start from 100 + public static final int SCENE_MODE_DUAL_INT = 100; + public static final String SCENE_MODE_DUAL_STRING = "100"; public static final String KEY_CAMERA_SAVEPATH = "pref_camera2_savepath_key"; public static final String KEY_RECORD_LOCATION = "pref_camera2_recordlocation_key"; public static final String KEY_JPEG_QUALITY = "pref_camera2_jpegquality_key"; @@ -80,7 +83,6 @@ public class SettingsManager implements ListMenu.SettingsListener { public static final String KEY_INITIAL_CAMERA = "pref_camera2_initial_camera_key"; private static final String TAG = "SnapCam_SettingsManager"; private static final List<CameraCharacteristics> mCharacteristics = new ArrayList<>(); - private static final int NOT_FOUND = -1; private static SettingsManager sInstance; @@ -636,6 +638,16 @@ public class SettingsManager implements ListMenu.SettingsListener { return maxAfRegions != null && maxAfRegions > 0; } + public boolean isFixedFocus(int id) { + Float focusDistance = mCharacteristics.get(id).get(CameraCharacteristics + .LENS_INFO_MINIMUM_FOCUS_DISTANCE); + if (focusDistance == null || focusDistance == 0) { + return true; + } else { + return false; + } + } + public boolean isFlashSupported(int id) { return mCharacteristics.get(id).get(CameraCharacteristics.FLASH_INFO_AVAILABLE) && mValuesMap.get(KEY_FLASH_MODE) != null; @@ -667,7 +679,7 @@ public class SettingsManager implements ListMenu.SettingsListener { .CONTROL_AVAILABLE_SCENE_MODES); List<String> modes = new ArrayList<>(); modes.add("0"); // need special case handle for auto scene mode - if (mIsMonoCameraPresent) modes.add("-5"); // need special case handle for dual mode + if (mIsMonoCameraPresent) modes.add(SCENE_MODE_DUAL_STRING); // need special case handle for dual mode for (int mode : sceneModes) { modes.add("" + mode); } @@ -730,7 +742,7 @@ public class SettingsManager implements ListMenu.SettingsListener { dependency.add(new KeyValue(KEY_CLEARSIGHT, "off")); dependency.add(new KeyValue(KEY_MONO_PREVIEW, "off")); break; - case "-5": + case SCENE_MODE_DUAL_STRING: dependency.add(new KeyValue(KEY_LONGSHOT, "off")); dependency.add(new KeyValue(KEY_MONO_ONLY, "off")); break; |