diff options
Diffstat (limited to 'src/com/android/camera/ActivityBase.java')
-rw-r--r-- | src/com/android/camera/ActivityBase.java | 52 |
1 files changed, 51 insertions, 1 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(); + } } |