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 **********************/
 
     /**