Allow gestures to executed started from deadzone on nav bar

Set slippery to true when gesture starts from deadzone and when finished
set slippery to its correct state.

Change-Id: I035d12f9639ce4af00db9e0d25b514f074b5198c
Fixes: 78886558
Test: swipe up from deadzone on nav bar (just above home button)
This commit is contained in:
Matthew Ng
2018-05-03 12:51:43 -07:00
parent 04e1f8e691
commit 1e14e96167

View File

@@ -124,6 +124,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
private GestureHelper mGestureHelper;
private final DeadZone mDeadZone;
private boolean mDeadZoneConsuming = false;
private final NavigationBarTransitions mBarTransitions;
private final OverviewProxyService mOverviewProxyService;
@@ -291,8 +292,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (mDeadZone.onTouchEvent(event)) {
// Consumed the touch event
if (shouldDeadZoneConsumeTouchEvents(event)) {
return true;
}
switch (event.getActionMasked()) {
@@ -314,8 +314,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mDeadZone.onTouchEvent(event)) {
// Consumed the touch event
if (shouldDeadZoneConsumeTouchEvents(event)) {
return true;
}
if (mGestureHelper.onTouchEvent(event)) {
@@ -324,6 +323,26 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
return super.onTouchEvent(event);
}
private boolean shouldDeadZoneConsumeTouchEvents(MotionEvent event) {
if (mDeadZone.onTouchEvent(event) || mDeadZoneConsuming) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
// Allow gestures starting in the deadzone to be slippery
setSlippery(true);
mDeadZoneConsuming = true;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
// When a gesture started in the deadzone is finished, restore slippery state
updateSlippery();
mDeadZoneConsuming = false;
break;
}
return true;
}
return false;
}
public @NavigationBarCompat.HitTarget int getDownHitTarget() {
return mDownHitTarget;
}