Merge "Fix several UI bugs." into ics-mr1
diff --git a/res/drawable-hdpi/toast_frame_holo.9.png b/res/drawable-hdpi/toast_frame_holo.9.png
new file mode 100644
index 0000000..f8f75db
--- /dev/null
+++ b/res/drawable-hdpi/toast_frame_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/toast_frame_holo.9.png b/res/drawable-mdpi/toast_frame_holo.9.png
new file mode 100644
index 0000000..f8f75db
--- /dev/null
+++ b/res/drawable-mdpi/toast_frame_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/toast_frame_holo.9.png b/res/drawable-xhdpi/toast_frame_holo.9.png
new file mode 100644
index 0000000..f8f75db
--- /dev/null
+++ b/res/drawable-xhdpi/toast_frame_holo.9.png
Binary files differ
diff --git a/res/layout-sw600dp/pano_capture.xml b/res/layout-sw600dp/pano_capture.xml
index 2f58b10..1b2900b 100644
--- a/res/layout-sw600dp/pano_capture.xml
+++ b/res/layout-sw600dp/pano_capture.xml
@@ -55,8 +55,9 @@
 
             <RelativeLayout
                     android:layout_gravity="center"
+                    android:layout_weight="1.67"
                     android:layout_width="match_parent"
-                    android:layout_height="@dimen/pano_mosaic_surface_height">
+                    android:layout_height="0dp">
                 <com.android.camera.panorama.MosaicRendererSurfaceView
                         android:id="@+id/pano_renderer"
                         android:layout_width="match_parent"
diff --git a/res/layout-sw600dp/preview_frame.xml b/res/layout-sw600dp/preview_frame.xml
index 896d394..1316f4a 100644
--- a/res/layout-sw600dp/preview_frame.xml
+++ b/res/layout-sw600dp/preview_frame.xml
@@ -31,6 +31,5 @@
                 android:visibility="gone"/>
         <include layout="@layout/focus_indicator"/>
         <include layout="@layout/priority_indicators"/>
-        <include layout="@layout/first_hint_toast"/>
     </com.android.camera.PreviewFrameLayout>
 </RelativeLayout>
diff --git a/res/layout-sw600dp/preview_frame_video.xml b/res/layout-sw600dp/preview_frame_video.xml
index aab1ee1..1108814 100644
--- a/res/layout-sw600dp/preview_frame_video.xml
+++ b/res/layout-sw600dp/preview_frame_video.xml
@@ -48,6 +48,5 @@
                 android:background="@drawable/bg_pressed"
                 android:visibility="gone"
                 android:onClick="onReviewPlayClicked" />
-        <include layout="@layout/first_hint_toast"/>
     </com.android.camera.PreviewFrameLayout>
 </RelativeLayout>
diff --git a/res/layout/first_hint_toast.xml b/res/layout/first_hint_toast.xml
deleted file mode 100644
index fb60d29..0000000
--- a/res/layout/first_hint_toast.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 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.
-*/
--->
-<com.android.camera.ui.RotateLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/first_use_hint"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_centerInParent="true"
-        android:visibility="gone">
-    <TextView android:id="@+id/toast_text"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:paddingLeft="10dp"
-            android:paddingRight="10dp"
-            android:paddingTop="5dp"
-            android:paddingBottom="5dp"
-            android:textAppearance="?android:textAppearanceMedium"
-            android:background="@color/on_viewfinder_label_background_color" />
-</com.android.camera.ui.RotateLayout>
-
diff --git a/res/layout/pano_capture.xml b/res/layout/pano_capture.xml
index d6430f4..49065fd 100644
--- a/res/layout/pano_capture.xml
+++ b/res/layout/pano_capture.xml
@@ -71,7 +71,8 @@
 
             <RelativeLayout
                     android:layout_gravity="center"
-                    android:layout_width="@dimen/pano_mosaic_surface_height"
+                    android:layout_weight="1.67"
+                    android:layout_width="0dp"
                     android:layout_height="match_parent">
                 <com.android.camera.panorama.MosaicRendererSurfaceView
                         android:id="@+id/pano_renderer"
diff --git a/res/layout/pano_review.xml b/res/layout/pano_review.xml
index fa4f83b..7b9a92e 100644
--- a/res/layout/pano_review.xml
+++ b/res/layout/pano_review.xml
@@ -50,11 +50,15 @@
         </com.android.camera.ui.RotateLayout>
     </RelativeLayout>
 
-    <ImageView android:id="@+id/pano_reviewarea"
-            android:rotation="90"
-            android:scaleType="fitCenter"
-            android:layout_height="match_parent"
-            android:layout_width="@dimen/pano_mosaic_surface_height" />
+    <com.android.camera.ui.RotateLayout
+            android:id="@+id/pano_rotate_reviewarea"
+            android:layout_width="@dimen/pano_mosaic_surface_height"
+            android:layout_height="match_parent">
+        <ImageView android:id="@+id/pano_reviewarea"
+                android:scaleType="fitCenter"
+                android:layout_height="match_parent"
+                android:layout_width="match_parent" />
+    </com.android.camera.ui.RotateLayout>
 
     <LinearLayout android:id="@+id/pano_review_control"
             style="@style/PanoViewHorizontalBar"
