Loading services/core/java/com/android/server/wm/InputMonitor.java +3 −2 Original line number Diff line number Diff line Loading @@ -390,12 +390,13 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks { } } final boolean inPositioning = (mService.mTaskPositioner != null); final boolean inPositioning = mService.mTaskPositioningController.isPositioningLocked(); if (inPositioning) { if (DEBUG_TASK_POSITIONING) { Log.d(TAG_WM, "Inserting window handle for repositioning"); } final InputWindowHandle dragWindowHandle = mService.mTaskPositioner.mDragWindowHandle; final InputWindowHandle dragWindowHandle = mService.mTaskPositioningController.getDragWindowHandleLocked(); if (dragWindowHandle != null) { addInputWindowHandle(dragWindowHandle); } else { Loading services/core/java/com/android/server/wm/Session.java +1 −1 Original line number Diff line number Diff line Loading @@ -368,7 +368,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { long ident = Binder.clearCallingIdentity(); try { return mService.startMovingTask(window, startX, startY); return mService.mTaskPositioningController.startMovingTask(window, startX, startY); } finally { Binder.restoreCallingIdentity(ident); } Loading services/core/java/com/android/server/wm/TaskPositioner.java +0 −5 Original line number Diff line number Diff line Loading @@ -16,15 +16,11 @@ package com.android.server.wm; import static android.app.ActivityManager.SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT; import static android.app.ActivityManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; import static android.app.ActivityManager.RESIZE_MODE_USER; import static android.app.ActivityManager.RESIZE_MODE_USER_FORCED; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_POSITIONING; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.dipToPixel; Loading @@ -44,7 +40,6 @@ import android.util.Slog; import android.view.BatchedInputEventReceiver; import android.view.Choreographer; import android.view.Display; import android.view.DisplayInfo; import android.view.InputChannel; import android.view.InputDevice; import android.view.InputEvent; Loading services/core/java/com/android/server/wm/TaskPositioningController.java 0 → 100644 +159 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.wm; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_POSITIONING; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import android.annotation.Nullable; import android.app.IActivityManager; import android.os.RemoteException; import android.util.Slog; import android.view.Display; import android.view.IWindow; import com.android.internal.annotations.GuardedBy; import com.android.server.input.InputManagerService; import com.android.server.input.InputWindowHandle; /** * Controller for task positioning by drag. */ class TaskPositioningController { private final WindowManagerService mService; private final InputManagerService mInputManager; private final InputMonitor mInputMonitor; private final IActivityManager mActivityManager; @GuardedBy("WindowManagerSerivce.mWindowMap") private @Nullable TaskPositioner mTaskPositioner; boolean isPositioningLocked() { return mTaskPositioner != null; } InputWindowHandle getDragWindowHandleLocked() { return mTaskPositioner != null ? mTaskPositioner.mDragWindowHandle : null; } TaskPositioningController(WindowManagerService service, InputManagerService inputManager, InputMonitor inputMonitor, IActivityManager activityManager) { mService = service; mInputMonitor = inputMonitor; mInputManager = inputManager; mActivityManager = activityManager; } boolean startMovingTask(IWindow window, float startX, float startY) { WindowState win = null; synchronized (mService.mWindowMap) { win = mService.windowForClientLocked(null, window, false); // win shouldn't be null here, pass it down to startPositioningLocked // to get warning if it's null. if (!startPositioningLocked( win, false /*resize*/, false /*preserveOrientation*/, startX, startY)) { return false; } } try { mActivityManager.setFocusedTask(win.getTask().mTaskId); } catch(RemoteException e) {} return true; } void handleTapOutsideTask(DisplayContent displayContent, int x, int y) { int taskId = -1; synchronized (mService.mWindowMap) { final Task task = displayContent.findTaskForResizePoint(x, y); if (task != null) { if (!startPositioningLocked(task.getTopVisibleAppMainWindow(), true /*resize*/, task.preserveOrientationOnResize(), x, y)) { return; } taskId = task.mTaskId; } else { taskId = displayContent.taskIdFromPoint(x, y); } } if (taskId >= 0) { try { mActivityManager.setFocusedTask(taskId); } catch(RemoteException e) {} } } private boolean startPositioningLocked(WindowState win, boolean resize, boolean preserveOrientation, float startX, float startY) { if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "startPositioningLocked: " + "win=" + win + ", resize=" + resize + ", preserveOrientation=" + preserveOrientation + ", {" + startX + ", " + startY + "}"); if (win == null || win.getAppToken() == null) { Slog.w(TAG_WM, "startPositioningLocked: Bad window " + win); return false; } if (win.mInputChannel == null) { Slog.wtf(TAG_WM, "startPositioningLocked: " + win + " has no input channel, " + " probably being removed"); return false; } final DisplayContent displayContent = win.getDisplayContent(); if (displayContent == null) { Slog.w(TAG_WM, "startPositioningLocked: Invalid display content " + win); return false; } Display display = displayContent.getDisplay(); mTaskPositioner = new TaskPositioner(mService); mTaskPositioner.register(displayContent); mInputMonitor.updateInputWindowsLw(true /*force*/); // 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 // of the app, it may not have focus since there might be other windows // on top (eg. a dialog window). WindowState transferFocusFromWin = win; if (mService.mCurrentFocus != null && mService.mCurrentFocus != win && mService.mCurrentFocus.mAppToken == win.mAppToken) { transferFocusFromWin = mService.mCurrentFocus; } if (!mInputManager.transferTouchFocus( transferFocusFromWin.mInputChannel, mTaskPositioner.mServerChannel)) { Slog.e(TAG_WM, "startPositioningLocked: Unable to transfer touch focus"); mTaskPositioner.unregister(); mTaskPositioner = null; mInputMonitor.updateInputWindowsLw(true /*force*/); return false; } mTaskPositioner.startDrag(win, resize, preserveOrientation, startX, startY); return true; } void finishPositioning() { if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "finishPositioning"); synchronized (mService.mWindowMap) { if (mTaskPositioner != null) { mTaskPositioner.unregister(); mTaskPositioner = null; mInputMonitor.updateInputWindowsLw(true /*force*/); } } } } services/core/java/com/android/server/wm/WindowManagerService.java +6 −104 Original line number Diff line number Diff line Loading @@ -755,7 +755,7 @@ public class WindowManagerService extends IWindowManager.Stub // Whether or not a layout can cause a wake up when theater mode is enabled. boolean mAllowTheaterModeWakeFromLayout; TaskPositioner mTaskPositioner; final TaskPositioningController mTaskPositioningController; final DragDropController mDragDropController; // For frozen screen animations. Loading Loading @@ -1088,6 +1088,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); mDragDropController = new DragDropController(this, mH.getLooper()); LocalServices.addService(WindowManagerInternal.class, new LocalService()); Loading Loading @@ -4442,107 +4444,6 @@ public class WindowManagerService extends IWindowManager.Stub } } boolean startMovingTask(IWindow window, float startX, float startY) { WindowState win = null; synchronized (mWindowMap) { win = windowForClientLocked(null, window, false); // win shouldn't be null here, pass it down to startPositioningLocked // to get warning if it's null. if (!startPositioningLocked( win, false /*resize*/, false /*preserveOrientation*/, startX, startY)) { return false; } } try { mActivityManager.setFocusedTask(win.getTask().mTaskId); } catch(RemoteException e) {} return true; } private void handleTapOutsideTask(DisplayContent displayContent, int x, int y) { int taskId = -1; synchronized (mWindowMap) { final Task task = displayContent.findTaskForResizePoint(x, y); if (task != null) { if (!startPositioningLocked(task.getTopVisibleAppMainWindow(), true /*resize*/, task.preserveOrientationOnResize(), x, y)) { return; } taskId = task.mTaskId; } else { taskId = displayContent.taskIdFromPoint(x, y); } } if (taskId >= 0) { try { mActivityManager.setFocusedTask(taskId); } catch(RemoteException e) {} } } private boolean startPositioningLocked(WindowState win, boolean resize, boolean preserveOrientation, float startX, float startY) { if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "startPositioningLocked: " + "win=" + win + ", resize=" + resize + ", preserveOrientation=" + preserveOrientation + ", {" + startX + ", " + startY + "}"); if (win == null || win.getAppToken() == null) { Slog.w(TAG_WM, "startPositioningLocked: Bad window " + win); return false; } if (win.mInputChannel == null) { Slog.wtf(TAG_WM, "startPositioningLocked: " + win + " has no input channel, " + " probably being removed"); return false; } final DisplayContent displayContent = win.getDisplayContent(); if (displayContent == null) { Slog.w(TAG_WM, "startPositioningLocked: Invalid display content " + win); return false; } Display display = displayContent.getDisplay(); mTaskPositioner = new TaskPositioner(this); mTaskPositioner.register(displayContent); mInputMonitor.updateInputWindowsLw(true /*force*/); // 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 // of the app, it may not have focus since there might be other windows // on top (eg. a dialog window). WindowState transferFocusFromWin = win; if (mCurrentFocus != null && mCurrentFocus != win && mCurrentFocus.mAppToken == win.mAppToken) { transferFocusFromWin = mCurrentFocus; } if (!mInputManager.transferTouchFocus( transferFocusFromWin.mInputChannel, mTaskPositioner.mServerChannel)) { Slog.e(TAG_WM, "startPositioningLocked: Unable to transfer touch focus"); mTaskPositioner.unregister(); mTaskPositioner = null; mInputMonitor.updateInputWindowsLw(true /*force*/); return false; } mTaskPositioner.startDrag(win, resize, preserveOrientation, startX, startY); return true; } private void finishPositioning() { if (DEBUG_TASK_POSITIONING) { Slog.d(TAG_WM, "finishPositioning"); } synchronized (mWindowMap) { if (mTaskPositioner != null) { mTaskPositioner.unregister(); mTaskPositioner = null; mInputMonitor.updateInputWindowsLw(true /*force*/); } } } // ------------------------------------------------------------- // Input Events and Focus Management // ------------------------------------------------------------- Loading Loading @@ -5005,12 +4906,13 @@ public class WindowManagerService extends IWindowManager.Stub } case TAP_OUTSIDE_TASK: { handleTapOutsideTask((DisplayContent)msg.obj, msg.arg1, msg.arg2); mTaskPositioningController.handleTapOutsideTask( (DisplayContent)msg.obj, msg.arg1, msg.arg2); } break; case FINISH_TASK_POSITIONING: { finishPositioning(); mTaskPositioningController.finishPositioning(); } break; Loading Loading
services/core/java/com/android/server/wm/InputMonitor.java +3 −2 Original line number Diff line number Diff line Loading @@ -390,12 +390,13 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks { } } final boolean inPositioning = (mService.mTaskPositioner != null); final boolean inPositioning = mService.mTaskPositioningController.isPositioningLocked(); if (inPositioning) { if (DEBUG_TASK_POSITIONING) { Log.d(TAG_WM, "Inserting window handle for repositioning"); } final InputWindowHandle dragWindowHandle = mService.mTaskPositioner.mDragWindowHandle; final InputWindowHandle dragWindowHandle = mService.mTaskPositioningController.getDragWindowHandleLocked(); if (dragWindowHandle != null) { addInputWindowHandle(dragWindowHandle); } else { Loading
services/core/java/com/android/server/wm/Session.java +1 −1 Original line number Diff line number Diff line Loading @@ -368,7 +368,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { long ident = Binder.clearCallingIdentity(); try { return mService.startMovingTask(window, startX, startY); return mService.mTaskPositioningController.startMovingTask(window, startX, startY); } finally { Binder.restoreCallingIdentity(ident); } Loading
services/core/java/com/android/server/wm/TaskPositioner.java +0 −5 Original line number Diff line number Diff line Loading @@ -16,15 +16,11 @@ package com.android.server.wm; import static android.app.ActivityManager.SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT; import static android.app.ActivityManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; import static android.app.ActivityManager.RESIZE_MODE_USER; import static android.app.ActivityManager.RESIZE_MODE_USER_FORCED; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_POSITIONING; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.dipToPixel; Loading @@ -44,7 +40,6 @@ import android.util.Slog; import android.view.BatchedInputEventReceiver; import android.view.Choreographer; import android.view.Display; import android.view.DisplayInfo; import android.view.InputChannel; import android.view.InputDevice; import android.view.InputEvent; Loading
services/core/java/com/android/server/wm/TaskPositioningController.java 0 → 100644 +159 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.wm; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_POSITIONING; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import android.annotation.Nullable; import android.app.IActivityManager; import android.os.RemoteException; import android.util.Slog; import android.view.Display; import android.view.IWindow; import com.android.internal.annotations.GuardedBy; import com.android.server.input.InputManagerService; import com.android.server.input.InputWindowHandle; /** * Controller for task positioning by drag. */ class TaskPositioningController { private final WindowManagerService mService; private final InputManagerService mInputManager; private final InputMonitor mInputMonitor; private final IActivityManager mActivityManager; @GuardedBy("WindowManagerSerivce.mWindowMap") private @Nullable TaskPositioner mTaskPositioner; boolean isPositioningLocked() { return mTaskPositioner != null; } InputWindowHandle getDragWindowHandleLocked() { return mTaskPositioner != null ? mTaskPositioner.mDragWindowHandle : null; } TaskPositioningController(WindowManagerService service, InputManagerService inputManager, InputMonitor inputMonitor, IActivityManager activityManager) { mService = service; mInputMonitor = inputMonitor; mInputManager = inputManager; mActivityManager = activityManager; } boolean startMovingTask(IWindow window, float startX, float startY) { WindowState win = null; synchronized (mService.mWindowMap) { win = mService.windowForClientLocked(null, window, false); // win shouldn't be null here, pass it down to startPositioningLocked // to get warning if it's null. if (!startPositioningLocked( win, false /*resize*/, false /*preserveOrientation*/, startX, startY)) { return false; } } try { mActivityManager.setFocusedTask(win.getTask().mTaskId); } catch(RemoteException e) {} return true; } void handleTapOutsideTask(DisplayContent displayContent, int x, int y) { int taskId = -1; synchronized (mService.mWindowMap) { final Task task = displayContent.findTaskForResizePoint(x, y); if (task != null) { if (!startPositioningLocked(task.getTopVisibleAppMainWindow(), true /*resize*/, task.preserveOrientationOnResize(), x, y)) { return; } taskId = task.mTaskId; } else { taskId = displayContent.taskIdFromPoint(x, y); } } if (taskId >= 0) { try { mActivityManager.setFocusedTask(taskId); } catch(RemoteException e) {} } } private boolean startPositioningLocked(WindowState win, boolean resize, boolean preserveOrientation, float startX, float startY) { if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "startPositioningLocked: " + "win=" + win + ", resize=" + resize + ", preserveOrientation=" + preserveOrientation + ", {" + startX + ", " + startY + "}"); if (win == null || win.getAppToken() == null) { Slog.w(TAG_WM, "startPositioningLocked: Bad window " + win); return false; } if (win.mInputChannel == null) { Slog.wtf(TAG_WM, "startPositioningLocked: " + win + " has no input channel, " + " probably being removed"); return false; } final DisplayContent displayContent = win.getDisplayContent(); if (displayContent == null) { Slog.w(TAG_WM, "startPositioningLocked: Invalid display content " + win); return false; } Display display = displayContent.getDisplay(); mTaskPositioner = new TaskPositioner(mService); mTaskPositioner.register(displayContent); mInputMonitor.updateInputWindowsLw(true /*force*/); // 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 // of the app, it may not have focus since there might be other windows // on top (eg. a dialog window). WindowState transferFocusFromWin = win; if (mService.mCurrentFocus != null && mService.mCurrentFocus != win && mService.mCurrentFocus.mAppToken == win.mAppToken) { transferFocusFromWin = mService.mCurrentFocus; } if (!mInputManager.transferTouchFocus( transferFocusFromWin.mInputChannel, mTaskPositioner.mServerChannel)) { Slog.e(TAG_WM, "startPositioningLocked: Unable to transfer touch focus"); mTaskPositioner.unregister(); mTaskPositioner = null; mInputMonitor.updateInputWindowsLw(true /*force*/); return false; } mTaskPositioner.startDrag(win, resize, preserveOrientation, startX, startY); return true; } void finishPositioning() { if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "finishPositioning"); synchronized (mService.mWindowMap) { if (mTaskPositioner != null) { mTaskPositioner.unregister(); mTaskPositioner = null; mInputMonitor.updateInputWindowsLw(true /*force*/); } } } }
services/core/java/com/android/server/wm/WindowManagerService.java +6 −104 Original line number Diff line number Diff line Loading @@ -755,7 +755,7 @@ public class WindowManagerService extends IWindowManager.Stub // Whether or not a layout can cause a wake up when theater mode is enabled. boolean mAllowTheaterModeWakeFromLayout; TaskPositioner mTaskPositioner; final TaskPositioningController mTaskPositioningController; final DragDropController mDragDropController; // For frozen screen animations. Loading Loading @@ -1088,6 +1088,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); mDragDropController = new DragDropController(this, mH.getLooper()); LocalServices.addService(WindowManagerInternal.class, new LocalService()); Loading Loading @@ -4442,107 +4444,6 @@ public class WindowManagerService extends IWindowManager.Stub } } boolean startMovingTask(IWindow window, float startX, float startY) { WindowState win = null; synchronized (mWindowMap) { win = windowForClientLocked(null, window, false); // win shouldn't be null here, pass it down to startPositioningLocked // to get warning if it's null. if (!startPositioningLocked( win, false /*resize*/, false /*preserveOrientation*/, startX, startY)) { return false; } } try { mActivityManager.setFocusedTask(win.getTask().mTaskId); } catch(RemoteException e) {} return true; } private void handleTapOutsideTask(DisplayContent displayContent, int x, int y) { int taskId = -1; synchronized (mWindowMap) { final Task task = displayContent.findTaskForResizePoint(x, y); if (task != null) { if (!startPositioningLocked(task.getTopVisibleAppMainWindow(), true /*resize*/, task.preserveOrientationOnResize(), x, y)) { return; } taskId = task.mTaskId; } else { taskId = displayContent.taskIdFromPoint(x, y); } } if (taskId >= 0) { try { mActivityManager.setFocusedTask(taskId); } catch(RemoteException e) {} } } private boolean startPositioningLocked(WindowState win, boolean resize, boolean preserveOrientation, float startX, float startY) { if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "startPositioningLocked: " + "win=" + win + ", resize=" + resize + ", preserveOrientation=" + preserveOrientation + ", {" + startX + ", " + startY + "}"); if (win == null || win.getAppToken() == null) { Slog.w(TAG_WM, "startPositioningLocked: Bad window " + win); return false; } if (win.mInputChannel == null) { Slog.wtf(TAG_WM, "startPositioningLocked: " + win + " has no input channel, " + " probably being removed"); return false; } final DisplayContent displayContent = win.getDisplayContent(); if (displayContent == null) { Slog.w(TAG_WM, "startPositioningLocked: Invalid display content " + win); return false; } Display display = displayContent.getDisplay(); mTaskPositioner = new TaskPositioner(this); mTaskPositioner.register(displayContent); mInputMonitor.updateInputWindowsLw(true /*force*/); // 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 // of the app, it may not have focus since there might be other windows // on top (eg. a dialog window). WindowState transferFocusFromWin = win; if (mCurrentFocus != null && mCurrentFocus != win && mCurrentFocus.mAppToken == win.mAppToken) { transferFocusFromWin = mCurrentFocus; } if (!mInputManager.transferTouchFocus( transferFocusFromWin.mInputChannel, mTaskPositioner.mServerChannel)) { Slog.e(TAG_WM, "startPositioningLocked: Unable to transfer touch focus"); mTaskPositioner.unregister(); mTaskPositioner = null; mInputMonitor.updateInputWindowsLw(true /*force*/); return false; } mTaskPositioner.startDrag(win, resize, preserveOrientation, startX, startY); return true; } private void finishPositioning() { if (DEBUG_TASK_POSITIONING) { Slog.d(TAG_WM, "finishPositioning"); } synchronized (mWindowMap) { if (mTaskPositioner != null) { mTaskPositioner.unregister(); mTaskPositioner = null; mInputMonitor.updateInputWindowsLw(true /*force*/); } } } // ------------------------------------------------------------- // Input Events and Focus Management // ------------------------------------------------------------- Loading Loading @@ -5005,12 +4906,13 @@ public class WindowManagerService extends IWindowManager.Stub } case TAP_OUTSIDE_TASK: { handleTapOutsideTask((DisplayContent)msg.obj, msg.arg1, msg.arg2); mTaskPositioningController.handleTapOutsideTask( (DisplayContent)msg.obj, msg.arg1, msg.arg2); } break; case FINISH_TASK_POSITIONING: { finishPositioning(); mTaskPositioningController.finishPositioning(); } break; Loading