diff --git a/res/drawable-hdpi/ic_gallery_play.png b/res/drawable-hdpi/ic_gallery_play.png
index 2ba9514..44e0c4e 100644
--- a/res/drawable-hdpi/ic_gallery_play.png
+++ b/res/drawable-hdpi/ic_gallery_play.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_gallery_play.png b/res/drawable-mdpi/ic_gallery_play.png
index 38010cf..19c4a79 100644
--- a/res/drawable-mdpi/ic_gallery_play.png
+++ b/res/drawable-mdpi/ic_gallery_play.png
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/ic_recording_indicator.png b/res/drawable-sw600dp-mdpi/ic_recording_indicator.png
deleted file mode 100644
index 9d168f1..0000000
--- a/res/drawable-sw600dp-mdpi/ic_recording_indicator.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_gallery_play.png b/res/drawable-xhdpi/ic_gallery_play.png
index 45c586b..f677b26 100644
--- a/res/drawable-xhdpi/ic_gallery_play.png
+++ b/res/drawable-xhdpi/ic_gallery_play.png
Binary files differ
diff --git a/res/drawable/border_preview.xml b/res/drawable/border_preview.xml
deleted file mode 100644
index 5835e2f..0000000
--- a/res/drawable/border_preview.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_activated="true" android:drawable="@drawable/ic_snapshot_border" />
-    <item android:drawable="@android:color/black" />
-</selector>
-
diff --git a/res/layout-sw600dp/mode_picker.xml b/res/layout-sw600dp/mode_picker.xml
index a77485d..cd562c8 100644
--- a/res/layout-sw600dp/mode_picker.xml
+++ b/res/layout-sw600dp/mode_picker.xml
@@ -38,18 +38,21 @@
                     android:layout_height="wrap_content"
                     android:layout_weight="1"
                     android:scaleType="center"
+                    android:background="@drawable/bg_pressed"
                     android:src="@drawable/ic_switch_camera_holo_light" />
             <com.android.camera.ui.RotateImageView android:id="@+id/mode_video"
                     android:layout_width="fill_parent"
                     android:layout_height="wrap_content"
                     android:layout_weight="1"
                     android:scaleType="center"
+                    android:background="@drawable/bg_pressed"
                     android:src="@drawable/ic_switch_video_holo_light" />
             <com.android.camera.ui.RotateImageView android:id="@+id/mode_panorama"
                     android:layout_width="fill_parent"
                     android:layout_height="wrap_content"
                     android:layout_weight="1"
                     android:scaleType="center"
+                    android:background="@drawable/bg_pressed"
                     android:src="@drawable/ic_switch_pan_holo_light" />
         </LinearLayout>
 </com.android.camera.ModePicker>
diff --git a/res/layout-sw600dp/preview_frame_video.xml b/res/layout-sw600dp/preview_frame_video.xml
index 4e59c90..aab1ee1 100644
--- a/res/layout-sw600dp/preview_frame_video.xml
+++ b/res/layout-sw600dp/preview_frame_video.xml
@@ -22,11 +22,15 @@
     <com.android.camera.PreviewFrameLayout android:id="@+id/frame"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_centerInParent="true"
-            android:background="@drawable/border_preview">
+            android:layout_centerInParent="true">
         <SurfaceView android:id="@+id/camera_preview"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent" />
+        <FrameLayout android:id="@+id/preview_border"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:visibility="gone"
+            android:background="@drawable/ic_snapshot_border" />
         <com.android.camera.ui.RotateLayout android:id="@+id/recording_time_rect"
                 style="@style/ViewfinderLableLayout">
             <include layout="@layout/viewfinder_labels_video" android:id="@+id/labels_w1024" />
diff --git a/res/layout/camera.xml b/res/layout/camera.xml
index 939007a..19ce5f1 100644
--- a/res/layout/camera.xml
+++ b/res/layout/camera.xml
@@ -15,7 +15,6 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:camera="http://schemas.android.com/apk/res/com.android.camera"
         android:id="@+id/app_root"
         android:orientation="vertical"
         android:layout_width="match_parent"
diff --git a/res/layout/panorama.xml b/res/layout/panorama.xml
index d56cca0..1ff7601 100644
--- a/res/layout/panorama.xml
+++ b/res/layout/panorama.xml
@@ -22,5 +22,4 @@
 
     <include layout="@layout/pano_capture" />
     <include layout="@layout/pano_review" />
-    <include layout="@layout/pano_rotate_dialog" />
 </RelativeLayout>
