diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java index 6115aa8272f18..2ec180d9b3b58 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java @@ -202,8 +202,8 @@ public class RecentsViewTouchHandler { * Handles dragging touch events */ private void handleTouchEvent(MotionEvent ev) { - int action = ev.getAction(); - switch (action & MotionEvent.ACTION_MASK) { + int action = ev.getActionMasked(); + switch (action) { case MotionEvent.ACTION_DOWN: mDownPos.set((int) ev.getX(), (int) ev.getY()); break; @@ -258,7 +258,7 @@ public class RecentsViewTouchHandler { case MotionEvent.ACTION_CANCEL: { if (mDragRequested) { EventBus.getDefault().send(new DragEndEvent(mDragTask, mTaskView, - mLastDropTarget)); + action == MotionEvent.ACTION_UP ? mLastDropTarget : null)); break; } } diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index 11b01ccb9c684..9199d10aa5754 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -1914,6 +1914,14 @@ public class AppTransition implements Dump { setAppTransition(transit); } } + if (transit != TRANSIT_DOCK_TASK_FROM_RECENTS + && mNextAppTransition == TRANSIT_DOCK_TASK_FROM_RECENTS) { + + // Somebody is trying to start another transition while we are waiting for the docking + // window to be drawn. Because TRANSIT_DOCK_TASK_FROM_RECENTS starts prolonged + // animations, we need to override it or our prolonged animations will never be ended. + setAppTransition(transit); + } boolean prepared = prepare(); if (isTransitionSet()) { mService.mH.removeMessages(H.APP_TRANSITION_TIMEOUT);