diff --git a/res/layout/preview_frame.xml b/res/layout/preview_frame.xml
index 31ba61b..bed1fb0 100644
--- a/res/layout/preview_frame.xml
+++ b/res/layout/preview_frame.xml
@@ -32,7 +32,6 @@
                 android:visibility="gone"/>
         <include layout="@layout/focus_indicator"/>
         <include layout="@layout/priority_indicators"/>
-        <include layout="@layout/first_hint_toast"/>
     </com.android.camera.PreviewFrameLayout>
     <include layout="@layout/indicator_bar" />
 </RelativeLayout>
diff --git a/res/layout/preview_frame_video.xml b/res/layout/preview_frame_video.xml
index 43d1b5a..dd3ffc9 100644
--- a/res/layout/preview_frame_video.xml
+++ b/res/layout/preview_frame_video.xml
@@ -48,7 +48,6 @@
                 android:src="@drawable/ic_gallery_play"
                 android:visibility="gone"
                 android:onClick="onReviewPlayClicked"/>
-        <include layout="@layout/first_hint_toast"/>
     </com.android.camera.PreviewFrameLayout>
 
     <!-- Fill up the space below preview frame with black. -->
diff --git a/res/layout/rotate_text_toast.xml b/res/layout/rotate_text_toast.xml
new file mode 100644
index 0000000..2c89b6f
--- /dev/null
+++ b/res/layout/rotate_text_toast.xml
@@ -0,0 +1,39 @@
+<?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.
+-->
+
+<com.android.camera.ui.RotateLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/rotate_toast"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center"
+    android:visibility="gone">
+
+    <FrameLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="@drawable/toast_frame_holo">
+        <TextView
+            android:id="@+id/message"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:textAppearanceMedium"
+            android:textColor="@android:color/white"
+            android:shadowColor="#BB000000"
+            android:shadowRadius="2.75" />
+    </FrameLayout>
+</com.android.camera.ui.RotateLayout>
+
+
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index c3f5d95..bb0c0e0 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -22,6 +22,7 @@
 import com.android.camera.ui.Rotatable;
 import com.android.camera.ui.RotateImageView;
 import com.android.camera.ui.RotateLayout;
+import com.android.camera.ui.RotateTextToast;
 import com.android.camera.ui.SharePopup;
 import com.android.camera.ui.ZoomControl;
 
@@ -95,8 +96,7 @@
     private static final int SET_CAMERA_PARAMETERS_WHEN_IDLE = 4;
     private static final int CHECK_DISPLAY_ROTATION = 5;
     private static final int SHOW_TAP_TO_FOCUS_TOAST = 6;
-    private static final int DISMISS_TAP_TO_FOCUS_TOAST = 7;
-    private static final int UPDATE_THUMBNAIL = 8;
+    private static final int UPDATE_THUMBNAIL = 7;
 
     // The subset of parameters we need to update in setCameraParameters().
     private static final int UPDATE_PARAM_INITIALIZE = 1;
@@ -310,14 +310,6 @@
                     break;
                 }
 
-                case DISMISS_TAP_TO_FOCUS_TOAST: {
-                    View v = findViewById(R.id.first_use_hint);
-                    v.setVisibility(View.GONE);
-                    v.setAnimation(AnimationUtils.loadAnimation(Camera.this,
-                            R.anim.on_screen_hint_exit));
-                    break;
-                }
-
                 case UPDATE_THUMBNAIL: {
                     mImageSaver.updateThumbnail();
                     break;
@@ -2275,15 +2267,7 @@
     }
 
     private void showTapToFocusToast() {
-        // Set the text of toast
-        TextView textView = (TextView) findViewById(R.id.toast_text);
-        textView.setText(R.string.tap_to_focus);
-        // Show the toast.
-        RotateLayout v = (RotateLayout) findViewById(R.id.first_use_hint);
-        v.setOrientation(mOrientationCompensation);
-        v.startAnimation(AnimationUtils.loadAnimation(this, R.anim.on_screen_hint_enter));
-        v.setVisibility(View.VISIBLE);
-        mHandler.sendEmptyMessageDelayed(DISMISS_TAP_TO_FOCUS_TOAST, 5000);
+        new RotateTextToast(this, R.string.tap_to_focus, mOrientation).show();
         // Clear the preference.
         Editor editor = mPreferences.edit();
         editor.putBoolean(CameraSettings.KEY_CAMERA_FIRST_USE_HINT_SHOWN, false);
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index fad9094..f725f43 100755
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -22,6 +22,7 @@
 import com.android.camera.ui.Rotatable;
 import com.android.camera.ui.RotateImageView;
 import com.android.camera.ui.RotateLayout;
+import com.android.camera.ui.RotateTextToast;
 import com.android.camera.ui.SharePopup;
 import com.android.camera.ui.ZoomControl;
 
@@ -98,7 +99,6 @@
     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 DISMISS_TAP_TO_SNAPSHOT_TOAST = 8;
 
     private static final int SCREEN_DELAY = 2 * 60 * 1000;
 
@@ -308,14 +308,6 @@
                     break;
                 }
 