diff --git a/res/layout/preview_frame_video.xml b/res/layout/preview_frame_video.xml
index 992eb46..43d1b5a 100644
--- a/res/layout/preview_frame_video.xml
+++ b/res/layout/preview_frame_video.xml
@@ -22,11 +22,15 @@
     <com.android.camera.PreviewFrameLayout android:id="@+id/frame"
             android:layout_height="match_parent"
             android:layout_width="match_parent"
-            android:layout_centerInParent="true"
-            android:background="@drawable/border_preview">
+            android:layout_centerInParent="true">
         <SurfaceView android:id="@+id/camera_preview"
-                android:layout_height="match_parent"
-                android:layout_width="match_parent" />
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+        <FrameLayout android:id="@+id/preview_border"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:visibility="gone"
+            android:background="@drawable/ic_snapshot_border" />
         <com.android.camera.ui.RotateLayout android:id="@+id/recording_time_rect"
                 style="@style/ViewfinderLableLayout">
 
diff --git a/res/layout/pano_rotate_dialog.xml b/res/layout/rotate_dialog.xml
similarity index 76%
rename from res/layout/pano_rotate_dialog.xml
rename to res/layout/rotate_dialog.xml
index 456bb02..3ca5283 100644
--- a/res/layout/pano_rotate_dialog.xml
+++ b/res/layout/rotate_dialog.xml
@@ -15,13 +15,16 @@
 -->
 
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/rotate_dialog_root_layout"
+        android:clickable="true"
         android:gravity="center"
+        android:visibility="gone"
+        android:background="#55000000"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
     <com.android.camera.ui.RotateLayout
             android:id="@+id/rotate_dialog_layout"
-            android:visibility="gone"
             android:gravity="center"
             android:layout_gravity="center"
             android:layout_width="wrap_content"
@@ -87,16 +90,31 @@
                         android:showDividers="beginning"
                         android:dividerPadding="0dip">
 
-                    <Button android:id="@+id/rotate_dialog_button"
-                            style="@android:style/Widget.Holo.Button.Borderless"
-                            android:gravity="center"
-                            android:text="@string/review_ok"
-                            android:maxLines="2"
-                            android:minHeight="48dp"
-                            android:textSize="14sp"
-                            android:onClick="onAlertDialogButtonClicked"
+                    <LinearLayout
                             android:layout_width="match_parent"
-                            android:layout_height="wrap_content" />
+                            android:layout_height="wrap_content"
+                            android:gravity="center"
+                            android:orientation="horizontal">
+
+                        <Button android:id="@+id/rotate_dialog_button2"
+                                style="@android:style/Widget.Holo.Button.Borderless"
+                                android:gravity="center"
+                                android:maxLines="2"
+                                android:minHeight="48dp"
+                                android:textSize="14sp"
+                                android:layout_weight="1"
+                                android:layout_width="0dp"
+                                android:layout_height="wrap_content" />
+                        <Button android:id="@+id/rotate_dialog_button1"
+                                style="@android:style/Widget.Holo.Button.Borderless"
+                                android:gravity="center"
+                                android:maxLines="2"
+                                android:minHeight="48dp"
+                                android:textSize="14sp"
+                                android:layout_weight="1"
+                                android:layout_width="0dp"
+                                android:layout_height="wrap_content" />
+                    </LinearLayout>
                 </LinearLayout>
             </LinearLayout>
         </FrameLayout>
diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml
index ed3f5da..65d3683 100644
--- a/res/values-sw600dp/styles.xml
+++ b/res/values-sw600dp/styles.xml
@@ -30,19 +30,18 @@
         <item name="android:background">@drawable/bg_pressed</item>
     </style>
     <style name="ReviewControlIcon">
-        <item name="android:layout_width">75dp</item>
-        <item name="android:layout_height">50dp</item>
+        <item name="android:layout_height">32dp</item>
+        <item name="android:layout_width">32dp</item>
         <item name="android:gravity">center</item>
         <item name="android:layout_centerHorizontal">true</item>
-        <item name="android:clickable">true</item>
-        <item name="android:focusable">true</item>
-        <item name="android:background">@drawable/bg_pressed</item>
     </style>
     <style name="ReviewControlText">
         <item name="android:layout_height">wrap_content</item>
         <item name="android:layout_width">wrap_content</item>
+        <item name="android:paddingLeft">2dp</item>
         <item name="android:paddingRight">10dp</item>
-        <item name="android:textSize">16sp</item>
+        <item name="android:textSize">12sp</item>
+        <item name="android:textStyle">bold</item>
     </style>
     <style name="ReviewThumbnail">
         <item name="android:layout_width">86dp</item>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index f341e8c..d595c60 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -21,7 +21,8 @@
     <color name="recording_time_elapsed_text">#FFFFFFFF</color>
     <color name="recording_time_remaining_text">#FFFF0033</color>
     <color name="on_viewfinder_label_background_color">#77333333</color>
