diff options
Diffstat (limited to 'services/java/com/android/server/wm')
4 files changed, 27 insertions, 18 deletions
diff --git a/services/java/com/android/server/wm/DisplayContent.java b/services/java/com/android/server/wm/DisplayContent.java index 6e5bbcb..1e1b097 100644 --- a/services/java/com/android/server/wm/DisplayContent.java +++ b/services/java/com/android/server/wm/DisplayContent.java @@ -62,6 +62,9 @@ class DisplayContent { final DisplayInfo mDisplayInfo = new DisplayInfo(); final Display mDisplay; + // Accessed directly by all users. + boolean layoutNeeded; + DisplayContent(Display display) { mDisplay = display; mDisplayId = display.getDisplayId(); @@ -106,6 +109,7 @@ class DisplayContent { pw.print("x"); pw.print(mDisplayInfo.smallestNominalAppHeight); pw.print("-"); pw.print(mDisplayInfo.largestNominalAppWidth); pw.print("x"); pw.println(mDisplayInfo.largestNominalAppHeight); + pw.print("layoutNeeded="); pw.println(layoutNeeded); pw.println(); } } diff --git a/services/java/com/android/server/wm/DragState.java b/services/java/com/android/server/wm/DragState.java index 3fcf680..dc52fcf 100644 --- a/services/java/com/android/server/wm/DragState.java +++ b/services/java/com/android/server/wm/DragState.java @@ -23,13 +23,14 @@ import com.android.server.wm.WindowManagerService.H; import android.content.ClipData; import android.content.ClipDescription; +import android.graphics.Point; import android.graphics.Region; import android.os.IBinder; import android.os.Message; import android.os.Process; import android.os.RemoteException; import android.util.Slog; -import android.view.DisplayInfo; +import android.view.Display; import android.view.DragEvent; import android.view.InputChannel; import android.view.Surface; @@ -59,7 +60,7 @@ class DragState { WindowState mTargetWindow; ArrayList<WindowState> mNotifiedWindows; boolean mDragInProgress; - DisplayContent mDisplayContent; + Display mDisplay; private final Region mTmpRegion = new Region(); @@ -87,10 +88,10 @@ class DragState { } /** - * @param displayContent The display parameters associated with the window being dragged. + * @param display The Display that the window being dragged is on. */ - void register(DisplayContent displayContent) { - mDisplayContent = displayContent; + void register(Display display) { + mDisplay = display; if (WindowManagerService.DEBUG_DRAG) Slog.d(WindowManagerService.TAG, "registering drag input channel"); if (mClientChannel != null) { Slog.e(WindowManagerService.TAG, "Duplicate register of drag input channel"); @@ -108,7 +109,7 @@ class DragState { WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; mDragWindowHandle = new InputWindowHandle(mDragApplicationHandle, null, - mDisplayContent.getDisplayId()); + mDisplay.getDisplayId()); mDragWindowHandle.name = "drag"; mDragWindowHandle.inputChannel = mServerChannel; mDragWindowHandle.layer = getDragLayerLw(); @@ -132,9 +133,10 @@ class DragState { // The drag window covers the entire display mDragWindowHandle.frameLeft = 0; mDragWindowHandle.frameTop = 0; - DisplayInfo displayInfo = mDisplayContent.getDisplayInfo(); - mDragWindowHandle.frameRight = displayInfo.logicalWidth; - mDragWindowHandle.frameBottom = displayInfo.logicalHeight; + Point p = new Point(); + mDisplay.getRealSize(p); + mDragWindowHandle.frameRight = p.x; + mDragWindowHandle.frameBottom = p.y; // Pause rotations before a drag. if (WindowManagerService.DEBUG_ORIENTATION) { @@ -187,7 +189,7 @@ class DragState { Slog.d(WindowManagerService.TAG, "broadcasting DRAG_STARTED at (" + touchX + ", " + touchY + ")"); } - final WindowList windows = mDisplayContent.getWindowList(); + final WindowList windows = mService.getWindowList(mDisplay); final int N = windows.size(); for (int i = 0; i < N; i++) { sendDragStartedLw(windows.get(i), touchX, touchY, mDataDescription); @@ -390,7 +392,7 @@ class DragState { final int x = (int) xf; final int y = (int) yf; - final WindowList windows = mDisplayContent.getWindowList(); + final WindowList windows = mService.getWindowList(mDisplay); final int N = windows.size(); for (int i = N - 1; i >= 0; i--) { WindowState child = windows.get(i); diff --git a/services/java/com/android/server/wm/Session.java b/services/java/com/android/server/wm/Session.java index 1ffbecc..4038b70 100644 --- a/services/java/com/android/server/wm/Session.java +++ b/services/java/com/android/server/wm/Session.java @@ -280,7 +280,7 @@ final class Session extends IWindowSession.Stub // !!! FIXME: put all this heavy stuff onto the mH looper, as well as // the actual drag event dispatch stuff in the dragstate - mService.mDragState.register(callingWin.mDisplayContent); + mService.mDragState.register(callingWin.mDisplayContent.getDisplay()); mService.mInputMonitor.updateInputWindowsLw(true /*force*/); if (!mService.mInputManager.transferTouchFocus(callingWin.mInputChannel, mService.mDragState.mServerChannel)) { diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index acade04..b7eeb69 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -8301,7 +8301,7 @@ public class WindowManagerService extends IWindowManager.Stub // This has changed the visibility of windows, so perform // a new layout to get them all up-to-date. - changes |= PhoneWindowManager.FINISH_LAYOUT_REDO_LAYOUT + changes |= WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT | WindowManagerPolicy.FINISH_LAYOUT_REDO_CONFIG; mLayoutNeeded = true; @@ -8627,15 +8627,15 @@ public class WindowManagerService extends IWindowManager.Stub mPendingLayoutChanges = 0; if (DEBUG_LAYOUT_REPEATS) debugLayoutRepeats("loop number " + mLayoutRepeatCount, mPendingLayoutChanges); - mPolicy.beginAnimationLw(dw, dh); + mPolicy.beginPostLayoutPolicyLw(dw, dh); for (i = windows.size() - 1; i >= 0; i--) { WindowState w = windows.get(i); if (w.mHasSurface) { - mPolicy.animatingWindowLw(w, w.mAttrs); + mPolicy.applyPostLayoutPolicyLw(w, w.mAttrs); } } - mPendingLayoutChanges |= mPolicy.finishAnimationLw(); - if (DEBUG_LAYOUT_REPEATS) debugLayoutRepeats("after finishAnimationLw", + mPendingLayoutChanges |= mPolicy.finishPostLayoutPolicyLw(); + if (DEBUG_LAYOUT_REPEATS) debugLayoutRepeats("after finishPostLayoutPolicyLw", mPendingLayoutChanges); } while (mPendingLayoutChanges != 0); @@ -9348,7 +9348,7 @@ public class WindowManagerService extends IWindowManager.Stub } } - if ((focusChanged&WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT) != 0) { + if ((focusChanged & WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT) != 0) { // The change in focus caused us to need to do a layout. Okay. mLayoutNeeded = true; if (mode == UPDATE_FOCUS_PLACING_SURFACES) { @@ -10393,4 +10393,7 @@ public class WindowManagerService extends IWindowManager.Stub return getDefaultDisplayContent().getDisplayInfo(); } + public WindowList getWindowList(final Display display) { + return getDisplayContent(display.getDisplayId()).getWindowList(); + } } |