diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java index f9e7cf0f08..f346e19549 100644 --- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java @@ -66,6 +66,7 @@ import android.content.res.Resources; import android.graphics.Color; import android.graphics.Point; import android.graphics.Rect; +import android.graphics.RectF; import android.graphics.Region; import android.graphics.Region.Op; import android.graphics.drawable.Drawable; @@ -75,6 +76,7 @@ import android.inputmethodservice.InputMethodService; import android.os.Handler; import android.util.Property; import android.view.Gravity; +import android.view.HapticFeedbackConstants; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; @@ -862,15 +864,21 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT private void setBackButtonTouchListener(View buttonView, TaskbarNavButtonController navButtonController) { + final RectF rect = new RectF(); buttonView.setOnTouchListener((v, event) -> { - if (event.getAction() == MotionEvent.ACTION_MOVE) return false; + if (event.getAction() == MotionEvent.ACTION_DOWN) { + rect.set(0, 0, v.getWidth(), v.getHeight()); + } + boolean isCancelled = event.getAction() == MotionEvent.ACTION_CANCEL + || !rect.contains(event.getX(), event.getY()); + if (event.getAction() == MotionEvent.ACTION_MOVE && !isCancelled) return false; int motionEventAction = event.getAction(); int keyEventAction = motionEventAction == MotionEvent.ACTION_DOWN ? KeyEvent.ACTION_DOWN : ACTION_UP; - boolean isCancelled = event.getAction() == MotionEvent.ACTION_CANCEL; navButtonController.sendBackKeyEvent(keyEventAction, isCancelled); - if (motionEventAction == MotionEvent.ACTION_UP) { + if (motionEventAction == MotionEvent.ACTION_UP && !isCancelled) { buttonView.performClick(); + buttonView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); } return false; });