diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index f3e5d6b..6d93d0b 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -438,8 +438,6 @@
         // This must be done before startPreview.
         mIsImageCaptureIntent = isImageCaptureIntent();
 
-        mActivity.getCameraProvider().requestCamera(mCameraId);
-
         mQuickCapture = mActivity.getIntent().getBooleanExtra(EXTRA_QUICK_CAPTURE, false);
         mLocationManager = mActivity.getLocationManager();
         mSensorManager = (SensorManager) (mActivity.getSystemService(Context.SENSOR_SERVICE));
@@ -1530,6 +1528,16 @@
             return;
         }
         Log.v(TAG, "Executing onResumeTasks.");
+
+        mCountdownSoundPlayer.loadSounds();
+        if (mFocusManager != null) {
+            // If camera is not open when resume is called, focus manager will
+            // not be initialized yet, in which case it will start listening to
+            // preview area size change later in the initialization.
+            mAppController.addPreviewAreaSizeChangedListener(mFocusManager);
+        }
+        mAppController.addPreviewAreaSizeChangedListener(mUI);
+
         CameraProvider camProvider = mActivity.getCameraProvider();
         if (camProvider == null) {
             // No camera provider, the Activity is destroyed already.
@@ -1560,6 +1568,9 @@
         if (msensor != null) {
             mSensorManager.registerListener(this, msensor, SensorManager.SENSOR_DELAY_NORMAL);
         }
+
+        getServices().getRemoteShutterListener().onModuleReady(this);
+        SessionStatsCollector.instance().sessionActive(true);
     }
 
     /**
@@ -1596,25 +1607,23 @@
         mAppController.addPreviewAreaSizeChangedListener(mFocusManager);
     }
 
+    /**
+     * @return Whether we are resuming from within the lockscreen.
+     */
+    private boolean isResumeFromLockscreen() {
+        String action = mActivity.getIntent().getAction();
+        return (MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA.equals(action)
+                || MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE.equals(action));
+    }
+
     @Override
     public void resume() {
         mPaused = false;
-        mCountdownSoundPlayer.loadSounds();
-        if (mFocusManager != null) {
-            // If camera is not open when resume is called, focus manager will
-            // not
-            // be initialized yet, in which case it will start listening to
-            // preview area size change later in the initialization.
-            mAppController.addPreviewAreaSizeChangedListener(mFocusManager);
-        }
-        mAppController.addPreviewAreaSizeChangedListener(mUI);
 
         // Add delay on resume from lock screen only, in order to to speed up
         // the onResume --> onPause --> onResume cycle from lock screen.
         // Don't do always because letting go of thread can cause delay.
-        String action = mActivity.getIntent().getAction();
-        if (MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA.equals(action)
-                || MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE.equals(action)) {
+        if (isResumeFromLockscreen()) {
             Log.v(TAG, "On resume, from lock screen.");
             // Note: onPauseAfterSuper() will delete this runnable, so we will
             // at most have 1 copy queued up.
@@ -1623,8 +1632,6 @@
             Log.v(TAG, "On resume.");
             onResumeTasks();
         }
-        getServices().getRemoteShutterListener().onModuleReady(this);
-        SessionStatsCollector.instance().sessionActive(true);
     }
 
     @Override
diff --git a/src/com/android/camera/app/CameraController.java b/src/com/android/camera/app/CameraController.java
index f23cfaa..3d83634 100644
--- a/src/com/android/camera/app/CameraController.java
+++ b/src/com/android/camera/app/CameraController.java
@@ -39,7 +39,7 @@
     private CameraManager.CameraOpenCallback mCallbackReceiver;
     private final Handler mCallbackHandler;
     private final CameraManager mCameraManager;
-    private CameraDeviceInfo mInfo;
+    private final CameraDeviceInfo mInfo;
 
     private CameraManager.CameraProxy mCameraProxy;
     private int mRequestingCameraId = EMPTY_REQUEST;
@@ -232,7 +232,11 @@
      * TODO: Make this method package private.
      */
     public void closeCamera(boolean synced) {
-        Log.v(TAG, "closing camera");
+        if (mCameraProxy == null) {
+            Log.v(TAG, "No camera open, not closing");
+            return;
+        }
+        Log.v(TAG, "Closing camera");
         mCameraProxy = null;
         mCameraManager.closeCamera(mCameraProxy, synced);
         mRequestingCameraId = EMPTY_REQUEST;