-    <color name="review_control_pressed_color">#FF6899FF</color>
+    <color name="review_control_pressed_color">#FF33B5E5</color>
+    <color name="review_control_pressed_fan_color">#3F33B5E5</color>
     <color name="icon_disabled_color">#DD777777</color>
     <color name="time_lapse_arc">#FFC5C5C5</color>
     <color name="dark_gray">#151515</color>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d1cde99..6fb9243 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -71,7 +71,7 @@
     <string name="review_cancel">CANCEL</string>
 
     <!-- button in review mode indicating that the taken photo/video is OK to be attached/uploaded [CHAR LIMIT=10] -->
-    <string name="review_ok">OK</string>
+    <string name="review_ok">DONE</string>
 
     <!-- button in review mode indicate the user want to retake another photo/video for attachment [CHAR LIMIT=10] -->
     <string name="review_retake">RETAKE</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index bc3c301..e1b30f5 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -19,6 +19,9 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
     <style name="ThemeCamera" parent="android:Theme.Holo.NoActionBar.Fullscreen">
+        <item name="android:windowBackground">@android:color/black</item>
+        <item name="android:colorBackground">@android:color/black</item>
+        <item name="android:colorBackgroundCacheHint">@android:color/black</item>
     </style>
     <style name="OnScreenHintTextAppearance">
         <item name="android:textColor">@android:color/primary_text_dark</item>
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 1bd759b..9c7bbfe 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -63,6 +63,7 @@
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.WindowManager;
 import android.view.animation.AnimationUtils;
 import android.widget.TextView;
@@ -146,6 +147,7 @@
     private View mPreviewPanel;  // The container of PreviewFrameLayout.
     private PreviewFrameLayout mPreviewFrameLayout;
     private View mPreviewFrame;  // Preview frame area.
+    private RotateDialogController mRotateDialog;
 
     // A popup window that contains a bigger thumbnail and a list of apps to share.
     private SharePopup mSharePopup;
@@ -189,7 +191,7 @@
      *
      * TODO: consider publishing by moving into MediaStore.
      */
-    private final static String EXTRA_QUICK_CAPTURE =
+    private static final String EXTRA_QUICK_CAPTURE =
             "android.intent.extra.quickCapture";
 
     // The display rotation in degrees. This is only valid when mCameraState is
@@ -699,8 +701,6 @@
                     + mPictureDisplayedToJpegCallbackTime + "ms");
 
             if (!mIsImageCaptureIntent) {
-                enableCameraControls(true);
-
                 startPreview();
                 startFaceDetection();
             }
@@ -739,12 +739,8 @@
 
             mAutoFocusTime = System.currentTimeMillis() - mFocusStartTime;
             Log.v(TAG, "mAutoFocusTime = " + mAutoFocusTime + "ms");
+            setCameraState(IDLE);
             mFocusManager.onAutoFocus(focused);
-            // If focus completes and the snapshot is not started, enable the
-            // controls.
-            if (mFocusManager.isFocusCompleted()) {
-                enableCameraControls(true);
-            }
         }
     }
 
@@ -954,6 +950,20 @@
         }
     }
 
+    private void setCameraState(int state) {
+        mCameraState = state;
+        switch (state) {
+            case SNAPSHOT_IN_PROGRESS:
+            case FOCUSING:
+                enableCameraControls(false);
+                break;
+            case IDLE:
+            case PREVIEW_STOPPED:
+                enableCameraControls(true);
+                break;
+        }
+    }
+
     @Override
     public boolean capture() {
         // If we are already in the middle of taking a snapshot then ignore.
@@ -962,7 +972,6 @@
         }
         mCaptureStartTime = System.currentTimeMillis();
         mPostViewPictureCallbackTime = 0;
-        enableCameraControls(false);
         mJpegImageData = null;
 
         // Set rotation and gps data.
@@ -973,7 +982,7 @@
 
         mCameraDevice.takePicture(mShutterCallback, mRawPictureCallback,
                 mPostViewPictureCallback, new JpegPictureCallback(loc));
-        mCameraState = SNAPSHOT_IN_PROGRESS;
+        setCameraState(SNAPSHOT_IN_PROGRESS);
         return true;
     }
 
@@ -1052,6 +1061,8 @@
             mThumbnailView.setVisibility(View.VISIBLE);
         }
 
+        mRotateDialog = new RotateDialogController(this, R.layout.rotate_dialog);
+
         mPreferences.setLocalId(this, mCameraId);
         CameraSettings.upgradeLocalPreferences(mPreferences.getLocal());
 
