Add hint and transition effects.

Also put the background on the window instead of the activity view so that it fades smoothly
and doesn't cause a bright patch behind the keyboard transitions.

Change the close button between two states, depending on whether the query is empty or not.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ea20cb5..a369af7 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -43,7 +43,6 @@
         <activity android:name=".SearchActivity"
                   android:label="@string/app_name"
                   android:launchMode="singleTask"
-                  android:windowSoftInputMode="stateAlwaysVisible|adjustResize"
                   android:theme="@style/Theme.QuickSearchBox.Search">
             <!-- Show app icon in Launcher. -->
             <intent-filter>
@@ -72,7 +71,7 @@
                 <data android:scheme="qsb.corpus" />
             </intent-filter>
             <meta-data android:name="android.app.search.shortcut.provider" android:value="content://com.android.quicksearchbox.shortcuts/shortcuts" />
-            <meta-data android:name="com.android.launcher.toolbar_icon" android:resource="@drawable/toolbar_icon" />
+            <meta-data android:name="com.android.launcher.toolbar_icon" android:resource="@drawable/ic_google_logo_normal" />
         </activity>
 
         <provider android:name=".ShortcutsProvider"
diff --git a/res/drawable-hdpi/ic_google_hint.9.png b/res/drawable-hdpi/ic_google_hint.9.png
new file mode 100644
index 0000000..01fd644
--- /dev/null
+++ b/res/drawable-hdpi/ic_google_hint.9.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_google_hint.png b/res/drawable-hdpi/ic_google_hint.png
deleted file mode 100644
index 6203098..0000000
--- a/res/drawable-hdpi/ic_google_hint.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_google_logo_normal.png b/res/drawable-hdpi/ic_google_logo_normal.png
index 802dcdc..ea6369d 100644
--- a/res/drawable-hdpi/ic_google_logo_normal.png
+++ b/res/drawable-hdpi/ic_google_logo_normal.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_google_hint.9.png b/res/drawable-mdpi/ic_google_hint.9.png
new file mode 100644
index 0000000..01fd644
--- /dev/null
+++ b/res/drawable-mdpi/ic_google_hint.9.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_google_hint.png b/res/drawable-mdpi/ic_google_hint.png
deleted file mode 100644
index ed10762..0000000
--- a/res/drawable-mdpi/ic_google_hint.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_google_logo_normal.png b/res/drawable-mdpi/ic_google_logo_normal.png
index df0323d..ba6c73e 100644
--- a/res/drawable-mdpi/ic_google_logo_normal.png
+++ b/res/drawable-mdpi/ic_google_logo_normal.png
Binary files differ
diff --git a/res/drawable-mdpi/textfield_end.9.png b/res/drawable-mdpi/textfield_end.9.png
index df02de3..94706b4 100644
--- a/res/drawable-mdpi/textfield_end.9.png
+++ b/res/drawable-mdpi/textfield_end.9.png
Binary files differ
diff --git a/res/drawable-mdpi/textfield_start.9.png b/res/drawable-mdpi/textfield_start.9.png
index d0442f3..8cddc34 100644
--- a/res/drawable-mdpi/textfield_start.9.png
+++ b/res/drawable-mdpi/textfield_start.9.png
Binary files differ
diff --git a/res/layout-xlarge/search_activity.xml b/res/layout-xlarge/search_activity.xml
index 0840160..9f46bf8 100644
--- a/res/layout-xlarge/search_activity.xml
+++ b/res/layout-xlarge/search_activity.xml
@@ -19,7 +19,6 @@
     android:id="@+id/search_activity_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@drawable/activity_background"
 >
 
     <LinearLayout
@@ -73,7 +72,7 @@
                 android:layout_alignParentLeft="true"
                 android:layout_alignParentTop="true"
                 android:layout_alignParentRight="true"
-                android:gravity="top"
+                android:gravity="top|left"
                 android:orientation="horizontal"
                 android:clickable="true"
                 >
@@ -103,15 +102,13 @@
                         android:layout_width="0dip"
                         android:layout_height="match_parent"
                         android:layout_weight="1.0"
-                        android:paddingLeft="12dip"
-                        android:paddingRight="8dip"
-                        android:paddingTop="6dip"
-                        android:paddingBottom="6dip"
-                        android:gravity="bottom|left"
+                        android:layout_marginLeft="12dip"
+                        android:layout_marginRight="8dip"
+                        android:gravity="center_vertical|left"
                         android:singleLine="true"
                         android:ellipsize="end"
                         android:inputType="text|textAutoComplete"
-                        android:background="@null"
+                        android:background="@drawable/ic_google_hint"
                         android:textSize="18sp"
                         android:textStyle="normal"
                         android:textColor="@android:color/primary_text_dark"
@@ -128,7 +125,7 @@
                         android:paddingRight="12dp"
                         android:layout_gravity="center"
                         android:background="@drawable/button_bg"
-                        android:src="@drawable/ic_clear"
+                        android:src="@drawable/ic_clear_off"
                         />
 
                 </LinearLayout>
diff --git a/res/values-xlarge/themes.xml b/res/values-xlarge/themes.xml
index 3b46e31..ceec7ef 100644
--- a/res/values-xlarge/themes.xml
+++ b/res/values-xlarge/themes.xml
@@ -25,7 +25,7 @@
         <!-- Get rid of status bar shadow. -->
         <item name="android:windowContentOverlay">@null</item>
         <item name="android:windowShowWallpaper">true</item>
-        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowBackground">@drawable/activity_background</item>
         <item name="android:windowSoftInputMode">stateUnchanged|adjustResize</item>
     </style>
 
