Migrate from old CameraModule to ModuleController.
The following methods are removed.
init() of old module interface
onUserInteraction()
installIntetFilter()
onPreviewTextureCopied()
onCaptureTextureCopied()
onStop()
onActivityResult()
onShowSwitcherPopup
updateStorageHintOnResume()
The logic of controlling screen on/off is moved to CameraActivity.
Change-Id: I6807ac6bc314bdfcfe47273baf071be94098fd44
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 7884440..e1f37fe 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -67,7 +67,6 @@
import com.android.camera.app.AppController;
import com.android.camera.app.AppManagerFactory;
-import com.android.camera.app.CameraApp;
import com.android.camera.app.CameraAppUI;
import com.android.camera.app.CameraController;
import com.android.camera.app.CameraManager;
@@ -95,7 +94,6 @@
import com.android.camera.filmstrip.FilmstripController;
import com.android.camera.filmstrip.FilmstripImageData;
import com.android.camera.filmstrip.FilmstripListener;
-import com.android.camera.module.ModuleController;
import com.android.camera.module.ModulesInfo;
import com.android.camera.settings.SettingsManager;
import com.android.camera.settings.SettingsManager.SettingsCapabilities;
@@ -147,8 +145,10 @@
public static final int REQ_CODE_GCAM_DEBUG_POSTCAPTURE = 999;
- private static final int HIDE_ACTION_BAR = 1;
+ private static final int MSG_HIDE_ACTION_BAR = 1;
+ private static final int MSG_CLEAR_SCREEN_ON_FLAG = 2;
private static final long SHOW_ACTION_BAR_TIMEOUT_MS = 3000;
+ private static final long SCREEN_DELAY_MS = 2 * 60 * 1000; // 2 mins.
/**
* Whether onResume should reset the view to the preview.
@@ -185,7 +185,6 @@
private ModeListView mModeListView;
private int mCurrentModeIndex;
private CameraModule mCurrentModule;
- private ModuleController mCurrentModule2;
private ModuleManagerImpl mModuleManager;
private FrameLayout mAboveFilmstripControlLayout;
private FrameLayout mCameraModuleRootView;
@@ -232,7 +231,6 @@
private MediaSaver mMediaSaver;
-
// close activity when screen turns off
private final BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
@Override
@@ -243,6 +241,11 @@
private static BroadcastReceiver sScreenOffReceiver;
+ /**
+ * Whether the screen is kept turned on.
+ */
+ private boolean mKeepScreenOn;
+
@Override
public void onCameraOpened(CameraManager.CameraProxy camera) {
if (!mModuleManager.getModuleAgent(mCurrentModeIndex).requestAppForCamera()) {
@@ -251,11 +254,11 @@
throw new IllegalStateException("Camera opened but the module shouldn't be " +
"requesting");
}
- if (mCurrentModule2 != null) {
+ if (mCurrentModule != null) {
SettingsCapabilities capabilities =
SettingsController.getSettingsCapabilities(camera);
mSettingsManager.changeCamera(camera.getCameraId(), capabilities);
- mCurrentModule2.onCameraAvailable(camera);
+ mCurrentModule.onCameraAvailable(camera);
}
}
@@ -290,9 +293,21 @@
@Override
public void handleMessage(Message msg) {
- if (msg.what == HIDE_ACTION_BAR) {
- removeMessages(HIDE_ACTION_BAR);
- CameraActivity.this.setSystemBarsVisibility(false);
+ switch (msg.what) {
+ case MSG_HIDE_ACTION_BAR: {
+ removeMessages(MSG_HIDE_ACTION_BAR);
+ CameraActivity.this.setSystemBarsVisibility(false);
+ break;
+ }
+
+ case MSG_CLEAR_SCREEN_ON_FLAG: {
+ if (!mPaused) {
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ }
+ break;
+ }
+
+ default:
}
}
}
@@ -341,7 +356,7 @@
CameraActivity.this.setSystemBarsVisibility(true, false);
} else if (mActionBar.isShowing()) {
// Hide action bar after time out in full screen mode
- mMainHandler.sendEmptyMessageDelayed(HIDE_ACTION_BAR,
+ mMainHandler.sendEmptyMessageDelayed(MSG_HIDE_ACTION_BAR,
SHOW_ACTION_BAR_TIMEOUT_MS);
}
}
@@ -398,9 +413,9 @@
@Override
public void onDataFocusChanged(final int dataID, final boolean focused) {
// Delay hiding action bar if there is any user interaction
- if (mMainHandler.hasMessages(HIDE_ACTION_BAR)) {
- mMainHandler.removeMessages(HIDE_ACTION_BAR);
- mMainHandler.sendEmptyMessageDelayed(HIDE_ACTION_BAR,
+ if (mMainHandler.hasMessages(MSG_HIDE_ACTION_BAR)) {
+ mMainHandler.removeMessages(MSG_HIDE_ACTION_BAR);
+ mMainHandler.sendEmptyMessageDelayed(MSG_HIDE_ACTION_BAR,
SHOW_ACTION_BAR_TIMEOUT_MS);
}
// TODO: This callback is UI event callback, should always
@@ -496,7 +511,7 @@
* will be sent after a timeout to hide the action bar.
*/
private void setSystemBarsVisibility(boolean visible, boolean hideLater) {
- mMainHandler.removeMessages(HIDE_ACTION_BAR);
+ mMainHandler.removeMessages(MSG_HIDE_ACTION_BAR);
int currentSystemUIVisibility = mAboveFilmstripControlLayout.getSystemUiVisibility();
int newSystemUIVisibility = DEFAULT_SYSTEM_UI_VISIBILITY |
@@ -520,7 +535,7 @@
// Now delay hiding the bars
if (visible && hideLater) {
- mMainHandler.sendEmptyMessageDelayed(HIDE_ACTION_BAR, SHOW_ACTION_BAR_TIMEOUT_MS);
+ mMainHandler.sendEmptyMessageDelayed(MSG_HIDE_ACTION_BAR, SHOW_ACTION_BAR_TIMEOUT_MS);
}
}
@@ -612,9 +627,9 @@
@Override
public void onMenuVisibilityChanged(boolean isVisible) {
// If menu is showing, we need to make sure action bar does not go away.
- mMainHandler.removeMessages(HIDE_ACTION_BAR);
+ mMainHandler.removeMessages(MSG_HIDE_ACTION_BAR);
if (!isVisible) {
- mMainHandler.sendEmptyMessageDelayed(HIDE_ACTION_BAR, SHOW_ACTION_BAR_TIMEOUT_MS);
+ mMainHandler.sendEmptyMessageDelayed(MSG_HIDE_ACTION_BAR, SHOW_ACTION_BAR_TIMEOUT_MS);
}
}
@@ -935,6 +950,21 @@
}
@Override
+ public void enableKeepScreenOn(boolean enabled) {
+ if (mPaused) {
+ return;
+ }
+
+ mKeepScreenOn = enabled;
+ if (mKeepScreenOn) {
+ mMainHandler.removeMessages(MSG_CLEAR_SCREEN_ON_FLAG);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ } else {
+ keepScreenOnForAWhile();
+ }
+ }
+
+ @Override
public CameraProvider getCameraProvider() {
return mCameraController;
}
@@ -1220,7 +1250,7 @@
modeIndex == ModulesInfo.MODULE_VIDEO) {
mCameraAppUI.prepareModuleUI();
}
- mCurrentModule.init(this, mCameraModuleRootView);
+ mCurrentModule.init(this, isSecureCamera(), isCaptureIntent());
if (!mSecureCamera) {
mDataAdapter = mWrappedDataAdapter;
@@ -1283,7 +1313,9 @@
@Override
public void onUserInteraction() {
super.onUserInteraction();
- mCurrentModule.onUserInteraction();
+ if (!isFinishing()) {
+ keepScreenOnForAWhile();
+ }
}
@Override
@@ -1316,6 +1348,7 @@
mLocalImagesObserver.setActivityPaused(true);
mLocalVideosObserver.setActivityPaused(true);
+ resetScreenOn();
super.onPause();
}
@@ -1372,6 +1405,8 @@
mLocalImagesObserver.setActivityPaused(false);
mLocalVideosObserver.setActivityPaused(false);
+ keepScreenOnForAWhile();
+
mModeListView.startAccordionAnimation();
}
@@ -1581,8 +1616,7 @@
mCameraController.closeCamera();
}
mCurrentModeIndex = agent.getModuleId();
- mCurrentModule2 = agent.createModule(this);
- mCurrentModule = (CameraModule) mCurrentModule2;
+ mCurrentModule = (CameraModule) agent.createModule(this);
}
@Override
@@ -1632,7 +1666,7 @@
}
private void openModule(CameraModule module) {
- module.init(this, mCameraModuleRootView);
+ module.init(this, isSecureCamera(), isCaptureIntent());
module.resume();
}
@@ -1817,4 +1851,19 @@
public CameraModule getCurrentModule() {
return mCurrentModule;
}
+
+ private void keepScreenOnForAWhile() {
+ if (mKeepScreenOn) {
+ return;
+ }
+ mMainHandler.removeMessages(MSG_CLEAR_SCREEN_ON_FLAG);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ mMainHandler.sendEmptyMessageDelayed(MSG_CLEAR_SCREEN_ON_FLAG, SCREEN_DELAY_MS);
+ }
+
+ private void resetScreenOn() {
+ mKeepScreenOn = false;
+ mMainHandler.removeMessages(MSG_CLEAR_SCREEN_ON_FLAG);
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ }
}
diff --git a/src/com/android/camera/CameraModule.java b/src/com/android/camera/CameraModule.java
index 69d6cf9..f89c997 100644
--- a/src/com/android/camera/CameraModule.java
+++ b/src/com/android/camera/CameraModule.java
@@ -39,25 +39,12 @@
}
@Deprecated
- public abstract void init(CameraActivity activity, View frame);
-
- @Deprecated
public abstract void onPreviewFocusChanged(boolean previewFocused);
- @Deprecated
- public abstract void onConfigurationChanged(Configuration config);
-
- @Deprecated
- public abstract void onStop();
-
- @Deprecated
- public abstract void installIntentFilter();
-
- @Deprecated
- public abstract void onActivityResult(int requestCode, int resultCode, Intent data);
-
- @Deprecated
- public abstract boolean onBackPressed();
+ @Override
+ public boolean onBackPressed() {
+ return false;
+ }
@Deprecated
public abstract boolean onKeyDown(int keyCode, KeyEvent event);
@@ -69,24 +56,6 @@
public abstract void onSingleTapUp(View view, int x, int y);
@Deprecated
- public abstract void onPreviewTextureCopied();
-
- @Deprecated
- public abstract void onCaptureTextureCopied();
-
- @Deprecated
- public abstract void onUserInteraction();
-
- @Deprecated
- public abstract boolean updateStorageHintOnResume();
-
- @Deprecated
- public abstract void onOrientationChanged(int orientation);
-
- @Deprecated
- public abstract void onShowSwitcherPopup();
-
- @Deprecated
public abstract void onMediaSaverAvailable(MediaSaver s);
@Deprecated
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 03711ea..8537f05 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -18,13 +18,9 @@
import android.annotation.TargetApi;
import android.app.Activity;
-import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Rect;
@@ -51,7 +47,6 @@
import android.view.KeyEvent;
import android.view.OrientationEventListener;
import android.view.View;
-import android.view.WindowManager;
import com.android.camera.app.CameraManager.CameraAFCallback;
import com.android.camera.app.CameraManager.CameraAFMoveCallback;
@@ -60,7 +55,6 @@
import com.android.camera.app.CameraManager.CameraShutterCallback;
import com.android.camera.PhotoModule.NamedImages.NamedEntity;
import com.android.camera.app.AppController;
-import com.android.camera.app.CameraServices;
import com.android.camera.app.MediaSaver;
import com.android.camera.exif.ExifInterface;
import com.android.camera.exif.ExifTag;
@@ -70,13 +64,11 @@
import com.android.camera.settings.SettingsManager.DefaultCameraIdSetting;
import com.android.camera.settings.SettingsManager.ExposureSetting;
import com.android.camera.settings.SettingsManager.FlashSetting;
-import com.android.camera.settings.SettingsManager.FocusModeSetting;
import com.android.camera.settings.SettingsManager.HintSetting;
import com.android.camera.settings.SettingsManager.HdrSetting;
import com.android.camera.settings.SettingsManager.HdrPlusSetting;
import com.android.camera.settings.SettingsManager.LocationSetting;
import com.android.camera.settings.SettingsManager.PictureSizeSetting;
-import com.android.camera.settings.SettingsManager.SettingsListener;
import com.android.camera.settings.SettingsManager.TimerSetting;
import com.android.camera.settings.SettingsManager.TimerSoundSetting;
import com.android.camera.settings.SettingsManager.SceneModeSetting;
@@ -113,17 +105,17 @@
// We number the request code from 1000 to avoid collision with Gallery.
private static final int REQUEST_CROP = 1000;
- private static final int SETUP_PREVIEW = 1;
- private static final int FIRST_TIME_INIT = 2;
- private static final int CLEAR_SCREEN_DELAY = 3;
- private static final int SET_CAMERA_PARAMETERS_WHEN_IDLE = 4;
- private static final int SHOW_TAP_TO_FOCUS_TOAST = 5;
- private static final int SWITCH_CAMERA = 6;
- private static final int SWITCH_CAMERA_START_ANIMATION = 7;
- private static final int CAMERA_OPEN_DONE = 8;
- private static final int OPEN_CAMERA_FAIL = 9;
- private static final int CAMERA_DISABLED = 10;
- private static final int SWITCH_TO_GCAM_MODULE = 11;
+ // Messages defined for the UI thread handler.
+ private static final int MSG_SETUP_PREVIEW = 1;
+ private static final int MSG_FIRST_TIME_INIT = 2;
+ private static final int MSG_SET_CAMERA_PARAMETERS_WHEN_IDLE = 3;
+ private static final int MSG_SHOW_TAP_TO_FOCUS_TOAST = 4;
+ private static final int MSG_SWITCH_CAMERA = 5;
+ private static final int MSG_SWITCH_CAMERA_START_ANIMATION = 6;
+ private static final int MSG_CAMERA_OPEN_DONE = 7;
+ private static final int MSG_OPEN_CAMERA_FAIL = 8;
+ private static final int MSG_CAMERA_DISABLED = 9;
+ private static final int MSG_SWITCH_TO_GCAM_MODULE = 10;
// The subset of parameters we need to update in setCameraParameters().
private static final int UPDATE_PARAM_INITIALIZE = 1;
@@ -173,7 +165,6 @@
private static final String sTempCropFilename = "crop-temp";
- private ContentProviderClient mMediaProviderClient;
private boolean mFaceDetectionStarted = false;
// mCropValue and mSaveUri are used only if isImageCaptureIntent() is true.
@@ -312,63 +303,57 @@
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
- case SETUP_PREVIEW: {
+ case MSG_SETUP_PREVIEW: {
setupPreview();
break;
}
- case CLEAR_SCREEN_DELAY: {
- mActivity.getWindow().clearFlags(
- WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- break;
- }
-
- case FIRST_TIME_INIT: {
+ case MSG_FIRST_TIME_INIT: {
initializeFirstTime();
break;
}
- case SET_CAMERA_PARAMETERS_WHEN_IDLE: {
+ case MSG_SET_CAMERA_PARAMETERS_WHEN_IDLE: {
setCameraParametersWhenIdle(0);
break;
}
- case SHOW_TAP_TO_FOCUS_TOAST: {
+ case MSG_SHOW_TAP_TO_FOCUS_TOAST: {
showTapToFocusToast();
break;
}
- case SWITCH_CAMERA: {
+ case MSG_SWITCH_CAMERA: {
switchCamera();
break;
}
- case SWITCH_CAMERA_START_ANIMATION: {
+ case MSG_SWITCH_CAMERA_START_ANIMATION: {
// TODO: Need to revisit
// ((CameraScreenNail) mActivity.mCameraScreenNail).animateSwitchCamera();
break;
}
- case CAMERA_OPEN_DONE: {
+ case MSG_CAMERA_OPEN_DONE: {
onCameraOpened();
break;
}
- case OPEN_CAMERA_FAIL: {
+ case MSG_OPEN_CAMERA_FAIL: {
mOpenCameraFail = true;
CameraUtil.showErrorAndFinish(mActivity,
R.string.cannot_connect_camera);
break;
}
- case CAMERA_DISABLED: {
+ case MSG_CAMERA_DISABLED: {
mCameraDisabled = true;
CameraUtil.showErrorAndFinish(mActivity,
R.string.camera_disabled);
break;
}
- case SWITCH_TO_GCAM_MODULE: {
+ case MSG_SWITCH_TO_GCAM_MODULE: {
mActivity.onModeSelected(ModeListView.MODE_GCAM);
}
}
@@ -382,10 +367,11 @@
super(app);
}
+
@Override
- public void init(CameraActivity activity, View parent) {
- mActivity = activity;
- mUI = new PhotoUI(activity, this, parent);
+ public void init(AppController app, boolean isSecureCamera, boolean isCaptureIntent) {
+ mActivity = (CameraActivity) app.getAndroidContext();
+ mUI = new PhotoUI(mActivity, this, app.getModuleLayoutRoot());
SettingsManager settingsManager = mActivity.getSettingsManager();
mCameraId = Integer.parseInt(settingsManager.get(
@@ -480,7 +466,7 @@
mFocusManager.setMirror(mMirror);
// Start switch camera animation. Post a message because
// onFrameAvailable from the old camera may already exist.
- mHandler.sendEmptyMessage(SWITCH_CAMERA_START_ANIMATION);
+ mHandler.sendEmptyMessage(MSG_SWITCH_CAMERA_START_ANIMATION);
}
// either open a new camera or switch cameras
@@ -511,16 +497,6 @@
settingsManager.setDefault(new ExposureSetting());
}
- private void keepMediaProviderInstance() {
- // We want to keep a reference to MediaProvider in camera's lifecycle.
- // TODO: Utilize mMediaProviderClient instance to replace
- // ContentResolver calls.
- if (mMediaProviderClient == null) {
- mMediaProviderClient = mContentResolver
- .acquireContentProviderClient(MediaStore.AUTHORITY);
- }
- }
-
// Snapshots can only be taken after this is called. It should be called
// once only. We could have done these things in onCreate() but we want to
// make preview screen appear as soon as possible.
@@ -533,8 +509,6 @@
SettingsController settingsController = mActivity.getSettingsController();
settingsController.syncLocationManager();
- keepMediaProviderInstance();
-
mUI.initializeFirstTime();
MediaSaver s = getServices().getMediaSaver();
// We set the listener only when both service and shutterbutton
@@ -564,7 +538,6 @@
}
mNamedImages = new NamedImages();
mUI.initializeSecondTime(mParameters);
- keepMediaProviderInstance();
}
private void showTapToFocusToastIfNeeded() {
@@ -574,7 +547,7 @@
// CONVERT THIS SETTING TO A STRING
if (mFocusAreaSupported && showHint) {
// Delay the toast for one second to wait for orientation.
- mHandler.sendEmptyMessageDelayed(SHOW_TAP_TO_FOCUS_TOAST, 1000);
+ mHandler.sendEmptyMessageDelayed(MSG_SHOW_TAP_TO_FOCUS_TOAST, 1000);
}
}
@@ -947,8 +920,8 @@
mOrientation = CameraUtil.roundOrientation(orientation, mOrientation);
// Show the toast after getting the first orientation changed.
- if (mHandler.hasMessages(SHOW_TAP_TO_FOCUS_TOAST)) {
- mHandler.removeMessages(SHOW_TAP_TO_FOCUS_TOAST);
+ if (mHandler.hasMessages(MSG_SHOW_TAP_TO_FOCUS_TOAST)) {
+ mHandler.removeMessages(MSG_SHOW_TAP_TO_FOCUS_TOAST);
showTapToFocusToast();
}
}
@@ -979,14 +952,6 @@
}
@Override
- public void onStop() {
- if (mMediaProviderClient != null) {
- mMediaProviderClient.release();
- mMediaProviderClient = null;
- }
- }
-
- @Override
public void onCaptureCancelled() {
mActivity.setResultEx(Activity.RESULT_CANCELED, new Intent());
mActivity.finish();
@@ -1148,16 +1113,6 @@
}
}
- @Override
- public void installIntentFilter() {
- // Do nothing.
- }
-
- @Override
- public boolean updateStorageHintOnResume() {
- return mFirstTimeInitialized;
- }
-
private void onResumeTasks() {
Log.v(TAG, "Executing onResumeTasks.");
if (mOpenCameraFail || mCameraDisabled) return;
@@ -1173,12 +1128,11 @@
// If first time initialization is not finished, put it in the
// message queue.
if (!mFirstTimeInitialized) {
- mHandler.sendEmptyMessage(FIRST_TIME_INIT);
+ mHandler.sendEmptyMessage(MSG_FIRST_TIME_INIT);
} else {
initializeSecondTime();
}
mUI.initDisplayChangeListener();
- keepScreenOnAwhile();
UsageStatistics.onContentViewChanged(
UsageStatistics.COMPONENT_CAMERA, "PhotoModule");
@@ -1217,11 +1171,6 @@
}
@Override
- public void init(AppController app, boolean isSecureCamera, boolean isCaptureIntent) {
- init((CameraActivity) app.getAndroidContext(), app.getModuleLayoutRoot());
- }
-
- @Override
public void resume() {
mPaused = false;
// Add delay on resume from lock screen only, in order to to speed up
@@ -1281,7 +1230,7 @@
mHandler.removeCallbacksAndMessages(null);
closeCamera();
- resetScreenOn();
+ mActivity.enableKeepScreenOn(false);
mUI.onPause();
mPendingSwitchCameraId = -1;
@@ -1316,29 +1265,6 @@
}
}
- @Override
- public void onActivityResult(
- int requestCode, int resultCode, Intent data) {
- switch (requestCode) {
- case REQUEST_CROP: {
- Intent intent = new Intent();
- if (data != null) {
- Bundle extras = data.getExtras();
- if (extras != null) {
- intent.putExtras(extras);
- }
- }
- mActivity.setResultEx(resultCode, intent);
- mActivity.finish();
-
- File path = mActivity.getFileStreamPath(sTempCropFilename);
- path.delete();
-
- break;
- }
- }
- }
-
private boolean canTakePicture() {
return isCameraIdle() && (mActivity.getStorageSpaceBytes() > Storage.LOW_STORAGE_THRESHOLD_BYTES);
}
@@ -1605,8 +1531,7 @@
setMeteringAreasIfSupported();
// Set picture size.
- String pictureSize = settingsManager.get(
- new PictureSizeSetting());
+ String pictureSize = settingsManager.get(new PictureSizeSetting());
if (pictureSize == null) {
//TODO: deprecate CameraSettings.
CameraSettings.initialCameraPictureSize(
@@ -1690,8 +1615,7 @@
// still supported by latest driver, if not, ignore the settings.
// Set exposure compensation
- int value = Integer.parseInt(
- settingsManager.get(new ExposureSetting()));
+ int value = Integer.parseInt(settingsManager.get(new ExposureSetting()));
int max = mParameters.getMaxExposureCompensation();
int min = mParameters.getMinExposureCompensation();
if (value >= min && value <= max) {
@@ -1715,8 +1639,7 @@
}
// Set white balance parameter.
- String whiteBalance = settingsManager.get(
- new WhiteBalanceSetting());
+ String whiteBalance = settingsManager.get(new WhiteBalanceSetting());
if (CameraUtil.isSupported(whiteBalance,
mParameters.getSupportedWhiteBalance())) {
mParameters.setWhiteBalance(whiteBalance);
@@ -1773,7 +1696,7 @@
// Switch to gcam module if HDR+ was selected
if (doModeSwitch && !mIsImageCaptureIntent) {
- mHandler.sendEmptyMessage(SWITCH_TO_GCAM_MODULE);
+ mHandler.sendEmptyMessage(MSG_SWITCH_TO_GCAM_MODULE);
}
}
@@ -1791,9 +1714,8 @@
updateSceneMode();
mUpdateSet = 0;
} else {
- if (!mHandler.hasMessages(SET_CAMERA_PARAMETERS_WHEN_IDLE)) {
- mHandler.sendEmptyMessageDelayed(
- SET_CAMERA_PARAMETERS_WHEN_IDLE, 1000);
+ if (!mHandler.hasMessages(MSG_SET_CAMERA_PARAMETERS_WHEN_IDLE)) {
+ mHandler.sendEmptyMessageDelayed(MSG_SET_CAMERA_PARAMETERS_WHEN_IDLE, 1000);
}
}
}
@@ -1846,33 +1768,6 @@
switchCamera();
}
- // Preview texture has been copied. Now camera can be released and the
- // animation can be started.
- @Override
- public void onPreviewTextureCopied() {
- mHandler.sendEmptyMessage(SWITCH_CAMERA);
- }
-
- @Override
- public void onCaptureTextureCopied() {
- }
-
- @Override
- public void onUserInteraction() {
- if (!mActivity.isFinishing()) keepScreenOnAwhile();
- }
-
- private void resetScreenOn() {
- mHandler.removeMessages(CLEAR_SCREEN_DELAY);
- mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- }
-
- private void keepScreenOnAwhile() {
- mHandler.removeMessages(CLEAR_SCREEN_DELAY);
- mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- mHandler.sendEmptyMessageDelayed(CLEAR_SCREEN_DELAY, SCREEN_DELAY);
- }
-
@Override
public void onOverriddenPreferencesClicked() {
if (mPaused) return;
@@ -1905,11 +1800,6 @@
}
@Override
- public void onShowSwitcherPopup() {
- mUI.onShowSwitcherPopup();
- }
-
- @Override
public int onZoomChanged(int index) {
// Not useful to change zoom value when the activity is paused.
if (mPaused) return index;
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 58de510..ecf2193 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -51,13 +51,11 @@
import android.view.KeyEvent;
import android.view.OrientationEventListener;
import android.view.View;
-import android.view.WindowManager;
import android.widget.Toast;
import com.android.camera.app.AppController;
import com.android.camera.app.CameraManager.CameraPictureCallback;
import com.android.camera.app.CameraManager.CameraProxy;
-import com.android.camera.app.CameraServices;
import com.android.camera.app.MediaSaver;
import com.android.camera.exif.ExifInterface;
import com.android.camera.module.ModuleController;
@@ -85,15 +83,13 @@
private static final String TAG = "CAM_VideoModule";
- private static final int CHECK_DISPLAY_ROTATION = 3;
- private static final int CLEAR_SCREEN_DELAY = 4;
- private static final int UPDATE_RECORD_TIME = 5;
- private static final int ENABLE_SHUTTER_BUTTON = 6;
- private static final int SHOW_TAP_TO_SNAPSHOT_TOAST = 7;
- private static final int SWITCH_CAMERA = 8;
- private static final int SWITCH_CAMERA_START_ANIMATION = 9;
-
- private static final int SCREEN_DELAY = 2 * 60 * 1000;
+ // Messages defined for the UI thread handler.
+ private static final int MSG_CHECK_DISPLAY_ROTATION = 4;
+ private static final int MSG_UPDATE_RECORD_TIME = 5;
+ private static final int MSG_ENABLE_SHUTTER_BUTTON = 6;
+ private static final int MSG_SHOW_TAP_TO_SNAPSHOT_TOAST = 7;
+ private static final int MSG_SWITCH_CAMERA = 8;
+ private static final int MSG_SWITCH_CAMERA_START_ANIMATION = 9;
private static final long SHUTTER_BUTTON_TIMEOUT = 500L; // 500ms
@@ -219,22 +215,16 @@
public void handleMessage(Message msg) {
switch (msg.what) {
- case ENABLE_SHUTTER_BUTTON:
+ case MSG_ENABLE_SHUTTER_BUTTON:
mUI.enableShutter(true);
break;
- case CLEAR_SCREEN_DELAY: {
- mActivity.getWindow().clearFlags(
- WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- break;
- }
-
- case UPDATE_RECORD_TIME: {
+ case MSG_UPDATE_RECORD_TIME: {
updateRecordingTime();
break;
}
- case CHECK_DISPLAY_ROTATION: {
+ case MSG_CHECK_DISPLAY_ROTATION: {
// Restart the preview if display rotation has changed.
// Sometimes this happens when the device is held upside
// down and camera app is opened. Rotation animation will
@@ -245,22 +235,22 @@
startPreview();
}
if (SystemClock.uptimeMillis() - mOnResumeTime < 5000) {
- mHandler.sendEmptyMessageDelayed(CHECK_DISPLAY_ROTATION, 100);
+ mHandler.sendEmptyMessageDelayed(MSG_CHECK_DISPLAY_ROTATION, 100);
}
break;
}
- case SHOW_TAP_TO_SNAPSHOT_TOAST: {
+ case MSG_SHOW_TAP_TO_SNAPSHOT_TOAST: {
showTapToSnapshotToast();
break;
}
- case SWITCH_CAMERA: {
+ case MSG_SWITCH_CAMERA: {
switchCamera();
break;
}
- case SWITCH_CAMERA_START_ANIMATION: {
+ case MSG_SWITCH_CAMERA_START_ANIMATION: {
//TODO:
//((CameraScreenNail) mActivity.mCameraScreenNail).animateSwitchCamera();
@@ -323,10 +313,11 @@
}
}
+
@Override
- public void init(CameraActivity activity, View root) {
- mActivity = activity;
- mUI = new VideoUI(activity, this, root);
+ public void init(AppController app, boolean isSecureCamera, boolean isCaptureIntent) {
+ mActivity = (CameraActivity) app.getAndroidContext();
+ mUI = new VideoUI(mActivity, this, app.getModuleLayoutRoot());
mPreferences = new ComboPreferences(mActivity);
CameraSettings.upgradeGlobalPreferences(mPreferences.getGlobal());
mCameraId = getPreferredCameraId(mPreferences);
@@ -394,9 +385,6 @@
}
}
- @Override
- public void onStop() {}
-
private void loadCameraPreferences() {
CameraSettings settings = new CameraSettings(mActivity, mParameters,
mCameraId, mActivity.getCameraProvider().getCameraInfo());
@@ -423,8 +411,8 @@
}
// Show the toast after getting the first orientation changed.
- if (mHandler.hasMessages(SHOW_TAP_TO_SNAPSHOT_TOAST)) {
- mHandler.removeMessages(SHOW_TAP_TO_SNAPSHOT_TOAST);
+ if (mHandler.hasMessages(MSG_SHOW_TAP_TO_SNAPSHOT_TOAST)) {
+ mHandler.removeMessages(MSG_SHOW_TAP_TO_SNAPSHOT_TOAST);
showTapToSnapshotToast();
}
}
@@ -533,8 +521,7 @@
// mode and recording is stopped. It'll be re-enabled when
// re-take button is clicked.
if (!(mIsVideoCaptureIntent && stop)) {
- mHandler.sendEmptyMessageDelayed(
- ENABLE_SHUTTER_BUTTON, SHUTTER_BUTTON_TIMEOUT);
+ mHandler.sendEmptyMessageDelayed(MSG_ENABLE_SHUTTER_BUTTON, SHUTTER_BUTTON_TIMEOUT);
}
}
@@ -623,12 +610,10 @@
}
private void resizeForPreviewAspectRatio() {
- mUI.setAspectRatio(
- (double) mProfile.videoFrameWidth / mProfile.videoFrameHeight);
+ mUI.setAspectRatio((double) mProfile.videoFrameWidth / mProfile.videoFrameHeight);
}
- @Override
- public void installIntentFilter() {
+ private void installIntentFilter() {
// install an intent filter to receive SD card related events.
IntentFilter intentFilter =
new IntentFilter(Intent.ACTION_MEDIA_EJECT);
@@ -730,13 +715,6 @@
}
@Override
- public void onUserInteraction() {
- if (!mMediaRecorderRecording && !mActivity.isFinishing()) {
- keepScreenOnAwhile();
- }
- }
-
- @Override
public boolean onBackPressed() {
if (mPaused) return true;
if (mMediaRecorderRecording) {
@@ -1126,7 +1104,7 @@
mUI.showRecordingUI(true);
updateRecordingTime();
- keepScreenOn();
+ mActivity.enableKeepScreenOn(true);
UsageStatistics.onEvent(UsageStatistics.COMPONENT_CAMERA,
UsageStatistics.ACTION_CAPTURE_START, "Video");
}
@@ -1185,7 +1163,8 @@
Log.v(TAG, "stopVideoRecording: Setting current video filename: "
+ mCurrentVideoFilename);
AccessibilityUtils.makeAnnouncement(mUI.getShutterButton(),
- mActivity.getString(R.string.video_recording_stopped));
+ mActivity.getAndroidContext().getString(R.string
+ .video_recording_stopped));
} catch (RuntimeException e) {
Log.e(TAG, "stop fail", e);
if (mVideoFilename != null) deleteVideoFile(mVideoFilename);
@@ -1208,7 +1187,7 @@
// The orientation was fixed during video recording. Now make it
// reflect the device orientation as video recording is stopped.
mUI.setOrientationIndicator(0, true);
- keepScreenOnAwhile();
+ mActivity.enableKeepScreenOn(false);
if (shouldAddToMediaStoreNow && !fail) {
if (mVideoFileDescriptor == null) {
saveVideo();
@@ -1233,28 +1212,11 @@
// by MediaRecorder.
if (!mPaused) mParameters = mCameraDevice.getParameters();
UsageStatistics.onEvent(UsageStatistics.COMPONENT_CAMERA,
- fail ? UsageStatistics.ACTION_CAPTURE_FAIL :
- UsageStatistics.ACTION_CAPTURE_DONE, "Video",
- SystemClock.uptimeMillis() - mRecordingStartTime);
+ fail ? UsageStatistics.ACTION_CAPTURE_FAIL : UsageStatistics.ACTION_CAPTURE_DONE,
+ "Video", SystemClock.uptimeMillis() - mRecordingStartTime);
return fail;
}
- private void resetScreenOn() {
- mHandler.removeMessages(CLEAR_SCREEN_DELAY);
- mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- }
-
- private void keepScreenOnAwhile() {
- mHandler.removeMessages(CLEAR_SCREEN_DELAY);
- mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- mHandler.sendEmptyMessageDelayed(CLEAR_SCREEN_DELAY, SCREEN_DELAY);
- }
-
- private void keepScreenOn() {
- mHandler.removeMessages(CLEAR_SCREEN_DELAY);
- mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- }
-
private static String millisecondToTimeString(long milliSeconds, boolean displayCentiSeconds) {
long seconds = milliSeconds / 1000; // round down to compute seconds
long minutes = seconds / 60;
@@ -1352,8 +1314,7 @@
}
long actualNextUpdateDelay = targetNextUpdateDelay - (delta % targetNextUpdateDelay);
- mHandler.sendEmptyMessageDelayed(
- UPDATE_RECORD_TIME, actualNextUpdateDelay);
+ mHandler.sendEmptyMessageDelayed(MSG_UPDATE_RECORD_TIME, actualNextUpdateDelay);
}
private static boolean isSupported(String value, List<String> supported) {
@@ -1436,18 +1397,9 @@
}
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- // Do nothing.
- }
-
- @Override
- public void init(AppController app, boolean isSecureCamera, boolean isCaptureIntent) {
- init((CameraActivity) app.getAndroidContext(), app.getModuleLayoutRoot());
- }
-
- @Override
public void resume() {
mPaused = false;
+ installIntentFilter();
mUI.enableShutter(false);
mZoomValue = 0;
@@ -1462,8 +1414,6 @@
mUI.initDisplayChangeListener();
- keepScreenOnAwhile();
-
// Initialize location service.
boolean recordLocation = RecordLocationPreference.get(mPreferences,
mContentResolver);
@@ -1471,7 +1421,7 @@
if (mPreviewing) {
mOnResumeTime = SystemClock.uptimeMillis();
- mHandler.sendEmptyMessageDelayed(CHECK_DISPLAY_ROTATION, 100);
+ mHandler.sendEmptyMessageDelayed(MSG_CHECK_DISPLAY_ROTATION, 100);
}
UsageStatistics.onContentViewChanged(
@@ -1501,13 +1451,12 @@
mActivity.unregisterReceiver(mReceiver);
mReceiver = null;
}
- resetScreenOn();
if (mLocationManager != null) mLocationManager.recordLocation(false);
- mHandler.removeMessages(CHECK_DISPLAY_ROTATION);
- mHandler.removeMessages(SWITCH_CAMERA);
- mHandler.removeMessages(SWITCH_CAMERA_START_ANIMATION);
+ mHandler.removeMessages(MSG_CHECK_DISPLAY_ROTATION);
+ mHandler.removeMessages(MSG_SWITCH_CAMERA);
+ mHandler.removeMessages(MSG_SWITCH_CAMERA_START_ANIMATION);
mPendingSwitchCameraId = -1;
mSwitchingCamera = false;
mPreferenceRead = false;
@@ -1601,21 +1550,10 @@
// Start switch camera animation. Post a message because
// onFrameAvailable from the old camera may already exist.
- mHandler.sendEmptyMessage(SWITCH_CAMERA_START_ANIMATION);
+ mHandler.sendEmptyMessage(MSG_SWITCH_CAMERA_START_ANIMATION);
mUI.updateOnScreenIndicators(mParameters, mPreferences);
}
- // Preview texture has been copied. Now camera can be released and the
- // animation can be started.
- @Override
- public void onPreviewTextureCopied() {
- mHandler.sendEmptyMessage(SWITCH_CAMERA);
- }
-
- @Override
- public void onCaptureTextureCopied() {
- }
-
private void initializeVideoSnapshot() {
if (mParameters == null) return;
if (CameraUtil.isVideoSnapshotSupported(mParameters) && !mIsVideoCaptureIntent) {
@@ -1623,7 +1561,7 @@
if (mPreferences.getBoolean(
CameraSettings.KEY_VIDEO_FIRST_USE_HINT_SHOWN, true)) {
// Delay the toast for one second to wait for orientation.
- mHandler.sendEmptyMessageDelayed(SHOW_TAP_TO_SNAPSHOT_TOAST, 1000);
+ mHandler.sendEmptyMessageDelayed(MSG_SHOW_TAP_TO_SNAPSHOT_TOAST, 1000);
}
}
}
@@ -1750,11 +1688,6 @@
editor.apply();
}
- @Override
- public boolean updateStorageHintOnResume() {
- return true;
- }
-
// required by OnPreferenceChangedListener
@Override
public void onCameraPickerClicked(int cameraId) {
@@ -1770,11 +1703,6 @@
}
@Override
- public void onShowSwitcherPopup() {
- mUI.onShowSwitcherPopup();
- }
-
- @Override
public void onMediaSaverAvailable(MediaSaver s) {
// do nothing.
}
diff --git a/src/com/android/camera/WideAnglePanoramaModule.java b/src/com/android/camera/WideAnglePanoramaModule.java
index a48c5d0..22756d1 100644
--- a/src/com/android/camera/WideAnglePanoramaModule.java
+++ b/src/com/android/camera/WideAnglePanoramaModule.java
@@ -18,7 +18,6 @@
import android.content.ContentResolver;
import android.content.Context;
-import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
@@ -42,11 +41,9 @@
import android.view.OrientationEventListener;
import android.view.View;
import android.view.ViewGroup;
-import android.view.WindowManager;
import com.android.camera.app.CameraManager.CameraProxy;
import com.android.camera.app.AppController;
-import com.android.camera.app.CameraServices;
import com.android.camera.app.MediaSaver;
import com.android.camera.data.LocalData;
import com.android.camera.exif.ExifInterface;
@@ -77,8 +74,7 @@
private static final int MSG_LOW_RES_FINAL_MOSAIC_READY = 1;
private static final int MSG_GENERATE_FINAL_MOSAIC_ERROR = 2;
private static final int MSG_END_DIALOG_RESET_TO_PREVIEW = 3;
- private static final int MSG_CLEAR_SCREEN_DELAY = 4;
- private static final int MSG_RESET_TO_PREVIEW = 5;
+ private static final int MSG_RESET_TO_PREVIEW = 4;
private static final int SCREEN_DELAY = 2 * 60 * 1000;
@@ -212,9 +208,9 @@
}
@Override
- public void init(CameraActivity activity, View parent) {
- mActivity = activity;
- mRootView = parent;
+ public void init(AppController app, boolean isSecureCamera, boolean isCaptureIntent) {
+ mActivity = (CameraActivity) app.getAndroidContext();
+ mRootView = app.getModuleLayoutRoot();
mCaptureState = CAPTURE_STATE_VIEWFINDER;
mUI = new WideAnglePanoramaUI(mActivity, this, (ViewGroup) mRootView);
@@ -306,10 +302,6 @@
resetToPreviewIfPossible();
clearMosaicFrameProcessorIfNeeded();
break;
- case MSG_CLEAR_SCREEN_DELAY:
- mActivity.getWindow().clearFlags(WindowManager.LayoutParams.
- FLAG_KEEP_SCREEN_ON);
- break;
case MSG_RESET_TO_PREVIEW:
resetToPreviewIfPossible();
break;
@@ -539,7 +531,7 @@
mUI.setMaxCaptureProgress(DEFAULT_SWEEP_ANGLE);
mUI.showCaptureProgress();
mDeviceOrientationAtCapture = mDeviceOrientation;
- keepScreenOn();
+ mActivity.enableKeepScreenOn(true);
// TODO: mActivity.getOrientationManager().lockOrientation();
mActivity.lockOrientation();
int degrees = CameraUtil.getDisplayRotation(mActivity);
@@ -579,7 +571,7 @@
}
});
}
- keepScreenOnAwhile();
+ mActivity.enableKeepScreenOn(false);
}
@Override
@@ -810,12 +802,6 @@
}
@Override
- public void init(AppController app, boolean isSecureCamera, boolean isCaptureIntent) {
- // TODO: implement this.
- init((CameraActivity) app.getAndroidContext(), app.getModuleLayoutRoot());
- }
-
- @Override
public void resume() {
mPaused = false;
mOrientationEventListener.enable();
@@ -848,7 +834,6 @@
configMosaicPreview();
mActivity.updateStorageSpaceAndHint();
}
- keepScreenOnAwhile();
// Initialize location service.
boolean recordLocation = RecordLocationPreference.get(mPreferences,
@@ -891,7 +876,7 @@
mWaitProcessorTask.cancel(true);
mWaitProcessorTask = null;
}
- resetScreenOn();
+ mActivity.enableKeepScreenOn(false);
mUI.removeDisplayChangeListener();
if (mSoundPlayer != null) {
mSoundPlayer.release();
@@ -1015,11 +1000,6 @@
}
@Override
- public void onUserInteraction() {
- if (mCaptureState != CAPTURE_STATE_MOSAIC) keepScreenOnAwhile();
- }
-
- @Override
public boolean onBackPressed() {
// If panorama is generating low res or high res mosaic, ignore back
// key. So the activity will not be destroyed.
@@ -1027,22 +1007,6 @@
return false;
}
- private void resetScreenOn() {
- mMainHandler.removeMessages(MSG_CLEAR_SCREEN_DELAY);
- mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- }
-
- private void keepScreenOnAwhile() {
- mMainHandler.removeMessages(MSG_CLEAR_SCREEN_DELAY);
- mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- mMainHandler.sendEmptyMessageDelayed(MSG_CLEAR_SCREEN_DELAY, SCREEN_DELAY);
- }
-
- private void keepScreenOn() {
- mMainHandler.removeMessages(MSG_CLEAR_SCREEN_DELAY);
- mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- }
-
private class WaitProcessorTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
@@ -1081,19 +1045,6 @@
}
@Override
- public void onStop() {
- }
-
- @Override
- public void installIntentFilter() {
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- }
-
-
- @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return false;
}
@@ -1108,23 +1059,6 @@
}
@Override
- public void onPreviewTextureCopied() {
- }
-
- @Override
- public void onCaptureTextureCopied() {
- }
-
- @Override
- public boolean updateStorageHintOnResume() {
- return false;
- }
-
- @Override
- public void onShowSwitcherPopup() {
- }
-
- @Override
public void onMediaSaverAvailable(MediaSaver s) {
// do nothing.
}
diff --git a/src/com/android/camera/app/AppController.java b/src/com/android/camera/app/AppController.java
index 7029492..5c22b74 100644
--- a/src/com/android/camera/app/AppController.java
+++ b/src/com/android/camera/app/AppController.java
@@ -161,6 +161,13 @@
/********************** App-level resources **********************/
/**
+ * Keeps the screen turned on.
+ *
+ * @param enabled Whether to keep the screen on.
+ */
+ public void enableKeepScreenOn(boolean enabled);
+
+ /**
* Returns the {@link com.android.camera.app.CameraProvider}.
*/
public CameraProvider getCameraProvider();
diff --git a/src/com/android/camera/module/ModuleController.java b/src/com/android/camera/module/ModuleController.java
index a0aedbf..c427d8d 100644
--- a/src/com/android/camera/module/ModuleController.java
+++ b/src/com/android/camera/module/ModuleController.java
@@ -80,6 +80,13 @@
*/
public void onOrientationChanged(int orientation);
+ /**
+ * Called when back key is pressed.
+ *
+ * @return Whether the back key event is processed.
+ */
+ public abstract boolean onBackPressed();
+
/********************** App-level resources **********************/
/**