@@ -1225,7 +1236,7 @@
     private void setOrientationIndicator(int orientation) {
         Rotatable[] indicators = {mThumbnailView, mModePicker, mSharePopup,
                 mIndicatorControlContainer, mZoomControl, mFocusIndicator, mFaceView,
-                mReviewCancelButton, mReviewDoneButton};
+                mReviewCancelButton, mReviewDoneButton, mRotateDialog};
         for (Rotatable indicator : indicators) {
             if (indicator != null) indicator.setOrientation(orientation);
         }
@@ -1440,7 +1451,6 @@
         if (mOpenCameraFail || mCameraDisabled) return;
 
         mPausing = false;
-
         mJpegPictureCallbackTime = 0;
         mZoomValue = 0;
 
@@ -1559,15 +1569,13 @@
     public void autoFocus() {
         mFocusStartTime = System.currentTimeMillis();
         mCameraDevice.autoFocus(mAutoFocusCallback);
-        mCameraState = FOCUSING;
-        enableCameraControls(false);
+        setCameraState(FOCUSING);
     }
 
     @Override
     public void cancelAutoFocus() {
         mCameraDevice.cancelAutoFocus();
-        mCameraState = IDLE;
-        enableCameraControls(true);
+        setCameraState(IDLE);
         setCameraParameters(UPDATE_PARAM_PREFERENCE);
     }
 
@@ -1713,7 +1721,7 @@
             mCameraDevice.setFaceDetectionListener(null);
             mCameraDevice.setErrorCallback(null);
             mCameraDevice = null;
-            mCameraState = PREVIEW_STOPPED;
+            setCameraState(PREVIEW_STOPPED);
             mFocusManager.onCameraReleased();
         }
     }
@@ -1774,7 +1782,7 @@
         }
 
         mZoomState = ZOOM_STOPPED;
-        mCameraState = IDLE;
+        setCameraState(IDLE);
         mFocusManager.onPreviewStarted();
 
         if (mSnapshotOnIdle) {
@@ -1788,7 +1796,7 @@
             mCameraDevice.cancelAutoFocus(); // Reset the focus.
             mCameraDevice.stopPreview();
         }
-        mCameraState = PREVIEW_STOPPED;
+        setCameraState(PREVIEW_STOPPED);
         mFocusManager.onPreviewStopped();
     }
 