-                case DISMISS_TAP_TO_SNAPSHOT_TOAST: {
-                    View v = findViewById(R.id.first_use_hint);
-                    v.setVisibility(View.GONE);
-                    v.setAnimation(AnimationUtils.loadAnimation(VideoCamera.this,
-                            R.anim.on_screen_hint_exit));
-                    break;
-                }
-
                 default:
                     Log.v(TAG, "Unhandled message: " + msg.what);
                     break;
@@ -2344,8 +2336,8 @@
     @Override
     public boolean onTouch(View v, MotionEvent e) {
         if (mMediaRecorderRecording && effectsActive()) {
-            Toast.makeText(this, getResources().getString(
-                    R.string.disable_video_snapshot_hint), Toast.LENGTH_LONG).show();
+            new RotateTextToast(this, R.string.disable_video_snapshot_hint,
+                    mOrientation).show();
             return false;
         }
 
@@ -2444,15 +2436,8 @@
     }
 
     private void showTapToSnapshotToast() {
-        // Set the text of toast
-        TextView textView = (TextView) findViewById(R.id.toast_text);
-        textView.setText(R.string.video_snapshot_hint);
-        // Show the toast.
-        RotateLayout v = (RotateLayout) findViewById(R.id.first_use_hint);
-        v.setOrientation(mOrientationCompensation);
-        v.startAnimation(AnimationUtils.loadAnimation(this, R.anim.on_screen_hint_enter));
-        v.setVisibility(View.VISIBLE);
-        mHandler.sendEmptyMessageDelayed(DISMISS_TAP_TO_SNAPSHOT_TOAST, 5000);
+        new RotateTextToast(this, R.string.video_snapshot_hint, mOrientation)
+                .show();
         // Clear the preference.
         Editor editor = mPreferences.edit();
         editor.putBoolean(CameraSettings.KEY_VIDEO_FIRST_USE_HINT_SHOWN, false);
diff --git a/src/com/android/camera/panorama/PanoramaActivity.java b/src/com/android/camera/panorama/PanoramaActivity.java
index a65d263..fe70827 100755
--- a/src/com/android/camera/panorama/PanoramaActivity.java
+++ b/src/com/android/camera/panorama/PanoramaActivity.java
@@ -710,6 +710,7 @@
                     (Rotatable) findViewById(R.id.pano_review_saving_indication_layout),
                     (Rotatable) findViewById(R.id.pano_saving_progress_bar_layout),
                     (Rotatable) findViewById(R.id.pano_review_cancel_button_layout),
+                    (Rotatable) findViewById(R.id.pano_rotate_reviewarea),
                     (Rotatable) mRotateDialog,
                     (Rotatable) mCaptureIndicator,
                     (Rotatable) mModePicker,
diff --git a/src/com/android/camera/ui/RotateTextToast.java b/src/com/android/camera/ui/RotateTextToast.java
new file mode 100644
index 0000000..8ff381a
--- /dev/null
+++ b/src/com/android/camera/ui/RotateTextToast.java
@@ -0,0 +1,58 @@
+/*
+ * 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.ui;
+
+import com.android.camera.R;
+import com.android.camera.Util;
+
+import android.app.Activity;
+import android.os.Handler;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+public class RotateTextToast {
+    private static final int TOAST_DURATION = 5000; // milliseconds
+    ViewGroup mLayoutRoot;
+    RotateLayout mToast;
+    Handler mHandler;
+
+    public RotateTextToast(Activity activity, int textResourceId, int orientation) {
+        mLayoutRoot = (ViewGroup) activity.getWindow().getDecorView();
+        LayoutInflater inflater = activity.getLayoutInflater();
+        View v = inflater.inflate(R.layout.rotate_text_toast, mLayoutRoot);
+        mToast = (RotateLayout) v.findViewById(R.id.rotate_toast);
+        TextView tv = (TextView) mToast.findViewById(R.id.message);
+        tv.setText(textResourceId);
+        mToast.setOrientation(orientation);
+        mHandler = new Handler();
+    }
+
+    private final Runnable mRunnable = new Runnable() {
+        public void run() {
+            Util.fadeOut(mToast);
+            mLayoutRoot.removeView(mToast);
+            mToast = null;
+        }
+    };
+
+    public void show() {
+        mToast.setVisibility(View.VISIBLE);
+        mHandler.postDelayed(mRunnable, TOAST_DURATION);
+    }
+}