Fixing AllApps pressed state (issue 10845969)

-> Adding haptic feedback to overview mode buttons (issue 10917359)

Change-Id: Iaf7ac31521ae08f4223aa0d0ffc2f6511b85567f
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 5047e9e..62e05e8 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -281,6 +281,8 @@
 
     private static HashMap<Long, FolderInfo> sFolders = new HashMap<Long, FolderInfo>();
 
+    private View.OnTouchListener mHapticFeedbackTouchListener;
+
     // Related to the auto-advancing of widgets
     private final int ADVANCE_MSG = 1;
     private final int mAdvanceInterval = 20000;
@@ -1148,24 +1150,32 @@
         }
 
         mOverviewPanel = findViewById(R.id.overview_panel);
-        findViewById(R.id.widget_button).setOnClickListener(new OnClickListener() {
+        View widgetButton = findViewById(R.id.widget_button);
+        widgetButton.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View arg0) {
                 showAllApps(true, AppsCustomizePagedView.ContentType.Widgets);
             }
         });
-        findViewById(R.id.wallpaper_button).setOnClickListener(new OnClickListener() {
+        widgetButton.setOnTouchListener(getHapticFeedbackTouchListener());
+
+        View wallpaperButton = findViewById(R.id.wallpaper_button);
+        wallpaperButton.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View arg0) {
                 startWallpaper();
             }
         });
-        findViewById(R.id.settings_button).setOnClickListener(new OnClickListener() {
+        wallpaperButton.setOnTouchListener(getHapticFeedbackTouchListener());
+
+        View settingsButton = findViewById(R.id.settings_button);
+        settingsButton.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View arg0) {
                 startSettings();
             }
         });
+        settingsButton.setOnTouchListener(getHapticFeedbackTouchListener());
         mOverviewPanel.setAlpha(0f);
 
         // Setup the workspace
@@ -2274,6 +2284,26 @@
         v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
     }
 
+    public void performHapticFeedbackOnTouchDown(View v) {
+        // Provide the same haptic feedback that the system offers for virtual keys.
+        v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
+    }
+
+    public View.OnTouchListener getHapticFeedbackTouchListener() {
+        if (mHapticFeedbackTouchListener == null) {
+            mHapticFeedbackTouchListener = new View.OnTouchListener() {
+                @Override
+                public boolean onTouch(View v, MotionEvent event) {
+                    if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN) {
+                        v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
+                    }
+                    return false;
+                }
+            };
+        }
+        return mHapticFeedbackTouchListener;
+    }
+
     public void onClickAppMarketButton(View v) {
         if (!DISABLE_MARKET_BUTTON) {
             if (mAppMarketIntent != null) {