Fix trackball focus weirdness in AllApps2D.

Also vertically align AllApps2D's home icon with Workspace's
grid icon.

Change-Id: I81a8759ed33afd08336482484f1b9bdb9a36718e
diff --git a/res/layout/all_apps_2d.xml b/res/layout/all_apps_2d.xml
index f22b8ea..7bbfa91 100644
--- a/res/layout/all_apps_2d.xml
+++ b/res/layout/all_apps_2d.xml
@@ -22,8 +22,8 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:padding="2dip"
-    
     >
+
     <GridView android:id="@+id/all_apps_2d_grid"
         android:tag="all_apps_2d_grid"
         android:scrollbars="none"
@@ -36,20 +36,28 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_alignParentBottom="true"
-        android:layout_marginBottom="24dip"
+        android:layout_marginBottom="28dip"
         android:layout_marginTop="8dip"
         android:nextFocusDown="@+id/all_apps_2d_home"
+        android:nextFocusUp="@null"
+        android:nextFocusLeft="@null"
+        android:nextFocusRight="@null"
         />
 
-    <ImageButton android:id="@+id/all_apps_2d_home"
+    <view
+        class="com.android.launcher2.AllApps2D$HomeButton"
+        android:id="@+id/all_apps_2d_home"
         android:tag="all_apps_2d_home"
         android:src="@drawable/home_button"
         android:background="#00000000"
         android:layout_centerHorizontal="true"
         android:layout_alignParentBottom="true"
         android:layout_width="wrap_content"
-        android:layout_height="64dip"
+        android:layout_height="@dimen/button_bar_height"
         android:nextFocusUp="@+id/all_apps_2d_grid"
+        android:nextFocusDown="@null"
+        android:nextFocusLeft="@null"
+        android:nextFocusRight="@null"
         />
 
 </com.android.launcher2.AllApps2D>
diff --git a/src/com/android/launcher2/AllApps2D.java b/src/com/android/launcher2/AllApps2D.java
index f02e8c6..6674480 100644
--- a/src/com/android/launcher2/AllApps2D.java
+++ b/src/com/android/launcher2/AllApps2D.java
@@ -57,28 +57,26 @@
 
     private ArrayList<ApplicationInfo> mAllAppsList = new ArrayList<ApplicationInfo>();
 
-    /**
-     * True when we are using arrow keys or trackball to drive navigation
-     */
-    private boolean mArrowNavigation = false;
-    private boolean mStartedScrolling;
-
-    /**
-     * Used to keep track of the selection when AllApps2D loses window focus.
-     * One of the SELECTION_ constants.
-     */
-    private int mLastSelection;
-
-    /**
-     * Used to keep track of the selection when AllApps2D loses window focus
-     */
-    private int mLastSelectedIcon;
-
+    // preserve compatibility with 3D all apps:
+    //    0.0 -> hidden
+    //    1.0 -> shown and opaque
+    //    intermediate values -> partially shown & partially opaque
     private float mZoom;
 
     private AppsAdapter mAppsAdapter;
 
     // ------------------------------------------------------------
+    
+    public static class HomeButton extends ImageButton {
+        public HomeButton(Context context, AttributeSet attrs) {
+            super(context, attrs);
+        }
+        @Override
+        public View focusSearch(int direction) {
+            if (direction == FOCUS_UP) return super.focusSearch(direction);
+            return null;
+        }
+    }
 
     public class AppsAdapter extends ArrayAdapter<ApplicationInfo> {
         private final LayoutInflater mInflater;
@@ -184,6 +182,11 @@
         return true;
     }
 
+    protected void onFocusChanged(boolean gainFocus, int direction, android.graphics.Rect prev) {
+        if (gainFocus) {
+            mGrid.requestFocus();
+        }
+    }
 
     public void setDragController(DragController dragger) {
         mDragController = dragger;