diff options
-rwxr-xr-x | src/com/android/camera/CameraActivity.java | 15 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 2 | ||||
-rwxr-xr-x | src/com/android/camera/VideoModule.java | 6 | ||||
-rw-r--r-- | src/com/android/camera/WideAnglePanoramaModule.java | 6 |
4 files changed, 22 insertions, 7 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index a330f6a5f..1ebc3f047 100755 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -69,7 +69,6 @@ import android.os.PowerManager.WakeLock; import android.os.SystemProperties; import android.preference.PreferenceManager; import android.provider.MediaStore; -import android.provider.Settings; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -226,6 +225,7 @@ public class CameraActivity extends Activity private FrameLayout mPreviewContentLayout; private boolean mPaused = true; private boolean mHasCriticalPermissions; + private boolean mForceReleaseCamera = false; private Uri[] mNfcPushUris = new Uri[1]; @@ -1912,9 +1912,9 @@ public class CameraActivity extends Activity switch (requestCode) { case PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION: { // If request is cancelled, the result arrays are empty. - mCurrentModule.waitingLocationPermissionResult(false); + mCurrentModule.waitingLocationPermissionResult(false); if (grantResults.length > 0 - && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Log.v(TAG, "Location permission is granted"); mCurrentModule.enableRecordingLocation(true); } else { @@ -1926,11 +1926,17 @@ public class CameraActivity extends Activity } } + public boolean isForceReleaseCamera() { + return mForceReleaseCamera; + } + @Override public void onModuleSelected(int moduleIndex) { boolean cam2on = SettingsManager.getInstance().isCamera2On(); - if (cam2on && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX) + mForceReleaseCamera = cam2on && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX; + if (mForceReleaseCamera) { moduleIndex = ModuleSwitcher.CAPTURE_MODULE_INDEX; + } if (mCurrentModuleIndex == moduleIndex) { if (mCurrentModuleIndex != ModuleSwitcher.CAPTURE_MODULE_INDEX) { return; @@ -1941,6 +1947,7 @@ public class CameraActivity extends Activity setModuleFromIndex(moduleIndex); openModule(mCurrentModule); + mForceReleaseCamera = false; mCurrentModule.onOrientationChanged(mLastRawOrientation); if (mMediaSaveService != null) { mCurrentModule.onMediaSaveServiceConnected(mMediaSaveService); diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index 7c0db7c74..279c903d4 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -2843,7 +2843,7 @@ public class PhotoModule mCameraDevice.setFaceDetectionCallback(null, null); mCameraDevice.setErrorCallback(null); - if (mActivity.isSecureCamera()) { + if (mActivity.isSecureCamera() || mActivity.isForceReleaseCamera()) { // Blocks until camera is actually released. CameraHolder.instance().strongRelease(); } else { diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java index a93cff611..b0699bb08 100755 --- a/src/com/android/camera/VideoModule.java +++ b/src/com/android/camera/VideoModule.java @@ -1268,7 +1268,11 @@ public class VideoModule implements CameraModule, mCameraDevice.setZoomChangeListener(null); mCameraDevice.setErrorCallback(null); mCameraDevice.setFaceDetectionCallback(null, null); - CameraHolder.instance().release(); + if (mActivity.isForceReleaseCamera()) { + CameraHolder.instance().strongRelease(); + } else { + CameraHolder.instance().release(); + } mCameraDevice = null; mPreviewing = false; mSnapshotInProgress = false; diff --git a/src/com/android/camera/WideAnglePanoramaModule.java b/src/com/android/camera/WideAnglePanoramaModule.java index 210fe3600..8d7243c5c 100644 --- a/src/com/android/camera/WideAnglePanoramaModule.java +++ b/src/com/android/camera/WideAnglePanoramaModule.java @@ -380,7 +380,11 @@ public class WideAnglePanoramaModule private void releaseCamera() { if (mCameraDevice != null) { - CameraHolder.instance().release(); + if (mActivity.isForceReleaseCamera()) { + CameraHolder.instance().strongRelease(); + } else { + CameraHolder.instance().release(); + } mCameraDevice.setErrorCallback(null); mCameraDevice = null; mCameraState = PREVIEW_STOPPED; |