summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/camera/ActivityBase.java52
-rw-r--r--src/com/android/camera/Camera.java7
-rwxr-xr-xsrc/com/android/camera/VideoCamera.java7
-rw-r--r--src/com/android/camera/panorama/MosaicFrameProcessor.java6
-rwxr-xr-xsrc/com/android/camera/panorama/PanoramaActivity.java5
5 files changed, 62 insertions, 15 deletions
diff --git a/src/com/android/camera/ActivityBase.java b/src/com/android/camera/ActivityBase.java
index ec878ee..b2ef481 100644
--- a/src/com/android/camera/ActivityBase.java
+++ b/src/com/android/camera/ActivityBase.java
@@ -19,17 +19,25 @@ package com.android.camera;
import com.android.camera.ui.PopupManager;
import android.app.Activity;
+import android.app.KeyguardManager;
import android.view.KeyEvent;
+import android.content.Context;
import android.content.Intent;
+import android.hardware.Camera;
import android.media.AudioManager;
import android.os.Bundle;
+import android.util.Log;
/**
* Superclass of Camera and VideoCamera activities.
*/
-public class ActivityBase extends Activity {
+abstract public class ActivityBase extends Activity {
+ private static final String TAG = "ActivityBase";
+ private static boolean LOGV = false;
private int mResultCodeForTesting;
+ private boolean mOnResumePending;
private Intent mResultDataForTesting;
+ protected Camera mCameraDevice;
@Override
public void onCreate(Bundle icicle) {
@@ -38,6 +46,42 @@ public class ActivityBase extends Activity {
}
@Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ if (LOGV) Log.v(TAG, "onWindowFocusChanged.hasFocus=" + hasFocus
+ + ".mOnResumePending=" + mOnResumePending);
+ if (hasFocus && mOnResumePending) {
+ doOnResume();
+ mOnResumePending = false;
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ // Don't grab the camera if in use by lockscreen. For example, face
+ // unlock may be using the camera. Camera may be already opened in
+ // onCreate. doOnResume should continue if mCameraDevice != null.
+ if (mCameraDevice == null && !hasWindowFocus() && isKeyguardLocked()) {
+ if (LOGV) Log.v(TAG, "onRsume. mOnResumePending=true");
+ mOnResumePending = true;
+ } else {
+ if (LOGV) Log.v(TAG, "onRsume. mOnResumePending=false");
+ doOnResume();
+ mOnResumePending = false;
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ if (LOGV) Log.v(TAG, "onPause");
+ super.onPause();
+ mOnResumePending = false;
+ }
+
+ // Put the code of onResume in this method.
+ abstract protected void doOnResume();
+
+ @Override
public boolean onSearchRequested() {
return false;
}
@@ -77,4 +121,10 @@ public class ActivityBase extends Activity {
PopupManager.removeInstance(this);
super.onDestroy();
}
+
+ private boolean isKeyguardLocked() {
+ KeyguardManager kgm = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
+ // isKeyguardSecure excludes the slide lock case.
+ return (kgm != null) && kgm.isKeyguardLocked() && kgm.isKeyguardSecure();
+ }
}
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 249fd98..1af1d8d 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -135,7 +135,6 @@ public class Camera extends ActivityBase implements FocusManager.Listener,
private static final String sTempCropFilename = "crop-temp";
- private android.hardware.Camera mCameraDevice;
private ContentProviderClient mMediaProviderClient;
private SurfaceHolder mSurfaceHolder = null;
private ShutterButton mShutterButton;
@@ -1438,11 +1437,11 @@ public class Camera extends ActivityBase implements FocusManager.Listener,
}
@Override
- protected void onResume() {
- super.onResume();
- mPausing = false;
+ protected void doOnResume() {
if (mOpenCameraFail || mCameraDisabled) return;
+ mPausing = false;
+
mJpegPictureCallbackTime = 0;
mZoomValue = 0;
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index 4b3b078..0cd57ef 100755
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -134,7 +134,6 @@ public class VideoCamera extends ActivityBase
private static final String EFFECT_BG_FROM_GALLERY = "gallery";
- private android.hardware.Camera mCameraDevice;
private final CameraErrorCallback mErrorCallback = new CameraErrorCallback();
private ComboPreferences mPreferences;
@@ -784,10 +783,10 @@ public class VideoCamera extends ActivityBase
}
@Override
- protected void onResume() {
- super.onResume();
- mPausing = false;
+ protected void doOnResume() {
if (mOpenCameraFail || mCameraDisabled) return;
+
+ mPausing = false;
mZoomValue = 0;
showVideoSnapshotUI(false);
diff --git a/src/com/android/camera/panorama/MosaicFrameProcessor.java b/src/com/android/camera/panorama/MosaicFrameProcessor.java
index 300e4e3..6c70b19 100644
--- a/src/com/android/camera/panorama/MosaicFrameProcessor.java
+++ b/src/com/android/camera/panorama/MosaicFrameProcessor.java
@@ -91,8 +91,10 @@ public class MosaicFrameProcessor {
}
public void clear() {
- mIsMosaicMemoryAllocated = false;
- mMosaicer.freeMosaicMemory();
+ if (mIsMosaicMemoryAllocated) {
+ mIsMosaicMemoryAllocated = false;
+ mMosaicer.freeMosaicMemory();
+ }
}
public void setStripType(int type) {
diff --git a/src/com/android/camera/panorama/PanoramaActivity.java b/src/com/android/camera/panorama/PanoramaActivity.java
index 592b9c3..6fd9b1a 100755
--- a/src/com/android/camera/panorama/PanoramaActivity.java
+++ b/src/com/android/camera/panorama/PanoramaActivity.java
@@ -144,7 +144,6 @@ public class PanoramaActivity extends ActivityBase implements
private int mPreviewWidth;
private int mPreviewHeight;
- private Camera mCameraDevice;
private int mCameraState;
private int mCaptureState;
private SensorManager mSensorManager;
@@ -918,9 +917,7 @@ public class PanoramaActivity extends ActivityBase implements
}
@Override
- protected void onResume() {
- super.onResume();
-
+ protected void doOnResume() {
mPausing = false;
mOrientationEventListener.enable();