@@ -2029,8 +2037,6 @@
 
     private void hidePostCaptureAlert() {
         if (mIsImageCaptureIntent) {
-            enableCameraControls(true);
-
             int[] pickIds = {R.id.btn_retake, R.id.btn_done};
             for (int id : pickIds) {
                 Util.fadeOut(findViewById(id));
@@ -2161,10 +2167,11 @@
                 restorePreferences();
             }
         };
-        MenuHelper.confirmAction(this,
+        mRotateDialog.showAlertDialog(
                 getString(R.string.confirm_restore_title),
                 getString(R.string.confirm_restore_message),
-                runnable);
+                getString(android.R.string.ok), runnable,
+                getString(android.R.string.cancel), null);
     }
 
     private void restorePreferences() {
diff --git a/src/com/android/camera/ModePicker.java b/src/com/android/camera/ModePicker.java
index ccde71d..b79baa5 100644
--- a/src/com/android/camera/ModePicker.java
+++ b/src/com/android/camera/ModePicker.java
@@ -223,10 +223,13 @@
     }
 
     private void updateModeState() {
-        // Grey-out the unselected icons.
-        for (int i = 0; i < MODE_NUM; ++i) {
-            highlightView(mModeSelectionIcon[i], (i == mCurrentMode));
+        // Grey-out the unselected icons for Phone UI.
+        if (mCurrentModeFrame != null) {
+            for (int i = 0; i < MODE_NUM; ++i) {
+                highlightView(mModeSelectionIcon[i], (i == mCurrentMode));
+            }
         }
+
         // Update the current mode icons on the Phone UI. The selected mode
         // should be in the center of the current mode icon bar.
         if (mCurrentModeFrame != null) {
diff --git a/src/com/android/camera/PreviewFrameLayout.java b/src/com/android/camera/PreviewFrameLayout.java
index 8429259..c16961a 100644
--- a/src/com/android/camera/PreviewFrameLayout.java
+++ b/src/com/android/camera/PreviewFrameLayout.java
@@ -16,9 +16,12 @@
 
 package com.android.camera;
 
+import com.android.camera.R;
+
 import android.app.Activity;
 import android.content.Context;
 import android.content.pm.ActivityInfo;
+import android.view.View;
 import android.util.AttributeSet;
 import android.widget.RelativeLayout;
 /**
@@ -52,10 +55,10 @@
     }
 
     public void showBorder(boolean enabled) {
-        setActivated(enabled);
+        findViewById(R.id.preview_border).setVisibility(
+                enabled ? View.VISIBLE : View.INVISIBLE);
     }
 
-
     @Override
     protected void onMeasure(int widthSpec, int heightSpec) {
         int previewWidth = MeasureSpec.getSize(widthSpec);
diff --git a/src/com/android/camera/RotateDialogController.java b/src/com/android/camera/RotateDialogController.java
new file mode 100644
index 0000000..d91ba13
--- /dev/null
+++ b/src/com/android/camera/RotateDialogController.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.camera;
+
+import com.android.camera.ui.Rotatable;
+import com.android.camera.ui.RotateLayout;
+
+import android.app.Activity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.widget.Button;
+import android.widget.TextView;
+import android.widget.ProgressBar;
+
+public class RotateDialogController implements Rotatable {
+
+    private static final String TAG = "RotateDialogController";
+    private static final long ANIM_DURATION = 150;  // millis
+
+    private Activity mActivity;
+    private int mLayoutResourceID;
+    private View mDialogRootLayout;
+    private RotateLayout mRotateDialog;
+    private View mRotateDialogTitleLayout;
+    private View mRotateDialogButtonLayout;
+    private TextView mRotateDialogTitle;
+    private ProgressBar mRotateDialogSpinner;
+    private TextView mRotateDialogText;
+    private TextView mRotateDialogButton1;
+    private TextView mRotateDialogButton2;
+
+    private Animation mFadeInAnim, mFadeOutAnim;
+
+    public RotateDialogController(Activity a, int layoutResource) {
+        mActivity = a;
+        mLayoutResourceID = layoutResource;
+    }
+
+    private void inflateDialogLayout() {
+        if (mDialogRootLayout == null) {
+            ViewGroup layoutRoot = (ViewGroup) mActivity.getWindow().getDecorView();
+            LayoutInflater inflater = mActivity.getLayoutInflater();
+            View v = inflater.inflate(mLayoutResourceID, layoutRoot);
+            mDialogRootLayout = v.findViewById(R.id.rotate_dialog_root_layout);
+            mRotateDialog = (RotateLayout) v.findViewById(R.id.rotate_dialog_layout);
+            mRotateDialogTitleLayout = v.findViewById(R.id.rotate_dialog_title_layout);
+            mRotateDialogButtonLayout = v.findViewById(R.id.rotate_dialog_button_layout);
+            mRotateDialogTitle = (TextView) v.findViewById(R.id.rotate_dialog_title);
+            mRotateDialogSpinner = (ProgressBar) v.findViewById(R.id.rotate_dialog_spinner);
+            mRotateDialogText = (TextView) v.findViewById(R.id.rotate_dialog_text);
+            mRotateDialogButton1 = (Button) v.findViewById(R.id.rotate_dialog_button1);
+            mRotateDialogButton2 = (Button) v.findViewById(R.id.rotate_dialog_button2);
+
+            mFadeInAnim = AnimationUtils.loadAnimation(
+                    mActivity, android.R.anim.fade_in);
+            mFadeOutAnim = AnimationUtils.loadAnimation(
+                    mActivity, android.R.anim.fade_out);
+            mFadeInAnim.setDuration(ANIM_DURATION);
+            mFadeOutAnim.setDuration(ANIM_DURATION);
+        }
+    }
+
+    @Override
+    public void setOrientation(int orientation) {
+        inflateDialogLayout();
+        mRotateDialog.setOrientation(orientation);
+    }
+
+    public void resetRotateDialog() {
+        inflateDialogLayout();
+        mRotateDialogTitleLayout.setVisibility(View.GONE);
+        mRotateDialogSpinner.setVisibility(View.GONE);
+        mRotateDialogButton1.setVisibility(View.GONE);
+        mRotateDialogButton2.setVisibility(View.GONE);
+        mRotateDialogButtonLayout.setVisibility(View.GONE);
+    }
+
+    private void fadeOutDialog() {
+        mDialogRootLayout.startAnimation(mFadeOutAnim);
+        mDialogRootLayout.setVisibility(View.GONE);
+    }
+
+    private void fadeInDialog() {
+        mDialogRootLayout.startAnimation(mFadeInAnim);
+        mDialogRootLayout.setVisibility(View.VISIBLE);
+    }
+
+    public void dismissDialog() {
+        if (mDialogRootLayout != null && mDialogRootLayout.getVisibility() != View.GONE) {
+            fadeOutDialog();
+        }
+    }
+
+    public void showAlertDialog(String title, String msg, String button1Text,
+                final Runnable r1, String button2Text, final Runnable r2) {
+        resetRotateDialog();
+
+        mRotateDialogTitle.setText(title);
+        mRotateDialogTitleLayout.setVisibility(View.VISIBLE);
+
+        mRotateDialogText.setText(msg);
+
+        if (button1Text != null) {
+            mRotateDialogButton1.setText(button1Text);
+            mRotateDialogButton1.setVisibility(View.VISIBLE);
+            mRotateDialogButton1.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    if (r1 != null) r1.run();
+                    dismissDialog();
+                }
+            });
+            mRotateDialogButtonLayout.setVisibility(View.VISIBLE);
+        }
+        if (button2Text != null) {
+            mRotateDialogButton2.setText(button2Text);
+            mRotateDialogButton2.setVisibility(View.VISIBLE);
+            mRotateDialogButton2.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    if (r2 != null) r2.run();
+                    dismissDialog();
+                }
+            });
+            mRotateDialogButtonLayout.setVisibility(View.VISIBLE);
+        }
+
+        fadeInDialog();
+    }
+
+    public void showWaitingDialog(String msg) {
+        resetRotateDialog();
+
+        mRotateDialogText.setText(msg);
+        mRotateDialogSpinner.setVisibility(View.VISIBLE);
+
+        fadeInDialog();
+    }
+
+}
diff --git a/src/com/android/camera/panorama/PanoramaActivity.java b/src/com/android/camera/panorama/PanoramaActivity.java
index ab220de..8b9c65a 100755
--- a/src/com/android/camera/panorama/PanoramaActivity.java
+++ b/src/com/android/camera/panorama/PanoramaActivity.java
@@ -25,6 +25,7 @@
 import com.android.camera.ModePicker;
 import com.android.camera.OnClickAttr;
 import com.android.camera.R;
+import com.android.camera.RotateDialogController;
 import com.android.camera.ShutterButton;
 import com.android.camera.SoundPlayer;
 import com.android.camera.Storage;
@@ -35,11 +36,8 @@
 import com.android.camera.ui.RotateLayout;
 import com.android.camera.ui.SharePopup;
 
-import android.app.Dialog;
-import android.app.ProgressDialog;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.res.AssetFileDescriptor;
 import android.content.pm.ActivityInfo;
 import android.content.res.Resources;
@@ -50,7 +48,6 @@
 import android.graphics.Rect;
 import android.graphics.SurfaceTexture;
 import android.graphics.YuvImage;
-import android.hardware.Camera;
 import android.hardware.Camera.Parameters;
 import android.hardware.Camera.Size;
 import android.hardware.Sensor;
@@ -63,23 +60,18 @@
 import android.os.SystemProperties;
 import android.util.Log;
 import android.view.Gravity;
-import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.OrientationEventListener;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
 import android.view.WindowManager;
-import android.widget.Button;
 import android.widget.ImageView;
-import android.widget.ProgressBar;
 import android.widget.TextView;
 
 import java.io.ByteArrayOutputStream;
-import java.io.FileNotFoundException;
 import java.io.File;
 import java.util.List;
-import java.util.Vector;
 
 /**
  * Activity to handle panorama capturing.
@@ -131,15 +123,6 @@
     private ShutterButton mShutterButton;
     private Object mWaitObject = new Object();
 
-    private RotateLayout mRotateDialog;
-    private View mRotateDialogTitleLayout;
-    private View mRotateDialogButtonLayout;
-    private TextView mRotateDialogTitle;
-    private View mRotateDialogTitleSeperator;
-    private ProgressBar mRotateDialogSpinner;
-    private TextView mRotateDialogText;
-    private TextView mRotateDialogButton;
-
     private String mPreparePreviewString;
     private String mDialogTitle;
     private String mDialogOkString;
@@ -196,6 +179,8 @@
     private int mDeviceOrientation;
     private int mOrientationCompensation;
 
+    private RotateDialogController mRotateDialog;
+
     private class MosaicJpeg {
         public MosaicJpeg(byte[] data, int width, int height) {
             this.data = data;
@@ -316,8 +301,14 @@
                         if (mPausing) {
                             resetToPreview();
                         } else {
-                            showAlertDialog(
-                                    mDialogTitle, mDialogPanoramaFailedString, mDialogOkString);
+                            mRotateDialog.showAlertDialog(
+                                    mDialogTitle, mDialogPanoramaFailedString,
+                                    mDialogOkString, new Runnable() {
+                                        @Override
+                                        public void run() {
+                                            resetToPreview();
+                                        }},
+                                    null, null);
                         }
                         break;
                     case MSG_RESET_TO_PREVIEW:
@@ -334,12 +325,6 @@
         };
     }
 
-    @OnClickAttr
-    public void onAlertDialogButtonClicked(View v) {
-        dismissDialog();
-        resetToPreview();
-    }
-
     private void setupCamera() {
         openCamera();
         Parameters parameters = mCameraDevice.getParameters();
@@ -604,7 +589,7 @@
         mSurfaceTexture.setOnFrameAvailableListener(null);
 
         if (!aborted && !mThreadRunning) {
-            showWaitingDialog(mPreparePreviewString);
+            mRotateDialog.showWaitingDialog(mPreparePreviewString);
             runBackgroundThread(new Thread() {
                 @Override
                 public void run() {
@@ -716,14 +701,7 @@
 
         mPanoLayout = findViewById(R.id.pano_layout);
 
-        mRotateDialog = (RotateLayout) findViewById(R.id.rotate_dialog_layout);
-        mRotateDialogTitleLayout = findViewById(R.id.rotate_dialog_title_layout);
-        mRotateDialogButtonLayout = findViewById(R.id.rotate_dialog_button_layout);
-        mRotateDialogTitle = (TextView) findViewById(R.id.rotate_dialog_title);
-        mRotateDialogTitleSeperator = (View) findViewById(R.id.rotate_dialog_title_divider);
-        mRotateDialogSpinner = (ProgressBar) findViewById(R.id.rotate_dialog_spinner);
-        mRotateDialogText = (TextView) findViewById(R.id.rotate_dialog_text);
-        mRotateDialogButton = (Button) findViewById(R.id.rotate_dialog_button);
+        mRotateDialog = new RotateDialogController(this, R.layout.rotate_dialog);
 
         if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
             Rotatable[] rotateLayout = {
@@ -733,7 +711,9 @@
                     (Rotatable) findViewById(R.id.pano_saving_progress_bar_layout),
                     (Rotatable) findViewById(R.id.pano_review_cancel_button_layout),
                     (Rotatable) mRotateDialog,
-                    (Rotatable) mCaptureIndicator};
+                    (Rotatable) mCaptureIndicator,
+                    (Rotatable) mModePicker,
+                    (Rotatable) mThumbnailView};
             for (Rotatable r : rotateLayout) {
                 r.setOrientation(270);
             }
@@ -845,41 +825,6 @@
         reportProgress();
     }
 
-    private void resetRotateDialog() {
-        mRotateDialogTitleLayout.setVisibility(View.GONE);
-        mRotateDialogSpinner.setVisibility(View.GONE);
-        mRotateDialogButtonLayout.setVisibility(View.GONE);
-    }
-
-    private void dismissDialog() {
-        if (mRotateDialog.getVisibility() != View.INVISIBLE) {
-            mRotateDialog.setVisibility(View.INVISIBLE);
-        }
-    }
-
-    private void showAlertDialog(String title, String msg, String buttonText) {
-        resetRotateDialog();
-
-        mRotateDialogTitle.setText(title);
-        mRotateDialogTitleLayout.setVisibility(View.VISIBLE);
-
-        mRotateDialogText.setText(msg);
-
-        mRotateDialogButton.setText(buttonText);
-        mRotateDialogButtonLayout.setVisibility(View.VISIBLE);
-
-        mRotateDialog.setVisibility(View.VISIBLE);
-    }
-
-    private void showWaitingDialog(String msg) {
-        resetRotateDialog();
-
-        mRotateDialogText.setText(msg);
-        mRotateDialogSpinner.setVisibility(View.VISIBLE);
-
-        mRotateDialog.setVisibility(View.VISIBLE);
-    }
-
     private void runBackgroundThread(Thread thread) {
         mThreadRunning = true;
         thread.start();
@@ -887,7 +832,7 @@
 
     private void onBackgroundThreadFinished() {
         mThreadRunning = false;
-        dismissDialog();
+        mRotateDialog.dismissDialog();
     }
 
     private void cancelHighResComputation() {
diff --git a/src/com/android/camera/ui/IndicatorControlWheel.java b/src/com/android/camera/ui/IndicatorControlWheel.java
index 5f3d82a..3b8bea4 100644
--- a/src/com/android/camera/ui/IndicatorControlWheel.java
+++ b/src/com/android/camera/ui/IndicatorControlWheel.java
@@ -24,6 +24,7 @@
 import android.content.res.Resources;
 import android.graphics.Canvas;
 import android.graphics.Paint;
+import android.graphics.Path;
 import android.graphics.RectF;
 import android.os.Handler;
 import android.os.SystemClock;
@@ -65,6 +66,7 @@
     private static final int TIME_LAPSE_ARC_WIDTH = 6;
 
     private final int HIGHLIGHT_COLOR;
+    private final int HIGHLIGHT_FAN_COLOR;
     private final int TIME_LAPSE_ARC_COLOR;
 
     // The center of the shutter button.
@@ -115,6 +117,7 @@
         super(context, attrs);
         Resources resources = context.getResources();
         HIGHLIGHT_COLOR = resources.getColor(R.color.review_control_pressed_color);
+        HIGHLIGHT_FAN_COLOR = resources.getColor(R.color.review_control_pressed_fan_color);
         TIME_LAPSE_ARC_COLOR = resources.getColor(R.color.time_lapse_arc);
 
         setWillNotDraw(false);
@@ -295,7 +298,6 @@
         double increment = Math.toRadians(expectedAngle)
                 - mChildRadians[mSecondLevelStartIndex];
         for (int i = 0 ; i < getChildCount(); ++i) mChildRadians[i] += increment;
-        requestLayout();
    }
 
     @Override
@@ -314,7 +316,6 @@
         for (int i = 0; i < getChildCount(); ++i) {
             View view = getChildAt(i);
             // We still need to show the disabled indicators in the second level.
-            if (!view.isEnabled() && (mCurrentLevel == 0)) continue;
             double radian = mChildRadians[i];
             double startVisibleRadians = mInAnimation
                     ? mStartVisibleRadians[1]
@@ -322,8 +323,9 @@
             double endVisibleRadians = mInAnimation
                     ? mEndVisibleRadians[1]
                     : mEndVisibleRadians[mCurrentLevel];
-            if ((radian < (startVisibleRadians - HIGHLIGHT_RADIANS / 2)) ||
-                    (radian > (endVisibleRadians + HIGHLIGHT_RADIANS / 2))) {
+            if ((!view.isEnabled() && (mCurrentLevel == 0))
+                    || (radian < (startVisibleRadians - HIGHLIGHT_RADIANS / 2))
+                    || (radian > (endVisibleRadians + HIGHLIGHT_RADIANS / 2))) {
                 view.setVisibility(View.GONE);
                 continue;
             }
@@ -420,19 +422,35 @@
 
     @Override
     protected void onDraw(Canvas canvas) {
-        // Draw highlight.
-        float delta = mStrokeWidth * 0.5f;
-        float radius = (float) (mWheelRadius + mStrokeWidth * 0.5 + EDGE_STROKE_WIDTH);
-        mBackgroundRect.set(mCenterX - radius, mCenterY - radius, mCenterX + radius,
-                 mCenterY + radius);
-
         int selectedIndex = getSelectedIndicatorIndex();
 
         // Draw the highlight arc if an indicator is selected or being pressed.
-       if (selectedIndex >= 0) {
+        if (selectedIndex >= 0) {
             int degree = (int) Math.toDegrees(mChildRadians[selectedIndex]);
+            float innerR = (float) mShutterButtonRadius;
+            float outerR = (float) (mShutterButtonRadius + mStrokeWidth +
+                    EDGE_STROKE_WIDTH * 0.5);
+
+            // Construct the path of the fan-shaped semi-transparent area.
+            Path fanPath = new Path();
+            mBackgroundRect.set(mCenterX - innerR, mCenterY - innerR,
+                    mCenterX + innerR, mCenterY + innerR);
+            fanPath.arcTo(mBackgroundRect, -degree + HIGHLIGHT_DEGREES / 2,
+                    -HIGHLIGHT_DEGREES);
+            mBackgroundRect.set(mCenterX - outerR, mCenterY - outerR,
+                    mCenterX + outerR, mCenterY + outerR);
+            fanPath.arcTo(mBackgroundRect, -degree - HIGHLIGHT_DEGREES / 2,
+                    HIGHLIGHT_DEGREES);
+            fanPath.close();
+
             mBackgroundPaint.setStrokeWidth(HIGHLIGHT_WIDTH);
-            mBackgroundPaint.setStrokeCap(Paint.Cap.ROUND);
+            mBackgroundPaint.setStrokeCap(Paint.Cap.SQUARE);
+            mBackgroundPaint.setStyle(Paint.Style.FILL_AND_STROKE);
+            mBackgroundPaint.setColor(HIGHLIGHT_FAN_COLOR);
+            canvas.drawPath(fanPath, mBackgroundPaint);
+
+            // Draw the highlight edge
+            mBackgroundPaint.setStyle(Paint.Style.STROKE);
             mBackgroundPaint.setColor(HIGHLIGHT_COLOR);
             canvas.drawArc(mBackgroundRect, -degree - HIGHLIGHT_DEGREES / 2,
                     HIGHLIGHT_DEGREES, false, mBackgroundPaint);
