diff --git a/res/layout-land/camera_controls.xml b/res/layout-land/camera_controls.xml
index 65a17ca..1d911ba 100644
--- a/res/layout-land/camera_controls.xml
+++ b/res/layout-land/camera_controls.xml
@@ -64,14 +64,14 @@
         android:scaleType="center"
         android:src="@drawable/btn_new_shutter" />
 
-    <com.android.camera.ui.RotateImageView
+    <ImageView
         android:id="@+id/preview_thumb"
         android:layout_width="@dimen/capture_size"
         android:layout_height="@dimen/capture_size"
         android:layout_gravity="top|right"
-        android:background="@android:color/black"
         android:contentDescription="@string/switch_photo_filmstrip"
-        android:scaleType="fitCenter" />
+        android:scaleType="centerInside"
+        android:visibility="invisible" />
 
     <com.android.camera.ui.RotatableLayout
         android:id="@+id/front_back_switcher"
@@ -83,6 +83,15 @@
     </com.android.camera.ui.RotatableLayout>
 
     <com.android.camera.ui.RotatableLayout
+        android:id="@+id/flash_switcher"
+        style="@style/ToggleButtonOuter" >
+
+        <com.android.camera.ui.RotateImageView
+            style="@style/ToggleButton"
+            android:layout_gravity="center" />
+    </com.android.camera.ui.RotatableLayout>
+
+    <com.android.camera.ui.RotatableLayout
         android:id="@+id/hdr_switcher"
         style="@style/ToggleButtonOuter" >
 
diff --git a/res/layout-port/camera_controls.xml b/res/layout-port/camera_controls.xml
index bf3cda0..130efc7 100644
--- a/res/layout-port/camera_controls.xml
+++ b/res/layout-port/camera_controls.xml
@@ -64,14 +64,14 @@
         android:scaleType="center"
         android:src="@drawable/btn_new_shutter" />
 
-    <com.android.camera.ui.RotateImageView
+    <ImageView
         android:id="@+id/preview_thumb"
         android:layout_width="@dimen/capture_size"
         android:layout_height="@dimen/capture_size"
         android:layout_gravity="top|right"
-        android:background="@android:color/black"
         android:contentDescription="@string/switch_photo_filmstrip"
-        android:scaleType="fitCenter" />
+        android:scaleType="centerInside"
+        android:visibility="invisible" />
 
     <com.android.camera.ui.RotatableLayout
         android:id="@+id/front_back_switcher"
@@ -83,6 +83,15 @@
     </com.android.camera.ui.RotatableLayout>
 
     <com.android.camera.ui.RotatableLayout
+        android:id="@+id/flash_switcher"
+        style="@style/ToggleButtonOuter" >
+
+        <com.android.camera.ui.RotateImageView
+            style="@style/ToggleButton"
+            android:layout_gravity="center" />
+    </com.android.camera.ui.RotatableLayout>
+
+    <com.android.camera.ui.RotatableLayout
         android:id="@+id/hdr_switcher"
         style="@style/ToggleButtonOuter" >
 
diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml
index c76f5c6..c72f9bb 100644
--- a/res/values/qcomstrings.xml
+++ b/res/values/qcomstrings.xml
@@ -283,7 +283,7 @@
     <string name="pref_camera_video_tnr_default" translatable="false">off</string>
 
     <!-- Default face  detection setting. -->
-    <string name="pref_camera_facedetection_default" translatable="false">off</string>
+    <string name="pref_camera_facedetection_default" translatable="false">on</string>
 
     <!-- Settings screen, Select Face Detection -->
     <string name="pref_camera_facedetection_title">Face Detection</string>
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index b5fc0a6..bc8e2f1 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -33,12 +33,8 @@
 import android.content.SharedPreferences;
 import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.graphics.drawable.ColorDrawable;
 import android.net.Uri;
-import android.media.ThumbnailUtils;
 import android.nfc.NfcAdapter;
 import android.nfc.NfcAdapter.CreateBeamUrisCallback;
 import android.nfc.NfcEvent;
@@ -87,7 +83,6 @@
 import com.android.camera.ui.ModuleSwitcher;
 import com.android.camera.ui.DetailsDialog;
 import com.android.camera.ui.FilmStripView;
-import com.android.camera.ui.FilmStripView.ImageData;
 import com.android.camera.util.ApiHelper;
 import com.android.camera.util.CameraUtil;
 import com.android.camera.util.GcamHelper;
