New gestures UI.
diff --git a/src/com/android/launcher/Launcher.java b/src/com/android/launcher/Launcher.java
index 000ce14..21b6949 100644
--- a/src/com/android/launcher/Launcher.java
+++ b/src/com/android/launcher/Launcher.java
@@ -32,6 +32,7 @@
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.SharedPreferences;
 import android.content.Intent.ShortcutIconResource;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
@@ -79,7 +80,7 @@
 import android.widget.Toast;
 import android.widget.ImageView;
 import android.widget.PopupWindow;
-import android.widget.ViewSwitcher;
+import android.widget.Button;
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProviderInfo;
 import android.gesture.GestureOverlayView;
@@ -233,13 +234,14 @@
 
     private View mGesturesPanel;
     private GestureOverlayView mGesturesOverlay;
-    private ViewSwitcher mGesturesPrompt;
     private ImageView mGesturesAdd;
     private PopupWindow mGesturesWindow;
     private Launcher.GesturesProcessor mGesturesProcessor;
     private Gesture mCurrentGesture;
     private GesturesAction mGesturesAction;
     private boolean mHideGesturesPanel;
+    private TextView mGesturesPrompt;
+    private Button mGesturesSend;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -605,7 +607,7 @@
             mWorkspace.post(new Runnable() {
                 public void run() {
                     showGesturesPanel(false);
-                    mGesturesProcessor.matchGesture(gesture, false);
+                    mGesturesProcessor.matchGesture(gesture);
                     mWorkspace.post(new Runnable() {
                         public void run() {
                             if (gesture != null) {
@@ -667,22 +669,26 @@
         mGesturesPanel = mInflater.inflate(R.layout.gestures, mDragLayer, false);
         final View gesturesPanel = mGesturesPanel;
 
-        mGesturesPrompt = (ViewSwitcher) gesturesPanel.findViewById(R.id.gestures_actions);
         mGesturesAction = new GesturesAction();
 
-        mGesturesPrompt.getChildAt(0).setOnClickListener(mGesturesAction);
-        mGesturesPrompt.getChildAt(1).setOnClickListener(mGesturesAction);
-
+        mGesturesPrompt = (TextView) gesturesPanel.findViewById(R.id.gestures_prompt);
+        mGesturesSend = (Button) gesturesPanel.findViewById(R.id.gestures_action);
+        mGesturesSend.setOnClickListener(mGesturesAction);
+       
         mGesturesAdd = (ImageView) gesturesPanel.findViewById(R.id.gestures_add);
         final ImageView gesturesAdd = mGesturesAdd;
-        gesturesAdd.setAlpha(128);
-        gesturesAdd.setEnabled(false);
         gesturesAdd.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 createGesture();
             }
         });
 
+        gesturesPanel.findViewById(R.id.gestures_list).setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                startActivity(new Intent(Launcher.this, GesturesActivity.class));
+            }
+        });
+
         mGesturesOverlay = (GestureOverlayView) gesturesPanel.findViewById(R.id.gestures_overlay);
         mGesturesProcessor = new GesturesProcessor();
 
@@ -976,17 +982,34 @@
             if ((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) !=
                     Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) {
 
-                if (mGesturesPanel != null && mDragLayer.getWindowVisibility() == View.VISIBLE &&
-                        (mDragLayer.hasWindowFocus() ||
-                                (mGesturesWindow != null && mGesturesWindow.isShowing()))) {
+                // TODO: This really should not be done here every time
+                final SharedPreferences preferences =
+                        getSharedPreferences(GesturesActivity.PREFERENCES_NAME, MODE_PRIVATE);
+                final boolean homeKey = preferences.getBoolean(
+                        GesturesActivity.PREFERENCES_HOME_KEY, false);
 
-                    SearchManager searchManager =
-                            (SearchManager) getSystemService(Context.SEARCH_SERVICE);
+                if (!homeKey) {
+                    if (!mWorkspace.isDefaultScreenShowing()) {
+                        mWorkspace.moveToDefaultScreen();
+                    }
 
-                    if (!searchManager.isVisible()) {
-                        onHomeKeyPressed();
+                    if (mGesturesWindow == null || mGesturesWindow.isShowing()) {
+                        hideGesturesPanel();
+                    }                    
+                } else {
+                    if (mGesturesPanel != null && mDragLayer.getWindowVisibility() == View.VISIBLE
+                            && (mDragLayer.hasWindowFocus() || (mGesturesWindow != null
+                            && mGesturesWindow.isShowing()))) {
+
+                        SearchManager searchManager =
+                                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
+
+                        if (!searchManager.isVisible()) {
+                            onHomeKeyPressed();
+                        }
                     }
                 }
+
                 closeDrawer();
 
                 final View v = getWindow().peekDecorView();
@@ -1016,8 +1039,7 @@
     private void showGesturesPanel(boolean animate) {
         resetGesturesPrompt();
 
-        mGesturesAdd.setEnabled(false);
-        mGesturesAdd.setAlpha(128);
+        mGesturesAdd.setVisibility(View.GONE);
 
         mGesturesOverlay.clear(false);
 
@@ -1027,12 +1049,13 @@
             window = mGesturesWindow;
             window.setFocusable(true);
             window.setTouchable(true);
-            window.setBackgroundDrawable(null);
+            window.setBackgroundDrawable(getResources().getDrawable(
+                    android.R.drawable.screen_background_dark));
             window.setContentView(mGesturesPanel);
         } else {
             window = mGesturesWindow;
         }
-        window.setAnimationStyle(animate ? com.android.internal.R.style.Animation_SlidingCard : 0);
+        window.setAnimationStyle(animate ? com.android.internal.R.style.Animation_Toast : 0);
 
         final int[] xy = new int[2];
         final DragLayer dragLayer = mDragLayer;
@@ -1045,31 +1068,23 @@
 
     private void resetGesturesPrompt() {
         mGesturesAction.intent = null;
-        final TextView prompt = (TextView) mGesturesPrompt.getCurrentView();
-        prompt.setText(R.string.gestures_instructions);
-        prompt.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
-        prompt.setClickable(false);
+        mGesturesPrompt.setText(R.string.gestures_instructions);
+        mGesturesPrompt.setVisibility(View.VISIBLE);
+        mGesturesSend.setVisibility(View.GONE);
     }
 
-    private void resetGesturesNextPrompt() {
+    private void setGestureUnknown() {
         mGesturesAction.intent = null;
-        setGesturesNextPrompt(null, getString(R.string.gestures_instructions));
-        mGesturesPrompt.getNextView().setClickable(false);
+        mGesturesPrompt.setText(R.string.gestures_unknown);
+        mGesturesPrompt.setVisibility(View.VISIBLE);
+        mGesturesSend.setVisibility(View.GONE);
     }
 
-    private void setGesturesNextPrompt(Drawable icon, CharSequence title) {
-        final TextView prompt = (TextView) mGesturesPrompt.getNextView();
-        prompt.setText(title);
-        prompt.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
-        prompt.setClickable(true);
-        mGesturesPrompt.showNext();
-    }
-
-    private void setGesturesPrompt(Drawable icon, CharSequence title) {
-        final TextView prompt = (TextView) mGesturesPrompt.getCurrentView();
-        prompt.setText(title);
-        prompt.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
-        prompt.setClickable(true);
+    private void setGestureAction(Drawable icon, CharSequence title) {
+        mGesturesPrompt.setVisibility(View.GONE);
+        mGesturesSend.setVisibility(View.VISIBLE);
+        mGesturesSend.setText(title);
+        mGesturesSend.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
     }
 
     void hideGesturesPanel() {
@@ -1080,7 +1095,7 @@
         if (mGesturesWindow != null) {
             final PopupWindow popupWindow = mGesturesWindow;
             popupWindow.setAnimationStyle(animate ?
-                    com.android.internal.R.style.Animation_SlidingCard : 0);
+                    com.android.internal.R.style.Animation_Toast : 0);
             popupWindow.update();
             popupWindow.dismiss();
         }
@@ -1270,10 +1285,10 @@
                 .setIcon(com.android.internal.R.drawable.ic_menu_notifications)
                 .setAlphabeticShortcut('N');
 
-        final Intent gestures = new Intent(this, GesturesActivity.class);
+        // TODO: Remove
         menu.add(0, MENU_GESTURES, 0, R.string.menu_gestures)
-                .setIcon(com.android.internal.R.drawable.ic_menu_compose).setAlphabeticShortcut('G')
-                .setIntent(gestures);
+                .setIcon(com.android.internal.R.drawable.ic_menu_compose)
+                .setAlphabeticShortcut('G');
 
         final Intent settings = new Intent(android.provider.Settings.ACTION_SETTINGS);
         settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
@@ -1311,6 +1326,9 @@
             case MENU_NOTIFICATIONS:
                 showNotifications();
                 return true;
+            case MENU_GESTURES:
+                showGesturesPanel();
+                return true;
         }
 
         return super.onOptionsItemSelected(item);
@@ -2509,11 +2527,10 @@
             //noinspection PointlessBooleanExpression,ConstantConditions
             if (!CONFIG_GESTURES_IMMEDIATE_MODE) {
                 overlay.removeCallbacks(mMatcher);
-                resetGesturesNextPrompt();
+                resetGesturesPrompt();
             }
 
-            mGesturesAdd.setAlpha(128);
-            mGesturesAdd.setEnabled(false);
+            mGesturesAdd.setVisibility(View.GONE);
         }
 
         public void onGesture(GestureOverlayView overlay, MotionEvent event) {
@@ -2529,7 +2546,7 @@
                     overlay.clear(false);
                     if (mGesturesAction.intent != null) {
                         mGesturesAction.intent = null;
-                        setGesturesNextPrompt(null, getString(R.string.gestures_unknown));
+                        setGestureAction(null, getString(R.string.gestures_unknown));
                     }
                 } else {
                     mMatcher.run();
@@ -2542,7 +2559,7 @@
                     overlay.clear(false);
                     if (mGesturesAction.intent != null) {
                         mGesturesAction.intent = null;
-                        setGesturesNextPrompt(null, getString(R.string.gestures_unknown));
+                        setGestureAction(null, getString(R.string.gestures_unknown));
                     }
                 } else {
                     overlay.postDelayed(mMatcher, GesturesConstants.MATCH_DELAY);
@@ -2551,12 +2568,7 @@
         }
 
         void matchGesture(Gesture gesture) {
-            matchGesture(gesture, true);
-        }
-
-        void matchGesture(Gesture gesture, boolean animate) {
-            mGesturesAdd.setAlpha(255);
-            mGesturesAdd.setEnabled(true);
+            mGesturesAdd.setVisibility(View.VISIBLE);
 
             if (gesture != null) {
                 final ArrayList<Prediction> predictions = sLibrary.recognize(gesture);
@@ -2575,38 +2587,27 @@
 
                         ApplicationInfo info = sModel.queryGesture(Launcher.this, prediction.name);
                         if (info != null) {
-                            updatePrompt(info, animate);
+                            updatePrompt(info);
                         }
                     }
                 }
 
                 if (!match){
                     mGesturesAction.intent = null;
-                    if (animate) {
-                        setGesturesNextPrompt(null, getString(R.string.gestures_unknown));
-                    } else {
-                        setGesturesPrompt(null, getString(R.string.gestures_unknown));
-                    }
+                    setGestureUnknown();
                 }
             }
         }
 
         private void updatePrompt(ApplicationInfo info) {
-            updatePrompt(info, true);
-        }
-
-        private void updatePrompt(ApplicationInfo info, boolean animate) {
+            // TODO: BRING BACK            
             if (mGesturesAction.intent != null &&
                     info.intent.toUri(0).equals(mGesturesAction.intent.toUri(0)) &&
-                    info.title.equals(((TextView) mGesturesPrompt.getCurrentView()).getText())) {
+                    info.title.equals(mGesturesSend.getText())) {
                 return;
             }
 
-            if (animate) {
-                setGesturesNextPrompt(info.icon, info.title);
-            } else {
-                setGesturesPrompt(info.icon, info.title);
-            }
+            setGestureAction(info.icon, info.title);
 
             mGesturesAction.intent = info.intent;
         }