ActivityBase.java revision 7d9eadd0c6c38b3761b7e8d3fa3658d194810d60
14d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang/* 24d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * Copyright (C) 2009 The Android Open Source Project 34d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * 44d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * Licensed under the Apache License, Version 2.0 (the "License"); 54d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * you may not use this file except in compliance with the License. 64d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * You may obtain a copy of the License at 74d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * 84d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * http://www.apache.org/licenses/LICENSE-2.0 94d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * 104d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * Unless required by applicable law or agreed to in writing, software 114d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * distributed under the License is distributed on an "AS IS" BASIS, 124d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * See the License for the specific language governing permissions and 144d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang * limitations under the License. 154d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang */ 164d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang 174d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Changpackage com.android.camera; 184d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang 195f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wangimport com.android.camera.ui.PopupManager; 205f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang 214d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Changimport android.app.Activity; 227d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Millerimport android.app.KeyguardManager; 237673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Liimport android.view.KeyEvent; 247d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Millerimport android.content.Context; 255df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Liimport android.content.Intent; 267d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Millerimport android.hardware.Camera; 278608b577921acf67a5a7b7968cb3633b8f94714dChih-Chung Changimport android.media.AudioManager; 288608b577921acf67a5a7b7968cb3633b8f94714dChih-Chung Changimport android.os.Bundle; 297d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Millerimport android.util.Log; 304d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang 3177c1cdc8f2cda250b1db842204efb49f87e094aeChih-Chung Chang/** 327673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li * Superclass of Camera and VideoCamera activities. 3377c1cdc8f2cda250b1db842204efb49f87e094aeChih-Chung Chang */ 347d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Millerabstract public class ActivityBase extends Activity { 357d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller private static final String TAG = "ActivityBase"; 367d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller private static boolean LOGV = false; 375df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li private int mResultCodeForTesting; 387d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller private boolean mOnResumePending; 395df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li private Intent mResultDataForTesting; 407d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller protected Camera mCameraDevice; 415df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li 424d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang @Override 438608b577921acf67a5a7b7968cb3633b8f94714dChih-Chung Chang public void onCreate(Bundle icicle) { 448608b577921acf67a5a7b7968cb3633b8f94714dChih-Chung Chang super.onCreate(icicle); 458608b577921acf67a5a7b7968cb3633b8f94714dChih-Chung Chang setVolumeControlStream(AudioManager.STREAM_MUSIC); 468608b577921acf67a5a7b7968cb3633b8f94714dChih-Chung Chang } 478608b577921acf67a5a7b7968cb3633b8f94714dChih-Chung Chang 488608b577921acf67a5a7b7968cb3633b8f94714dChih-Chung Chang @Override 497d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller public void onWindowFocusChanged(boolean hasFocus) { 507d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller if (LOGV) Log.v(TAG, "onWindowFocusChanged.hasFocus=" + hasFocus 517d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller + ".mOnResumePending=" + mOnResumePending); 527d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller if (hasFocus && mOnResumePending) { 537d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller doOnResume(); 547d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller mOnResumePending = false; 557d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller } 567d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller } 577d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller 587d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller @Override 597d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller protected void onResume() { 607d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller super.onResume(); 617d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller // Don't grab the camera if in use by lockscreen. For example, face 627d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller // unlock may be using the camera. Camera may be already opened in 637d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller // onCreate. doOnResume should continue if mCameraDevice != null. 647d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller if (mCameraDevice == null && !hasWindowFocus() && isKeyguardLocked()) { 657d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller if (LOGV) Log.v(TAG, "onRsume. mOnResumePending=true"); 667d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller mOnResumePending = true; 677d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller } else { 687d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller if (LOGV) Log.v(TAG, "onRsume. mOnResumePending=false"); 697d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller doOnResume(); 707d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller mOnResumePending = false; 717d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller } 727d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller } 737d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller 747d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller @Override 757d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller protected void onPause() { 767d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller if (LOGV) Log.v(TAG, "onPause"); 777d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller super.onPause(); 787d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller mOnResumePending = false; 797d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller } 807d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller 817d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller // Put the code of onResume in this method. 827d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller abstract protected void doOnResume(); 837d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller 847d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller @Override 854d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang public boolean onSearchRequested() { 864d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang return false; 874d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang } 887673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li 897673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li @Override 907673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li public boolean onKeyDown(int keyCode, KeyEvent event) { 917673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li // Prevent software keyboard or voice search from showing up. 927673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li if (keyCode == KeyEvent.KEYCODE_SEARCH 937673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li || keyCode == KeyEvent.KEYCODE_MENU) { 947673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li if (event.isLongPress()) return true; 957673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li } 967673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li 977673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li return super.onKeyDown(keyCode, event); 987673ada94b5e2263e7190ca246694cdee31ed03eWu-cheng Li } 995df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li 1005df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li protected void setResultEx(int resultCode) { 1015df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li mResultCodeForTesting = resultCode; 1025df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li setResult(resultCode); 1035df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li } 1045df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li 1055df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li protected void setResultEx(int resultCode, Intent data) { 1065df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li mResultCodeForTesting = resultCode; 1075df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li mResultDataForTesting = data; 1085df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li setResult(resultCode, data); 1095df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li } 1105df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li 1115df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li public int getResultCode() { 1125df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li return mResultCodeForTesting; 1135df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li } 1145df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li 1155df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li public Intent getResultData() { 1165df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li return mResultDataForTesting; 1175df067af93e6b386167f11cdf12701b7905ee444Wu-cheng Li } 1185f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang 1195f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang @Override 1205f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang protected void onDestroy() { 1215f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang PopupManager.removeInstance(this); 1225f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang super.onDestroy(); 1235f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang } 1247d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller 1257d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller private boolean isKeyguardLocked() { 1267d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller KeyguardManager kgm = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 1277d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller // isKeyguardSecure excludes the slide lock case. 1287d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller return (kgm != null) && kgm.isKeyguardLocked() && kgm.isKeyguardSecure(); 1297d9eadd0c6c38b3761b7e8d3fa3658d194810d60Jim Miller } 1304d2aefbe7c108bae9e4ae735c7cd230792201098Chih-Chung Chang} 131