diff options
author | Jim Miller <jaggies@google.com> | 2011-10-20 19:24:02 -0700 |
---|---|---|
committer | Wu-cheng Li <wuchengli@google.com> | 2011-10-21 18:00:03 +0800 |
commit | 7d9eadd0c6c38b3761b7e8d3fa3658d194810d60 (patch) | |
tree | 1257c2ff990199f74fec2aea92907718ccc72d00 /src/com | |
parent | cfc9bcc6dc56135d905ffdaaf1b9838cf12a1558 (diff) | |
download | LegacyCamera-7d9eadd0c6c38b3761b7e8d3fa3658d194810d60.zip LegacyCamera-7d9eadd0c6c38b3761b7e8d3fa3658d194810d60.tar.gz LegacyCamera-7d9eadd0c6c38b3761b7e8d3fa3658d194810d60.tar.bz2 |
Fix 5491362: don't open the camera in onResume in lockscreen.
Change-Id: I678dd23f1603647e801c339a557fc08b53dbfa38
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/camera/ActivityBase.java | 52 | ||||
-rw-r--r-- | src/com/android/camera/Camera.java | 7 | ||||
-rwxr-xr-x | src/com/android/camera/VideoCamera.java | 7 | ||||
-rw-r--r-- | src/com/android/camera/panorama/MosaicFrameProcessor.java | 6 | ||||
-rwxr-xr-x | src/com/android/camera/panorama/PanoramaActivity.java | 5 |
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 70f70c8..ecff831 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; @@ -1441,11 +1440,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 4694c90..5ad9205 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; @@ -785,10 +784,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 0e055e5..43d33a8 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; @@ -916,9 +915,7 @@ public class PanoramaActivity extends ActivityBase implements } @Override - protected void onResume() { - super.onResume(); - + protected void doOnResume() { mPausing = false; mOrientationEventListener.enable(); |