Fixing issue with lingering dismiss PiP overlay.

am: b54b65b001

Change-Id: Iedc5f922b8e4db9cec6fc9f2b28e59846682df2c
This commit is contained in:
Winson Chung
2017-04-27 00:49:33 +00:00
committed by android-build-merger

View File

@@ -225,7 +225,7 @@ public class PipTouchHandler implements TunerService.Tunable {
if (mIsMinimized) {
setMinimizedStateInternal(false);
}
mDismissViewController.destroyDismissTarget();
cleanUpDismissTarget();
mShowPipMenuOnAnimationEnd = true;
}
@@ -334,6 +334,12 @@ public class PipTouchHandler implements TunerService.Tunable {
mAccessibilityManager.setPictureInPictureActionReplacingConnection(isRegistered
? new PipAccessibilityInteractionConnection(mMotionHelper,
this::onAccessibilityShowMenu, mHandler) : null);
if (!isRegistered && mTouchState.isUserInteracting()) {
// If the input consumer is unregistered while the user is interacting, then we may not
// get the final TOUCH_UP event, so clean up the dismiss target as well
cleanUpDismissTarget();
}
}
private void onAccessibilityShowMenu() {
@@ -578,11 +584,11 @@ public class PipTouchHandler implements TunerService.Tunable {
if (touchState.startedDragging()) {
mSavedSnapFraction = -1f;
}
if (touchState.startedDragging() && ENABLE_DISMISS_DRAG_TO_EDGE) {
mHandler.removeCallbacks(mShowDismissAffordance);
mDismissViewController.showDismissTarget();
if (ENABLE_DISMISS_DRAG_TO_EDGE) {
mHandler.removeCallbacks(mShowDismissAffordance);
mDismissViewController.showDismissTarget();
}
}
if (touchState.isDragging()) {
@@ -625,6 +631,12 @@ public class PipTouchHandler implements TunerService.Tunable {
@Override
public boolean onUp(PipTouchState touchState) {
if (ENABLE_DISMISS_DRAG_TO_EDGE) {
// Clean up the dismiss target regardless of the touch state in case the touch
// enabled state changes while the user is interacting
cleanUpDismissTarget();
}
if (!touchState.isUserInteracting()) {
return false;
}
@@ -640,18 +652,14 @@ public class PipTouchHandler implements TunerService.Tunable {
final boolean isFlingToBot = isFling && vel.y > 0 && !isHorizontal
&& (mMovementWithinDismiss || isUpWithinDimiss);
if (ENABLE_DISMISS_DRAG_TO_EDGE) {
try {
mHandler.removeCallbacks(mShowDismissAffordance);
if (mMotionHelper.shouldDismissPip() || isFlingToBot) {
mMotionHelper.animateDismiss(mMotionHelper.getBounds(), vel.x,
vel.y, mUpdateScrimListener);
MetricsLogger.action(mContext,
MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
METRIC_VALUE_DISMISSED_BY_DRAG);
return true;
}
} finally {
mDismissViewController.destroyDismissTarget();
// Check if the user dragged or flung the PiP offscreen to dismiss it
if (mMotionHelper.shouldDismissPip() || isFlingToBot) {
mMotionHelper.animateDismiss(mMotionHelper.getBounds(), vel.x,
vel.y, mUpdateScrimListener);
MetricsLogger.action(mContext,
MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
METRIC_VALUE_DISMISSED_BY_DRAG);
return true;
}
}
@@ -728,6 +736,14 @@ public class PipTouchHandler implements TunerService.Tunable {
: mNormalMovementBounds;
}
/**
* Removes the dismiss target and cancels any pending callbacks to show it.
*/
private void cleanUpDismissTarget() {
mHandler.removeCallbacks(mShowDismissAffordance);
mDismissViewController.destroyDismissTarget();
}
public void dump(PrintWriter pw, String prefix) {
final String innerPrefix = prefix + " ";
pw.println(prefix + TAG);