@@ -188,8 +183,6 @@
     private boolean mIsUndoingDeletion = false;
     private boolean mIsEditActivityInProgress = false;
     protected boolean mIsModuleSwitchInProgress = false;
-    private View mPreviewCover;
-    private FrameLayout mPreviewContentLayout;
 
     private Uri[] mNfcPushUris = new Uri[1];
 
@@ -208,7 +201,6 @@
     private Intent mImageShareIntent;
     public static int SETTING_LIST_WIDTH_1 = 250;
     public static int SETTING_LIST_WIDTH_2 = 250;
-    private Bitmap mPreviewThumbnailBitmap;
 
     private class MyOrientationEventListener
             extends OrientationEventListener {
@@ -519,13 +511,10 @@
             };
 
     public void gotoGallery() {
-        LocalDataAdapter adapter = getDataAdapter();
-        ImageData img = adapter.getImageData(1);
-        if (img == null)
-            return;
-        Uri uri = img.getContentUri();
-        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
-        startActivity(intent);
+        UsageStatistics.onEvent(UsageStatistics.COMPONENT_CAMERA, UsageStatistics.ACTION_FILMSTRIP,
+                "thumbnailTap");
+
+        mFilmStripView.getController().goToNextItem();
     }
 
     /**
@@ -609,98 +598,6 @@
         mNfcPushUris[0] = uri;
     }
 
-    public LocalDataAdapter getDataAdapter() {
-        return mDataAdapter;
-    }
-
-    private String getPathFromUri(Uri uri) {
-        String[] projection = {
-                MediaStore.Images.Media.DATA
-        };
-        Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
-        if (cursor == null)
-            return null;
-        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
-        cursor.moveToFirst();
-        String s = cursor.getString(column_index);
-        cursor.close();
-        return s;
-    }
-
-    public void setPreviewThumbnailBitmap(Bitmap bitmap) {
-        mPreviewThumbnailBitmap = bitmap;
-    }
-
-    public Bitmap getPreviewThumbBitmap() {
-        return mPreviewThumbnailBitmap;
-    }
-
-    public void updatePreviewThumbnail() {
-        if (mCurrentModule != null) {
-            if (mCurrentModule instanceof VideoModule) {
-                ((VideoModule) mCurrentModule).updatePreviewThumbnail();
-            }
-            else if (mCurrentModule instanceof WideAnglePanoramaModule) {
-                ((WideAnglePanoramaModule) mCurrentModule).updatePreviewThumbnail();
-            }
-            else if (mCurrentModule instanceof PhotoModule) {
-                ((PhotoModule) mCurrentModule).updatePreviewThumbnail();
-            }
-        }
-    }
-
-    public void updatePreviewThumbnailForVideo() {
-        if (mCurrentModule != null) {
-            if (mCurrentModule instanceof VideoModule) {
-                ((VideoModule) mCurrentModule).updatePreviewThumbnail();
-            }
-        }
-    }
-
-    public class UpdatePreviewThumbnail extends AsyncTask<Void, Void, Bitmap> {
-        private ImageView imgView;
-        private Bitmap imgBitmap = null;
-
-        public UpdatePreviewThumbnail(ImageView view) {
-            imgView = view;
-        }
-
-        @Override
-        protected Bitmap doInBackground(Void... params) {
-            if (imgBitmap != null)
-                return imgBitmap;
-
-            LocalDataAdapter adapter = getDataAdapter();
-            ImageData img = adapter.getImageData(1);
-            if (img == null) {
-                return null;
-            }
-            Uri uri = img.getContentUri();
-            String path = getPathFromUri(uri);
-            if (path == null) {
-                return null;
-            }
-            else {
-                if (img.isPhoto()) {
-                    BitmapFactory.Options opt = new BitmapFactory.Options();
-                    opt.inSampleSize = 4;
-                    return BitmapFactory.decodeFile(path, opt);
-                } else {
-                    return ThumbnailUtils
-                            .createVideoThumbnail(path, MediaStore.Video.Thumbnails.MICRO_KIND);
-                }
-            }
-        }
-
-        @Override
-        protected void onPostExecute(Bitmap bitmap) {
-            if (imgView == null)
-                return;
-            imgView.setImageBitmap(bitmap);
-            setPreviewThumbnailBitmap(bitmap);
-        }
-    }
-
     private void setStandardShareIntent(Uri contentUri, String mimeType) {
         mStandardShareIntent = getShareIntentFromType(mimeType);
         if (mStandardShareIntent != null) {
diff --git a/src/com/android/camera/CustomPhotoMenu.java b/src/com/android/camera/CustomPhotoMenu.java
index 551412a..f8230c0 100644
--- a/src/com/android/camera/CustomPhotoMenu.java
+++ b/src/com/android/camera/CustomPhotoMenu.java
@@ -81,6 +81,7 @@
     private static final int MODE_FILTER = 1;
     private static final int DEVELOPER_MENU_TOUCH_COUNT = 10;
     private int mSceneStatus;
+    private View mFlashSwitcher;
     private View mHdrSwitcher;
     private View mFrontBackSwitcher;
     private View mSceneModeSwitcher;
@@ -102,6 +103,7 @@
         mSettingOff = activity.getString(R.string.setting_off_value);
         mActivity = activity;
         mFrontBackSwitcher = ui.getRootView().findViewById(R.id.front_back_switcher);
+        mFlashSwitcher = ui.getRootView().findViewById(R.id.flash_switcher);
         mHdrSwitcher = ui.getRootView().findViewById(R.id.hdr_switcher);
         mSceneModeSwitcher = ui.getRootView().findViewById(R.id.scene_mode_switcher);
         mFilterModeSwitcher = ui.getRootView().findViewById(R.id.filter_mode_switcher);
@@ -120,6 +122,7 @@
         initSceneModeButton(mSceneModeSwitcher);
         initFilterModeButton(mFilterModeSwitcher);
         mHdrSwitcher.setVisibility(View.INVISIBLE);
+        mFlashSwitcher.setVisibility(View.INVISIBLE);
 
         mFrontBackSwitcher.setVisibility(View.INVISIBLE);
         // HDR.
@@ -176,6 +179,7 @@
         };
 
         initSwitchItem(CameraSettings.KEY_CAMERA_ID, mFrontBackSwitcher);
+        initSwitchItem(CameraSettings.KEY_FLASH_MODE, mFlashSwitcher);
     }
 
     @Override
@@ -453,6 +457,9 @@
     @Override
     public void overrideSettings(final String... keyvalues) {
         for (int i = 0; i < keyvalues.length; i += 2) {
+            if (keyvalues[i].equals(CameraSettings.KEY_FLASH_MODE)) {
+                buttonSetEnabled(mFlashSwitcher, keyvalues[i + 1] == null);
+            }
             if (keyvalues[i].equals(CameraSettings.KEY_SCENE_MODE)) {
                 buttonSetEnabled(mSceneModeSwitcher, keyvalues[i + 1] == null);
             }
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 5fb7ac7..81b9f69 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -2557,10 +2557,6 @@
         }
     }
 
-    public void updatePreviewThumbnail() {
-        mUI.updatePreviewThumbnail();
-    }
-
     private void setDisplayOrientation() {
         mDisplayRotation = CameraUtil.getDisplayRotation(mActivity);
         mDisplayOrientation = CameraUtil.getDisplayOrientation(mDisplayRotation, mCameraId);
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java
index 4067254..803c2b1 100644
--- a/src/com/android/camera/PhotoUI.java
+++ b/src/com/android/camera/PhotoUI.java
@@ -53,7 +53,6 @@
 import android.widget.Toast;
 import android.graphics.drawable.AnimationDrawable;
 
-import com.android.camera.CameraActivity.UpdatePreviewThumbnail;
 import com.android.camera.CameraPreference.OnPreferenceChangedListener;
 import com.android.camera.FocusOverlayManager.FocusUI;
 import com.android.camera.ui.AbstractSettingPopup;
@@ -230,7 +229,7 @@
         @Override
         protected void onPostExecute(Bitmap bitmap) {
             mPreviewThumb.setImageBitmap(bitmap);
-            updatePreviewThumbnail(bitmap);
+            mAnimationManager.startCaptureAnimation(mPreviewThumb);
         }
     }
 
@@ -287,24 +286,6 @@
         mPrevOrientationResize = false;
     }
 
-    public void updatePreviewThumbnail() {
-        mPreviewThumb.setVisibility(View.VISIBLE);
-        Bitmap bitmap = mActivity.getPreviewThumbBitmap();
-        if (bitmap != null) {
-            mPreviewThumb.setImageBitmap(bitmap);
-        }
-        else {
-            UpdatePreviewThumbnail task = mActivity.new UpdatePreviewThumbnail(mPreviewThumb);
-            task.execute();
-        }
-    }
-
-    public void updatePreviewThumbnail(Bitmap bitmap) {
-        mPreviewThumb.setVisibility(View.VISIBLE);
-        mPreviewThumb.setImageBitmap(bitmap);
-        mActivity.setPreviewThumbnailBitmap(bitmap);
-    }
-
     public void setDownFactor(int factor) {
         mDownSampleFactor = factor;
     }
@@ -401,7 +382,6 @@
             // Re-apply transform matrix for new surface texture
             setTransformMatrix(mPreviewWidth, mPreviewHeight);
         }
-        updatePreviewThumbnail();
     }
 
     @Override
@@ -557,7 +537,7 @@
         mSwitcher.setVisibility(View.VISIBLE);
     }
     // called from onResume but only the first time
-    public void initializeFirstTime() {
+    public  void initializeFirstTime() {
         // Initialize shutter button.
         mShutterButton.setImageBitmap(null);
         mShutterButton.setBackgroundResource(R.drawable.shutter_button_anim);
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 8259b82..b38b9d6 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -1520,10 +1520,6 @@
         mCurrentVideoValues = null;
     }
 
-    public void updatePreviewThumbnail() {
-        mUI.updateWithNewPreviewThumbnail();
-    }
-
     private void deleteVideoFile(String fileName) {
         Log.v(TAG, "Deleting video " + fileName);
         File f = new File(fileName);
diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java
index 6dd793d..2167b61 100644
--- a/src/com/android/camera/VideoUI.java
+++ b/src/com/android/camera/VideoUI.java
@@ -45,7 +45,6 @@
 import android.widget.PopupWindow;
 import android.widget.TextView;
 
-import com.android.camera.CameraActivity.UpdatePreviewThumbnail;
 import com.android.camera.CameraPreference.OnPreferenceChangedListener;
 import com.android.camera.ui.AbstractSettingPopup;
 import com.android.camera.ui.CameraControls;
@@ -95,7 +94,7 @@
     private VideoController mController;
     private int mZoomMax;
     private List<Integer> mZoomRatios;
-    private ImageView mPreviewThumb;
+    private View mPreviewThumb;
     private View mFlashOverlay;
     private boolean mOrientationResize;
     private boolean mPrevOrientationResize;
@@ -241,23 +240,6 @@
         mPrevOrientationResize = false;
     }
 
-    public void updatePreviewThumbnail() {
-        mPreviewThumb.setVisibility(View.VISIBLE);
-        Bitmap bitmap = mActivity.getPreviewThumbBitmap();
-        if (bitmap != null)
-            mPreviewThumb.setImageBitmap(bitmap);
-        else {
-            UpdatePreviewThumbnail task = mActivity.new UpdatePreviewThumbnail(mPreviewThumb);
-            task.execute();
-        }
-    }
-
-    public void updateWithNewPreviewThumbnail() {
-        mPreviewThumb.setVisibility(View.VISIBLE);
-        UpdatePreviewThumbnail task = mActivity.new UpdatePreviewThumbnail(mPreviewThumb);
-        task.execute();
-    }
-
     public void cameraOrientationPreviewResize(boolean orientation){
        mPrevOrientationResize = mOrientationResize;
        mOrientationResize = orientation;
@@ -406,7 +388,7 @@
             Log.e(TAG, "No valid bitmap for capture animation.");
             return;
         }
-        mPreviewThumb.setImageBitmap(bitmap);
+        ((ImageView) mPreviewThumb).setImageBitmap(bitmap);
         mAnimationManager.startCaptureAnimation(mPreviewThumb);
     }
 
@@ -550,7 +532,7 @@
 
         mGestures.setRenderOverlay(mRenderOverlay);
 
-        mPreviewThumb = (ImageView) mRootView.findViewById(R.id.preview_thumb);
+        mPreviewThumb = mRootView.findViewById(R.id.preview_thumb);
         mPreviewThumb.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
@@ -987,7 +969,6 @@
             // Re-apply transform matrix for new surface texture
             setTransformMatrix(mPreviewWidth, mPreviewHeight);
         }
-        updatePreviewThumbnail();
     }
 
     @Override
diff --git a/src/com/android/camera/WideAnglePanoramaModule.java b/src/com/android/camera/WideAnglePanoramaModule.java
index 4087858..d9f0032 100644
--- a/src/com/android/camera/WideAnglePanoramaModule.java
+++ b/src/com/android/camera/WideAnglePanoramaModule.java
@@ -736,10 +736,6 @@
         }
     }
 
-    public void updatePreviewThumbnail() {
-        mUI.updatePreviewThumbnail();
-    }
-
     // This function will be called upon the first camera frame is available.
     private void reset() {
         mCaptureState = CAPTURE_STATE_VIEWFINDER;
diff --git a/src/com/android/camera/WideAnglePanoramaUI.java b/src/com/android/camera/WideAnglePanoramaUI.java
index 8f96439..97c7d43 100644
--- a/src/com/android/camera/WideAnglePanoramaUI.java
+++ b/src/com/android/camera/WideAnglePanoramaUI.java
@@ -34,14 +34,12 @@
 import android.view.LayoutInflater;
 import android.view.TextureView;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import com.android.camera.CameraActivity.UpdatePreviewThumbnail;
 import com.android.camera.ui.CameraControls;
 import com.android.camera.ui.CameraRootView;
 import com.android.camera.ui.ModuleSwitcher;
@@ -80,7 +78,6 @@
     private TextureView mTextureView;
     private ShutterButton mShutterButton;
     private CameraControls mCameraControls;
-    private ImageView mPreviewThumb;
 
     private Matrix mProgressDirectionMatrix = new Matrix();
     private float[] mProgressAngle = new float[2];
@@ -107,14 +104,6 @@
         mSwitcher = (ModuleSwitcher) mRootView.findViewById(R.id.camera_switcher);
         mSwitcher.setCurrentIndex(ModuleSwitcher.WIDE_ANGLE_PANO_MODULE_INDEX);
         mSwitcher.setSwitchListener(mActivity);
-        mPreviewThumb = (ImageView) mRootView.findViewById(R.id.preview_thumb);
-        mPreviewThumb.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (!CameraControls.isAnimating())
-                    mActivity.gotoGallery();
-            }
-        });
     }
 
     public void onStartCapture() {
@@ -213,23 +202,6 @@
         mProgressDirectionMatrix.postRotate(orientation);
     }
 
-    public void updatePreviewThumbnail(Bitmap bitmap) {
-        mPreviewThumb.setVisibility(View.VISIBLE);
-        mPreviewThumb.setImageBitmap(bitmap);
-        mActivity.setPreviewThumbnailBitmap(bitmap);
-    }
-
-    public void updatePreviewThumbnail() {
-        mPreviewThumb.setVisibility(View.VISIBLE);
-        Bitmap bitmap = mActivity.getPreviewThumbBitmap();
-        if (bitmap != null)
-            mPreviewThumb.setImageBitmap(bitmap);
-        else {
-            UpdatePreviewThumbnail task = mActivity.new UpdatePreviewThumbnail(mPreviewThumb);
-            task.execute();
-        }
-    }
-
     public void showDirectionIndicators(int direction) {
         switch (direction) {
             case PanoProgressBar.DIRECTION_NONE:
@@ -255,7 +227,6 @@
     public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i2) {
         mSurfaceTexture = surfaceTexture;
         mController.onPreviewUIReady();
-        updatePreviewThumbnail();
     }
 
     @Override
@@ -311,9 +282,6 @@
         // is sometimes not shown due to wrong layout result. It's likely to be
         // a framework bug. Call requestLayout() as a workaround.
         mSavingProgressBar.requestLayout();
-
-        updatePreviewThumbnail(Bitmap.createScaledBitmap(bitmap,
-                bitmap.getWidth() / 2, bitmap.getHeight() / 2, false));
     }
 
     public void onConfigurationChanged(
diff --git a/src/com/android/camera/data/FixedFirstDataAdapter.java b/src/com/android/camera/data/FixedFirstDataAdapter.java
index 03402da..e26ec27 100644
--- a/src/com/android/camera/data/FixedFirstDataAdapter.java
+++ b/src/com/android/camera/data/FixedFirstDataAdapter.java
@@ -158,7 +158,6 @@
                 return (dataID != 0);
             }
         });
-        mListener.onDataLoaded();
     }
 
     @Override
diff --git a/src/com/android/camera/ui/CameraControls.java b/src/com/android/camera/ui/CameraControls.java
index 1c94195..aeaa0d4 100644
--- a/src/com/android/camera/ui/CameraControls.java
+++ b/src/com/android/camera/ui/CameraControls.java
@@ -41,6 +41,7 @@
     private View mSwitcher;
     private View mMenu;
     private View mFrontBackSwitcher;
+    private View mFlashSwitcher;
     private View mHdrSwitcher;
     private View mIndicators;
     private View mPreview;
@@ -52,13 +53,13 @@
     private static boolean isAnimating = false;
     private ArrayList<View> mViewList;
     private static final int FRONT_BACK_INDEX = 0;
-    private static final int HDR_INDEX = 1;
-    private static final int SCENE_MODE_INDEX = 2;
-    private static final int FILTER_MODE_INDEX = 3;
-    private static final int MENU_INDEX = 4;
+    private static final int FLASH_INDEX = 1;
+    private static final int HDR_INDEX = 2;
+    private static final int SCENE_MODE_INDEX = 3;
+    private static final int FILTER_MODE_INDEX = 4;
     private static final int SWITCHER_INDEX = 5;
     private static final int SHUTTER_INDEX = 6;
-    private static final int PREVIEW_INDEX = 7;
+    private static final int MENU_INDEX = 7;
     private static final int INDICATOR_INDEX = 8;
     private static final int ANIME_DURATION = 300;
     private float[][] mLocX = new float[4][9];
@@ -81,6 +82,7 @@
             resetLocation(0, 0);
 
             mFrontBackSwitcher.setVisibility(View.INVISIBLE);
+            mFlashSwitcher.setVisibility(View.INVISIBLE);
             mHdrSwitcher.setVisibility(View.INVISIBLE);
             mSceneModeSwitcher.setVisibility(View.INVISIBLE);
             mFilterModeSwitcher.setVisibility(View.INVISIBLE);
@@ -99,6 +101,7 @@
             resetLocation(0, 0);
 
             mFrontBackSwitcher.setVisibility(View.INVISIBLE);
+            mFlashSwitcher.setVisibility(View.INVISIBLE);
             mHdrSwitcher.setVisibility(View.INVISIBLE);
             mSceneModeSwitcher.setVisibility(View.INVISIBLE);
             mFilterModeSwitcher.setVisibility(View.INVISIBLE);
@@ -158,19 +161,21 @@
             mSwitcher.setPressed(false);
             mMenu.setPressed(false);
             mFrontBackSwitcher.setPressed(false);
+            mFlashSwitcher.setPressed(false);
             mHdrSwitcher.setPressed(false);
             mSceneModeSwitcher.setPressed(false);
             mFilterModeSwitcher.setPressed(false);
         } else {
+            mTempEnabled[FLASH_INDEX] = mFlashSwitcher.isEnabled();
             mTempEnabled[FILTER_MODE_INDEX] = mFilterModeSwitcher.isEnabled();
         }
         ((ShutterButton) mShutter).enableTouch(enable);
         ((ModuleSwitcher) mSwitcher).enableTouch(enable);
         mMenu.setEnabled(enable);
         mFrontBackSwitcher.setEnabled(enable);
+        mFlashSwitcher.setEnabled(enable && mTempEnabled[FLASH_INDEX]);
         mHdrSwitcher.setEnabled(enable);
         mSceneModeSwitcher.setEnabled(enable);
-        mPreview.setEnabled(enable);
         mFilterModeSwitcher.setEnabled(enable && mTempEnabled[FILTER_MODE_INDEX]);
     }
 
@@ -178,6 +183,8 @@
         mViewList = new ArrayList<View>();
         if (mFrontBackSwitcher.getVisibility() == View.VISIBLE)
             mViewList.add(mFrontBackSwitcher);
+        if (mFlashSwitcher.getVisibility() == View.VISIBLE)
+            mViewList.add(mFlashSwitcher);
         if (mHdrSwitcher.getVisibility() == View.VISIBLE)
             mViewList.add(mHdrSwitcher);
         if (mSceneModeSwitcher.getVisibility() == View.VISIBLE)
@@ -199,6 +206,7 @@
         mSwitcher = findViewById(R.id.camera_switcher);
         mShutter = findViewById(R.id.shutter_button);
         mFrontBackSwitcher = findViewById(R.id.front_back_switcher);
+        mFlashSwitcher = findViewById(R.id.flash_switcher);
         mHdrSwitcher = findViewById(R.id.hdr_switcher);
         mMenu = findViewById(R.id.menu);
         mIndicators = findViewById(R.id.on_screen_indicators);
@@ -224,6 +232,7 @@
             v.layout(l, t, r, b);
         }
         Rect shutter = new Rect();
+        topRight(mPreview, l, t, r, b);
         center(mShutter, l, t, r, b, orientation, rotation, shutter, SHUTTER_INDEX);
         mSize = (int) (Math.max(shutter.right - shutter.left, shutter.bottom - shutter.top) * 1.2f);
         center(mBackgroundView, l, t, r, b, orientation, rotation, new Rect(), -1);
@@ -243,11 +252,11 @@
     private void setLocation(int w, int h) {
         int rotation = getUnifiedRotation();
         toIndex(mSwitcher, w, h, rotation, 4, 6, SWITCHER_INDEX);
-        toIndex(mMenu, w, h, rotation, 4, 0, MENU_INDEX);
+        toIndex(mMenu, w, h, rotation, 0, 6, MENU_INDEX);
         toIndex(mIndicators, w, h, rotation, 0, 6, INDICATOR_INDEX);
         toIndex(mFrontBackSwitcher, w, h, rotation, 2, 0, FRONT_BACK_INDEX);
-        toIndex(mPreview, w, h, rotation, 0, 6, PREVIEW_INDEX);
-        toIndex(mHdrSwitcher, w, h, rotation, 3, 0, HDR_INDEX);
+        toIndex(mFlashSwitcher, w, h, rotation, 3, 0, FLASH_INDEX);
+        toIndex(mHdrSwitcher, w, h, rotation, 4, 0, HDR_INDEX);
         toIndex(mFilterModeSwitcher, w, h, rotation, 1, 0, FILTER_MODE_INDEX);
         toIndex(mSceneModeSwitcher, w, h, rotation, 0, 0, SCENE_MODE_INDEX);
     }
@@ -301,24 +310,24 @@
         int idx1 = rotation / 90;
 
         mFrontBackSwitcher.setX(mLocX[idx1][FRONT_BACK_INDEX] + x);
+        mFlashSwitcher.setX(mLocX[idx1][FLASH_INDEX] + x);
         mHdrSwitcher.setX(mLocX[idx1][HDR_INDEX] + x);
         mSceneModeSwitcher.setX(mLocX[idx1][SCENE_MODE_INDEX] + x);
         mFilterModeSwitcher.setX(mLocX[idx1][FILTER_MODE_INDEX] + x);
-        mMenu.setX(mLocX[idx1][MENU_INDEX] + x);
         mSwitcher.setX(mLocX[idx1][SWITCHER_INDEX] - x);
         mShutter.setX(mLocX[idx1][SHUTTER_INDEX] - x);
+        mMenu.setX(mLocX[idx1][MENU_INDEX] - x);
         mIndicators.setX(mLocX[idx1][INDICATOR_INDEX] - x);
-        mPreview.setX(mLocX[idx1][PREVIEW_INDEX] - x);
 
         mFrontBackSwitcher.setY(mLocY[idx1][FRONT_BACK_INDEX] + y);
+        mFlashSwitcher.setY(mLocY[idx1][FLASH_INDEX] + y);
         mHdrSwitcher.setY(mLocY[idx1][HDR_INDEX] + y);
         mSceneModeSwitcher.setY(mLocY[idx1][SCENE_MODE_INDEX] + y);
         mFilterModeSwitcher.setY(mLocY[idx1][FILTER_MODE_INDEX] + y);
-        mMenu.setY(mLocY[idx1][MENU_INDEX] + y);
         mSwitcher.setY(mLocY[idx1][SWITCHER_INDEX] - y);
         mShutter.setY(mLocY[idx1][SHUTTER_INDEX] - y);
+        mMenu.setY(mLocY[idx1][MENU_INDEX] - y);
         mIndicators.setY(mLocY[idx1][INDICATOR_INDEX] - y);
-        mPreview.setY(mLocY[idx1][PREVIEW_INDEX] - y);
     }
 
     public void hideUI() {
@@ -326,6 +335,7 @@
         enableTouch(false);
         int rotation = getUnifiedRotation();
         mFrontBackSwitcher.animate().cancel();
+        mFlashSwitcher.animate().cancel();
         mHdrSwitcher.animate().cancel();
         mSceneModeSwitcher.animate().cancel();
         mFilterModeSwitcher.animate().cancel();
@@ -333,7 +343,6 @@
         mShutter.animate().cancel();
         mMenu.animate().cancel();
         mIndicators.animate().cancel();
-        mPreview.animate().cancel();
         mFrontBackSwitcher.animate().setListener(outlistener);
         ((ModuleSwitcher) mSwitcher).removePopup();
         resetLocation(0, 0);
@@ -341,51 +350,51 @@
         switch (rotation) {
             case 0:
                 mFrontBackSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mHdrSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mSceneModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mFilterModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
-                mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
+                mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mIndicators.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
-                mPreview.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 break;
             case 90:
                 mFrontBackSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mHdrSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mSceneModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mFilterModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
-                mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
+                mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mIndicators.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
-                mPreview.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 break;
             case 180:
                 mFrontBackSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mHdrSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mSceneModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mFilterModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
-                mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
+                mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mIndicators.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
-                mPreview.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 break;
             case 270:
                 mFrontBackSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mHdrSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mSceneModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mFilterModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
-                mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
+                mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mIndicators.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
-                mPreview.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 break;
         }
     }
@@ -395,6 +404,7 @@
         enableTouch(false);
         int rotation = getUnifiedRotation();
         mFrontBackSwitcher.animate().cancel();
+        mFlashSwitcher.animate().cancel();
         mHdrSwitcher.animate().cancel();
         mSceneModeSwitcher.animate().cancel();
         mFilterModeSwitcher.animate().cancel();
@@ -402,7 +412,6 @@
         mShutter.animate().cancel();
         mMenu.animate().cancel();
         mIndicators.animate().cancel();
-        mPreview.animate().cancel();
         if (mViewList != null)
             for (View v : mViewList) {
                 v.setVisibility(View.VISIBLE);
@@ -414,7 +423,6 @@
 
         mMenu.setVisibility(View.VISIBLE);
         mIndicators.setVisibility(View.VISIBLE);
-        mPreview.setVisibility(View.VISIBLE);
 
         mFrontBackSwitcher.animate().setListener(inlistener);
         switch (rotation) {
@@ -422,57 +430,57 @@
                 resetLocation(0, -mSize);
 
                 mFrontBackSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mHdrSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mSceneModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mFilterModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
-                mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
+                mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mIndicators.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
-                mPreview.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 break;
             case 90:
                 resetLocation(-mSize, 0);
 
                 mFrontBackSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mHdrSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mSceneModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mFilterModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
-                mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
+                mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mIndicators.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
-                mPreview.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 break;
             case 180:
                 resetLocation(0, mSize);
 
                 mFrontBackSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mHdrSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mSceneModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mFilterModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
-                mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
+                mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mIndicators.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
-                mPreview.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 break;
             case 270:
                 resetLocation(mSize, 0);
 
                 mFrontBackSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mHdrSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mSceneModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mFilterModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
-                mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
+                mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mIndicators.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
-                mPreview.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 break;
         }
     }
@@ -624,6 +632,14 @@
         v.layout(l, t, r, b);
     }
 
+    private void topRight(View v, int l, int t, int r, int b) {
+        // layout using the specific margins; the rotation code messes up the
+        // others
+        int mt = getContext().getResources().getDimensionPixelSize(R.dimen.capture_margin_top);
+        int mr = getContext().getResources().getDimensionPixelSize(R.dimen.capture_margin_right);
+        v.layout(r - v.getMeasuredWidth() - mr, t + mt, r - mr, t + mt + v.getMeasuredHeight());
+    }
+
     private void adjustBackground() {
         int rotation = getUnifiedRotation();
         // remove current drawable and reset rotation
diff --git a/src/com/android/camera/ui/FilmStripView.java b/src/com/android/camera/ui/FilmStripView.java
index 7f197ca..8da49a1 100644
--- a/src/com/android/camera/ui/FilmStripView.java
+++ b/src/com/android/camera/ui/FilmStripView.java
@@ -106,8 +106,6 @@
     private boolean mSendToPreviewMenu;
     private boolean mSendToMenu;
     private boolean mReset;
-    private boolean mIsLoaded = false;
-
     /**
      * Common interface for all images in the filmstrip.
      */
@@ -1735,10 +1733,7 @@
         mDataAdapter.setListener(new DataAdapter.Listener() {
             @Override
             public void onDataLoaded() {
-                mActivity.updatePreviewThumbnail();
-                if (!mIsLoaded)
-                    reload();
-                mIsLoaded = true;
+                reload();
             }
 
             @Override
@@ -1754,7 +1749,6 @@
                     return;
                 }
                 updateInsertion(dataID);
-                mActivity.updatePreviewThumbnailForVideo();
             }
 
             @Override
@@ -1813,7 +1807,9 @@
                     && deltaX < mSlop * (-1)) {
                 // intercept left swipe
                 if (Math.abs(deltaX) >= Math.abs(deltaY) * 2) {
-                    return false;
+                    UsageStatistics.onEvent(UsageStatistics.COMPONENT_CAMERA,
+                            UsageStatistics.ACTION_FILMSTRIP, null);
+                    return true;
                 }
             }
         }