diff --git a/src/com/android/quicksearchbox/ui/SearchActivityView.java b/src/com/android/quicksearchbox/ui/SearchActivityView.java
index bfce136..23add28 100644
--- a/src/com/android/quicksearchbox/ui/SearchActivityView.java
+++ b/src/com/android/quicksearchbox/ui/SearchActivityView.java
@@ -328,7 +328,7 @@
         updateVoiceSearchButton(queryEmpty);
     }
 
-    private void updateQueryTextView(boolean queryEmpty) {
+    protected void updateQueryTextView(boolean queryEmpty) {
         if (queryEmpty) {
             if (isSearchCorpusWeb()) {
                 mQueryTextView.setBackgroundDrawable(mQueryTextEmptyBg);
diff --git a/src/com/android/quicksearchbox/ui/SearchActivityViewTwoPane.java b/src/com/android/quicksearchbox/ui/SearchActivityViewTwoPane.java
index 446b233..d0a3704 100644
--- a/src/com/android/quicksearchbox/ui/SearchActivityViewTwoPane.java
+++ b/src/com/android/quicksearchbox/ui/SearchActivityViewTwoPane.java
@@ -21,16 +21,18 @@
 import com.android.quicksearchbox.R;
 import com.android.quicksearchbox.Suggestions;
 
+import android.animation.Animator;
 import android.animation.ObjectAnimator;
 import android.animation.ValueAnimator;
 import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.content.Context;
 import android.database.DataSetObserver;
-import android.graphics.drawable.Drawable;
+import android.graphics.Rect;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.Menu;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.ExpandableListAdapter;
 import android.widget.ImageView;
 import android.widget.PopupMenu;
@@ -40,8 +42,9 @@
  */
 public class SearchActivityViewTwoPane extends SearchActivityView {
 
-    private static final int TINT_ANIMATION_DURATION = 300; // in millis
-    private static final int TINT_ANIMATION_START_DELAY = 400; // in millis
+    private static final int ENTRY_ANIMATION_START_DELAY = 50; // in millis
+    private static final int ENTRY_ANIMATION_DURATION = 150; // in millis
+    private static final float ANIMATION_STARTING_WIDTH_FACTOR = 0.6f;
 
     private ImageView mMenuButton;
 
@@ -49,6 +52,8 @@
     private ClusteredSuggestionsView mResultsView;
     private SuggestionsAdapter<ExpandableListAdapter> mResultsAdapter;
     private View mResultsHeader;
+    private View mSearchPlate;
+    private boolean mJustCreated;
 
     public SearchActivityViewTwoPane(Context context) {
         super(context);
@@ -83,6 +88,8 @@
         });
         mResultsView.setOnKeyListener(new SuggestionsViewKeyListener());
         mResultsHeader = findViewById(R.id.shortcut_title);
+        mSearchPlate = findViewById(R.id.left_pane);
+        mJustCreated = true;
     }
 
     private void showPopupMenu() {
@@ -101,24 +108,36 @@
 
     @Override
     public void onResume() {
-        setupWallpaperTint();
+        if (mJustCreated) {
+            setupEntryAnimations();
+            mJustCreated = false;
+        }
     }
 
-    private void setupWallpaperTint() {
-        // Alpha fade-in the background tint when the activity resumes.
-        final Drawable drawable = getBackground();
-        drawable.setAlpha(0);
-        ValueAnimator animator = ObjectAnimator.ofInt(drawable, "alpha", 0, 255);
-        animator.setDuration(TINT_ANIMATION_DURATION);
-        animator.addUpdateListener(new AnimatorUpdateListener() {
+    private void setupEntryAnimations() {
+        // TODO: Use the left/top of the source bounds to start the animation from
+        final int endingWidth = getResources().getDimensionPixelSize(R.dimen.suggestions_width);
+        final int startingWidth = (int) (endingWidth * ANIMATION_STARTING_WIDTH_FACTOR);
+
+        ViewGroup.LayoutParams params = mSearchPlate.getLayoutParams();
+        params.width = startingWidth;
+        mSearchPlate.setLayoutParams(params);
+
+        Animator animator = ObjectAnimator.ofInt(mSearchPlate, "alpha", 0, 255);
+        animator.setDuration(ENTRY_ANIMATION_DURATION);
+        ((ValueAnimator)animator).addUpdateListener(new AnimatorUpdateListener() {
 
             public void onAnimationUpdate(ValueAnimator animator) {
-                drawable.invalidateSelf();
+                ViewGroup.LayoutParams params = mSearchPlate.getLayoutParams();
+                params.width = startingWidth
+                        + (int) ((Integer) animator.getAnimatedValue() / 255f
+                                * (endingWidth - startingWidth));
+                mSearchPlate.setLayoutParams(params);
             }
         });
-        animator.setStartDelay(TINT_ANIMATION_START_DELAY);
-        animator.setInterpolator(new android.view.animation.LinearInterpolator());
+        animator.setStartDelay(ENTRY_ANIMATION_START_DELAY);
         animator.start();
+
     }
 
     @Override
@@ -218,6 +237,18 @@
         checkHideResultsHeader();
     }
 
+    @Override
+    protected void updateQueryTextView(boolean queryEmpty) {
+        super.updateQueryTextView(queryEmpty);
+        if (mSearchCloseButton == null) return;
+
+        if (queryEmpty) {
+            mSearchCloseButton.setImageResource(R.drawable.ic_clear_off);
+        } else {
+            mSearchCloseButton.setImageResource(R.drawable.ic_clear);
+        }
+    }
+
     private void checkHideResultsHeader() {
         if (mResultsHeader != null) {
             if (!mResultsAdapter.isEmpty()) {