blob: ea523c8d314c234086174c7b43b66f5a1658eee9 [file] [log] [blame]
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.camera;
import com.android.camera.ui.PopupManager;
import android.app.Activity;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.hardware.Camera;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
/**
* Superclass of Camera and VideoCamera activities.
*/
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) {
if (Util.isTabletUI()) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
super.onCreate(icicle);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
@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.
// Suppose camera app is in the foreground. If users turn off and turn
// on the screen very fast, camera app can still have the focus when the
// lock screen shows up. The keyguard takes input focus, so the caemra
// app will lose focus when it is displayed.
if (LOGV) Log.v(TAG, "onResume. hasWindowFocus()=" + hasWindowFocus());
if (mCameraDevice == null && isKeyguardLocked()) {
if (LOGV) Log.v(TAG, "onResume. mOnResumePending=true");
mOnResumePending = true;
} else {
if (LOGV) Log.v(TAG, "onResume. 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;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Prevent software keyboard or voice search from showing up.
if (keyCode == KeyEvent.KEYCODE_SEARCH
|| keyCode == KeyEvent.KEYCODE_MENU) {
if (event.isLongPress()) return true;
}
return super.onKeyDown(keyCode, event);
}
protected void setResultEx(int resultCode) {
mResultCodeForTesting = resultCode;
setResult(resultCode);
}
protected void setResultEx(int resultCode, Intent data) {
mResultCodeForTesting = resultCode;
mResultDataForTesting = data;
setResult(resultCode, data);
}
public int getResultCode() {
return mResultCodeForTesting;
}
public Intent getResultData() {
return mResultDataForTesting;
}
@Override
protected void onDestroy() {
PopupManager.removeInstance(this);
super.onDestroy();
}
private boolean isKeyguardLocked() {
KeyguardManager kgm = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
if (LOGV) {
if (kgm != null) {
Log.v(TAG, "kgm.isKeyguardLocked()="+kgm.isKeyguardLocked()
+ ". kgm.isKeyguardSecure()="+kgm.isKeyguardSecure());
}
}
// isKeyguardSecure excludes the slide lock case.
return (kgm != null) && kgm.isKeyguardLocked() && kgm.isKeyguardSecure();
}
}