Move haptic feedback on All Apps button to touch down

Bug #5453040

- Also fixing one case where db cursor wasn't closed
Bug #5453040

Change-Id: Id5e8f3c30690160900a6be2cd60c1062ff48ee54
diff --git a/src/com/android/launcher2/Hotseat.java b/src/com/android/launcher2/Hotseat.java
index f1fb6ab..f7fa380 100644
--- a/src/com/android/launcher2/Hotseat.java
+++ b/src/com/android/launcher2/Hotseat.java
@@ -21,6 +21,7 @@
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.widget.FrameLayout;
 
@@ -103,6 +104,17 @@
                 context.getResources().getDrawable(R.drawable.all_apps_button_icon), null, null);
         // allAppsButton.setText(context.getString(R.string.all_apps_button_label));
         allAppsButton.setContentDescription(context.getString(R.string.all_apps_button_label));
+        allAppsButton.setOnTouchListener(new View.OnTouchListener() {
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                if (mLauncher != null &&
+                    (event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN) {
+                    mLauncher.onTouchDownAllAppsButton(v);
+                }
+                return false;
+            }
+        });
+
         allAppsButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(android.view.View v) {
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 6d95555..72ac390 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -748,8 +748,19 @@
                 mAppsCustomizeTabHost.findViewById(R.id.apps_customize_pane_content);
         mAppsCustomizeContent.setup(this, dragController);
 
-
-
+        // Get the all apps button
+        mAllAppsButton = findViewById(R.id.all_apps_button);
+        if (mAllAppsButton != null) {
+            mAllAppsButton.setOnTouchListener(new View.OnTouchListener() {
+                @Override
+                public boolean onTouch(View v, MotionEvent event) {
+                    if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN) {
+                        onTouchDownAllAppsButton(v);
+                    }
+                    return false;
+                }
+            });
+        }
         // Setup the drag controller (drop targets have to be added in reverse order in priority)
         dragController.setDragScoller(mWorkspace);
         dragController.setScrollView(mDragLayer);
@@ -1731,9 +1742,12 @@
      * @param v The view that was clicked.
      */
     public void onClickAllAppsButton(View v) {
+        showAllApps(true);
+    }
+
+    public void onTouchDownAllAppsButton(View v) {
         // Provide the same haptic feedback that the system offers for virtual keys.
         v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
-        showAllApps(true);
     }
 
     public void onClickAppMarketButton(View v) {
diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java
index 53f7b42..6cec101 100644
--- a/src/com/android/launcher2/LauncherProvider.java
+++ b/src/com/android/launcher2/LauncherProvider.java
@@ -602,6 +602,9 @@
             if (c != null && c.moveToNext()) {
                 id = c.getLong(maxIdIndex);
             }
+            if (c != null) {
+                c.close();
+            }
 
             if (id == -1) {
                 throw new RuntimeException("Error: could not query max id");