Move window moving and resizing handling to WindowManager
- add a startMoving API to initiate a window move from app, once
the move starts WindowManager will take over the event handling.
- detect touch events along window's outside border and start
a resize if necessary
Change-Id: Ic7e8baba34e0aa27a43173e044ffb46e93e219e0
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index b3244ff..9adcafc 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -64,9 +64,9 @@
public InputMonitor(WindowManagerService service) {
mService = service;
}
-
+
/* Notifies the window manager about a broken input channel.
- *
+ *
* Called by the InputManager.
*/
@Override
@@ -83,10 +83,10 @@
}
}
}
-
+
/* Notifies the window manager about an application that is not responding.
* Returns a new timeout to continue waiting in nanoseconds, or 0 to abort dispatch.
- *
+ *
* Called by the InputManager.
*/
@Override
@@ -257,6 +257,20 @@
}
}
+ final boolean inPositioning = (mService.mTaskPositioner != null);
+ if (inPositioning) {
+ if (WindowManagerService.DEBUG_TASK_POSITIONING) {
+ Log.d(WindowManagerService.TAG, "Inserting window handle for repositioning");
+ }
+ final InputWindowHandle dragWindowHandle = mService.mTaskPositioner.mDragWindowHandle;
+ if (dragWindowHandle != null) {
+ addInputWindowHandleLw(dragWindowHandle);
+ } else {
+ Slog.e(WindowManagerService.TAG,
+ "Repositioning is in progress but there is no drag window handle.");
+ }
+ }
+
boolean addInputConsumerHandle = mService.mInputConsumer != null;
// Add all windows on the default display.
@@ -437,56 +451,56 @@
if (WindowManagerService.DEBUG_INPUT) {
Slog.v(WindowManagerService.TAG, "Pausing WindowToken " + window);
}
-
+
window.paused = true;
updateInputWindowsLw(true /*force*/);
}
}
-
+
public void resumeDispatchingLw(WindowToken window) {
if (window.paused) {
if (WindowManagerService.DEBUG_INPUT) {
Slog.v(WindowManagerService.TAG, "Resuming WindowToken " + window);
}
-
+
window.paused = false;
updateInputWindowsLw(true /*force*/);
}
}
-
+
public void freezeInputDispatchingLw() {
if (! mInputDispatchFrozen) {
if (WindowManagerService.DEBUG_INPUT) {
Slog.v(WindowManagerService.TAG, "Freezing input dispatching");
}
-
+
mInputDispatchFrozen = true;
updateInputDispatchModeLw();
}
}
-
+
public void thawInputDispatchingLw() {
if (mInputDispatchFrozen) {
if (WindowManagerService.DEBUG_INPUT) {
Slog.v(WindowManagerService.TAG, "Thawing input dispatching");
}
-
+
mInputDispatchFrozen = false;
updateInputDispatchModeLw();
}
}
-
+
public void setEventDispatchingLw(boolean enabled) {
if (mInputDispatchEnabled != enabled) {
if (WindowManagerService.DEBUG_INPUT) {
Slog.v(WindowManagerService.TAG, "Setting event dispatching to " + enabled);
}
-
+
mInputDispatchEnabled = enabled;
updateInputDispatchModeLw();
}
}
-
+
private void updateInputDispatchModeLw() {
mService.mInputManager.setInputDispatchMode(mInputDispatchEnabled, mInputDispatchFrozen);
}