Loading services/core/java/com/android/server/wm/TaskPositioner.java +1 −1 Original line number Diff line number Diff line Loading @@ -203,7 +203,7 @@ class TaskPositioner { // Post back to WM to handle clean-ups. We still need the input // event handler for the last finishInputEvent()! mService.mH.sendEmptyMessage(H.FINISH_TASK_POSITIONING); mService.mTaskPositioningController.finishTaskPositioning(); } handled = true; } catch (Exception e) { Loading services/core/java/com/android/server/wm/TaskPositioningController.java +34 −25 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import android.annotation.Nullable; import android.app.IActivityManager; import android.os.RemoteException; import android.os.Handler; import android.os.Looper; import android.util.Slog; import android.view.Display; import android.view.IWindow; Loading @@ -37,6 +39,7 @@ class TaskPositioningController { private final InputManagerService mInputManager; private final InputMonitor mInputMonitor; private final IActivityManager mActivityManager; private final Handler mHandler; @GuardedBy("WindowManagerSerivce.mWindowMap") private @Nullable TaskPositioner mTaskPositioner; Loading @@ -50,11 +53,12 @@ class TaskPositioningController { } TaskPositioningController(WindowManagerService service, InputManagerService inputManager, InputMonitor inputMonitor, IActivityManager activityManager) { InputMonitor inputMonitor, IActivityManager activityManager, Looper looper) { mService = service; mInputMonitor = inputMonitor; mInputManager = inputManager; mActivityManager = activityManager; mHandler = new Handler(looper); } boolean startMovingTask(IWindow window, float startX, float startY) { Loading @@ -75,6 +79,7 @@ class TaskPositioningController { } void handleTapOutsideTask(DisplayContent displayContent, int x, int y) { mHandler.post(() -> { int taskId = -1; synchronized (mService.mWindowMap) { final Task task = displayContent.findTaskForResizePoint(x, y); Loading @@ -91,8 +96,10 @@ class TaskPositioningController { if (taskId >= 0) { try { mActivityManager.setFocusedTask(taskId); } catch(RemoteException e) {} } catch (RemoteException e) { } } }); } private boolean startPositioningLocked(WindowState win, boolean resize, Loading Loading @@ -145,7 +152,8 @@ class TaskPositioningController { return true; } void finishPositioning() { void finishTaskPositioning() { mHandler.post(() -> { if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "finishPositioning"); synchronized (mService.mWindowMap) { Loading @@ -155,5 +163,6 @@ class TaskPositioningController { mInputMonitor.updateInputWindowsLw(true /*force*/); } } }); } } services/core/java/com/android/server/wm/TaskTapPointerEventListener.java +2 −2 Original line number Diff line number Diff line Loading @@ -62,8 +62,8 @@ public class TaskTapPointerEventListener implements PointerEventListener { synchronized (this) { if (!mTouchExcludeRegion.contains(x, y)) { mService.mH.obtainMessage(H.TAP_OUTSIDE_TASK, x, y, mDisplayContent).sendToTarget(); mService.mTaskPositioningController.handleTapOutsideTask( mDisplayContent, x, y); } } } Loading services/core/java/com/android/server/wm/WindowManagerService.java +2 −16 Original line number Diff line number Diff line Loading @@ -1086,8 +1086,8 @@ public class WindowManagerService extends IWindowManager.Stub mAllowTheaterModeWakeFromLayout = context.getResources().getBoolean( com.android.internal.R.bool.config_allowTheaterModeWakeFromWindowLayout); mTaskPositioningController = new TaskPositioningController(this, mInputManager, mInputMonitor, mActivityManager); mTaskPositioningController = new TaskPositioningController( this, mInputManager, mInputMonitor, mActivityManager, mH.getLooper()); mDragDropController = new DragDropController(this, mH.getLooper()); LocalServices.addService(WindowManagerInternal.class, new LocalService()); Loading Loading @@ -4609,7 +4609,6 @@ public class WindowManagerService extends IWindowManager.Stub public static final int DO_ANIMATION_CALLBACK = 26; public static final int CLIENT_FREEZE_TIMEOUT = 30; public static final int TAP_OUTSIDE_TASK = 31; public static final int NOTIFY_ACTIVITY_DRAWN = 32; public static final int ALL_WINDOWS_DRAWN = 33; Loading @@ -4623,8 +4622,6 @@ public class WindowManagerService extends IWindowManager.Stub public static final int RESET_ANR_MESSAGE = 38; public static final int WALLPAPER_DRAW_PENDING_TIMEOUT = 39; public static final int FINISH_TASK_POSITIONING = 40; public static final int UPDATE_DOCKED_STACK_DIVIDER = 41; public static final int WINDOW_REPLACEMENT_TIMEOUT = 46; Loading Loading @@ -4901,17 +4898,6 @@ public class WindowManagerService extends IWindowManager.Stub break; } case TAP_OUTSIDE_TASK: { mTaskPositioningController.handleTapOutsideTask( (DisplayContent)msg.obj, msg.arg1, msg.arg2); } break; case FINISH_TASK_POSITIONING: { mTaskPositioningController.finishPositioning(); } break; case NOTIFY_ACTIVITY_DRAWN: try { mActivityManager.notifyActivityDrawn((IBinder) msg.obj); Loading services/tests/servicestests/src/com/android/server/wm/TaskPositioningControllerTests.java +9 −6 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.view.InputChannel; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; /** * Tests for the {@link TaskPositioningController} class. * Loading Loading @@ -78,9 +79,9 @@ public class TaskPositioningControllerTests extends WindowTestsBase { assertNotNull(mTarget.getDragWindowHandleLocked()); } assertTrue(sWm.mH.runWithScissors(() -> { mTarget.finishPositioning(); }, TIMEOUT_MS)); mTarget.finishTaskPositioning(); // Wait until the looper processes finishTaskPositioning. assertTrue(sWm.mH.runWithScissors(() -> {}, TIMEOUT_MS)); assertFalse(mTarget.isPositioningLocked()); assertNull(mTarget.getDragWindowHandleLocked()); Loading @@ -99,15 +100,17 @@ public class TaskPositioningControllerTests extends WindowTestsBase { assertNotNull(mWindow.getTask().getTopVisibleAppMainWindow()); mTarget.handleTapOutsideTask(content, 0, 0); // Wait until the looper processes finishTaskPositioning. assertTrue(sWm.mH.runWithScissors(() -> {}, TIMEOUT_MS)); synchronized (sWm.mWindowMap) { assertTrue(mTarget.isPositioningLocked()); assertNotNull(mTarget.getDragWindowHandleLocked()); } assertTrue(sWm.mH.runWithScissors(() -> { mTarget.finishPositioning(); }, TIMEOUT_MS)); mTarget.finishTaskPositioning(); // Wait until the looper processes finishTaskPositioning. assertTrue(sWm.mH.runWithScissors(() -> {}, TIMEOUT_MS)); assertFalse(mTarget.isPositioningLocked()); assertNull(mTarget.getDragWindowHandleLocked()); Loading Loading
services/core/java/com/android/server/wm/TaskPositioner.java +1 −1 Original line number Diff line number Diff line Loading @@ -203,7 +203,7 @@ class TaskPositioner { // Post back to WM to handle clean-ups. We still need the input // event handler for the last finishInputEvent()! mService.mH.sendEmptyMessage(H.FINISH_TASK_POSITIONING); mService.mTaskPositioningController.finishTaskPositioning(); } handled = true; } catch (Exception e) { Loading
services/core/java/com/android/server/wm/TaskPositioningController.java +34 −25 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import android.annotation.Nullable; import android.app.IActivityManager; import android.os.RemoteException; import android.os.Handler; import android.os.Looper; import android.util.Slog; import android.view.Display; import android.view.IWindow; Loading @@ -37,6 +39,7 @@ class TaskPositioningController { private final InputManagerService mInputManager; private final InputMonitor mInputMonitor; private final IActivityManager mActivityManager; private final Handler mHandler; @GuardedBy("WindowManagerSerivce.mWindowMap") private @Nullable TaskPositioner mTaskPositioner; Loading @@ -50,11 +53,12 @@ class TaskPositioningController { } TaskPositioningController(WindowManagerService service, InputManagerService inputManager, InputMonitor inputMonitor, IActivityManager activityManager) { InputMonitor inputMonitor, IActivityManager activityManager, Looper looper) { mService = service; mInputMonitor = inputMonitor; mInputManager = inputManager; mActivityManager = activityManager; mHandler = new Handler(looper); } boolean startMovingTask(IWindow window, float startX, float startY) { Loading @@ -75,6 +79,7 @@ class TaskPositioningController { } void handleTapOutsideTask(DisplayContent displayContent, int x, int y) { mHandler.post(() -> { int taskId = -1; synchronized (mService.mWindowMap) { final Task task = displayContent.findTaskForResizePoint(x, y); Loading @@ -91,8 +96,10 @@ class TaskPositioningController { if (taskId >= 0) { try { mActivityManager.setFocusedTask(taskId); } catch(RemoteException e) {} } catch (RemoteException e) { } } }); } private boolean startPositioningLocked(WindowState win, boolean resize, Loading Loading @@ -145,7 +152,8 @@ class TaskPositioningController { return true; } void finishPositioning() { void finishTaskPositioning() { mHandler.post(() -> { if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "finishPositioning"); synchronized (mService.mWindowMap) { Loading @@ -155,5 +163,6 @@ class TaskPositioningController { mInputMonitor.updateInputWindowsLw(true /*force*/); } } }); } }
services/core/java/com/android/server/wm/TaskTapPointerEventListener.java +2 −2 Original line number Diff line number Diff line Loading @@ -62,8 +62,8 @@ public class TaskTapPointerEventListener implements PointerEventListener { synchronized (this) { if (!mTouchExcludeRegion.contains(x, y)) { mService.mH.obtainMessage(H.TAP_OUTSIDE_TASK, x, y, mDisplayContent).sendToTarget(); mService.mTaskPositioningController.handleTapOutsideTask( mDisplayContent, x, y); } } } Loading
services/core/java/com/android/server/wm/WindowManagerService.java +2 −16 Original line number Diff line number Diff line Loading @@ -1086,8 +1086,8 @@ public class WindowManagerService extends IWindowManager.Stub mAllowTheaterModeWakeFromLayout = context.getResources().getBoolean( com.android.internal.R.bool.config_allowTheaterModeWakeFromWindowLayout); mTaskPositioningController = new TaskPositioningController(this, mInputManager, mInputMonitor, mActivityManager); mTaskPositioningController = new TaskPositioningController( this, mInputManager, mInputMonitor, mActivityManager, mH.getLooper()); mDragDropController = new DragDropController(this, mH.getLooper()); LocalServices.addService(WindowManagerInternal.class, new LocalService()); Loading Loading @@ -4609,7 +4609,6 @@ public class WindowManagerService extends IWindowManager.Stub public static final int DO_ANIMATION_CALLBACK = 26; public static final int CLIENT_FREEZE_TIMEOUT = 30; public static final int TAP_OUTSIDE_TASK = 31; public static final int NOTIFY_ACTIVITY_DRAWN = 32; public static final int ALL_WINDOWS_DRAWN = 33; Loading @@ -4623,8 +4622,6 @@ public class WindowManagerService extends IWindowManager.Stub public static final int RESET_ANR_MESSAGE = 38; public static final int WALLPAPER_DRAW_PENDING_TIMEOUT = 39; public static final int FINISH_TASK_POSITIONING = 40; public static final int UPDATE_DOCKED_STACK_DIVIDER = 41; public static final int WINDOW_REPLACEMENT_TIMEOUT = 46; Loading Loading @@ -4901,17 +4898,6 @@ public class WindowManagerService extends IWindowManager.Stub break; } case TAP_OUTSIDE_TASK: { mTaskPositioningController.handleTapOutsideTask( (DisplayContent)msg.obj, msg.arg1, msg.arg2); } break; case FINISH_TASK_POSITIONING: { mTaskPositioningController.finishPositioning(); } break; case NOTIFY_ACTIVITY_DRAWN: try { mActivityManager.notifyActivityDrawn((IBinder) msg.obj); Loading
services/tests/servicestests/src/com/android/server/wm/TaskPositioningControllerTests.java +9 −6 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.view.InputChannel; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; /** * Tests for the {@link TaskPositioningController} class. * Loading Loading @@ -78,9 +79,9 @@ public class TaskPositioningControllerTests extends WindowTestsBase { assertNotNull(mTarget.getDragWindowHandleLocked()); } assertTrue(sWm.mH.runWithScissors(() -> { mTarget.finishPositioning(); }, TIMEOUT_MS)); mTarget.finishTaskPositioning(); // Wait until the looper processes finishTaskPositioning. assertTrue(sWm.mH.runWithScissors(() -> {}, TIMEOUT_MS)); assertFalse(mTarget.isPositioningLocked()); assertNull(mTarget.getDragWindowHandleLocked()); Loading @@ -99,15 +100,17 @@ public class TaskPositioningControllerTests extends WindowTestsBase { assertNotNull(mWindow.getTask().getTopVisibleAppMainWindow()); mTarget.handleTapOutsideTask(content, 0, 0); // Wait until the looper processes finishTaskPositioning. assertTrue(sWm.mH.runWithScissors(() -> {}, TIMEOUT_MS)); synchronized (sWm.mWindowMap) { assertTrue(mTarget.isPositioningLocked()); assertNotNull(mTarget.getDragWindowHandleLocked()); } assertTrue(sWm.mH.runWithScissors(() -> { mTarget.finishPositioning(); }, TIMEOUT_MS)); mTarget.finishTaskPositioning(); // Wait until the looper processes finishTaskPositioning. assertTrue(sWm.mH.runWithScissors(() -> {}, TIMEOUT_MS)); assertFalse(mTarget.isPositioningLocked()); assertNull(mTarget.getDragWindowHandleLocked()); Loading