summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2019-12-19 10:45:48 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2019-12-19 10:45:48 +0000
commit37502e2fa224a595724b00340e7d2f5df5f89a01 (patch)
tree1493e2166e86d99ddec630eb10956e4a9d48770f
parent6366a55ac8b4649b8f0fef1c8a46de0c4fedd73c (diff)
parentee79dee7e61383687f19213a23ff024012bace77 (diff)
Merge "Revert "Fix drag and drop (2/3)"" into qt-qpr1-dev am: ee79dee7e6
Change-Id: If75a7db07edb2b11c2cf76b3898d84588ea6c635
-rw-r--r--services/core/java/com/android/server/wm/DragState.java6
-rw-r--r--services/core/java/com/android/server/wm/TaskPositioningController.java13
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerInternal.java3
3 files changed, 10 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java
index 553b0ffa6999..5fadddb0dedd 100644
--- a/services/core/java/com/android/server/wm/DragState.java
+++ b/services/core/java/com/android/server/wm/DragState.java
@@ -129,7 +129,6 @@ class DragState {
* {@code true} when {@link #closeLocked()} is called.
*/
private boolean mIsClosing;
- IBinder mTransferTouchFromToken;
DragState(WindowManagerService service, DragDropController controller, IBinder token,
SurfaceControl surface, int flags, IBinder localWin) {
@@ -173,10 +172,9 @@ class DragState {
mTmpClipRect.set(0, 0, mDisplaySize.x, mDisplaySize.y);
mTransaction.setWindowCrop(mInputSurface, mTmpClipRect);
- mTransaction.transferTouchFocus(mTransferTouchFromToken, h.token);
- mTransferTouchFromToken = null;
- // syncInputWindows here to ensure the input channel isn't removed before the transfer.
+ // syncInputWindows here to ensure the input window info is sent before the
+ // transferTouchFocus is called.
mTransaction.syncInputWindows();
mTransaction.apply();
}
diff --git a/services/core/java/com/android/server/wm/TaskPositioningController.java b/services/core/java/com/android/server/wm/TaskPositioningController.java
index 2441954012e5..56b3bba2a431 100644
--- a/services/core/java/com/android/server/wm/TaskPositioningController.java
+++ b/services/core/java/com/android/server/wm/TaskPositioningController.java
@@ -24,7 +24,6 @@ import android.app.IActivityTaskManager;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Handler;
-import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.util.Slog;
@@ -51,7 +50,6 @@ class TaskPositioningController {
private @Nullable TaskPositioner mTaskPositioner;
private final Rect mTmpClipRect = new Rect();
- private IBinder mTransferTouchFromToken;
boolean isPositioningLocked() {
return mTaskPositioner != null;
@@ -104,8 +102,6 @@ class TaskPositioningController {
mTmpClipRect.set(0, 0, p.x, p.y);
t.setWindowCrop(mInputSurface, mTmpClipRect);
- t.transferTouchFocus(mTransferTouchFromToken, h.token);
- mTransferTouchFromToken = null;
}
boolean startMovingTask(IWindow window, float startX, float startY) {
@@ -168,6 +164,7 @@ class TaskPositioningController {
mPositioningDisplay = displayContent;
mTaskPositioner = TaskPositioner.create(mService);
+ mTaskPositioner.register(displayContent);
// We need to grab the touch focus so that the touch events during the
// resizing/scrolling are not sent to the app. 'win' is the main window
@@ -178,8 +175,12 @@ class TaskPositioningController {
&& displayContent.mCurrentFocus.mAppToken == win.mAppToken) {
transferFocusFromWin = displayContent.mCurrentFocus;
}
- mTransferTouchFromToken = transferFocusFromWin.mInputChannel.getToken();
- mTaskPositioner.register(displayContent);
+ if (!mInputManager.transferTouchFocus(
+ transferFocusFromWin.mInputChannel, mTaskPositioner.mServerChannel)) {
+ Slog.e(TAG_WM, "startPositioningLocked: Unable to transfer touch focus");
+ cleanUpTaskPositioner();
+ return false;
+ }
mTaskPositioner.startDrag(win, resize, preserveOrientation, startX, startY);
return true;
diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java
index 40bec148b33b..b407ac5e60cf 100644
--- a/services/core/java/com/android/server/wm/WindowManagerInternal.java
+++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java
@@ -156,9 +156,8 @@ public abstract class WindowManagerInternal {
default boolean registerInputChannel(
DragState state, Display display, InputManagerService service,
InputChannel source) {
- state.mTransferTouchFromToken = source.getToken();
state.register(display);
- return true;
+ return service.transferTouchFocus(source, state.getInputChannel());
}
/**