diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/RootWindowContainer.java | 56 |
2 files changed, 45 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index f0a375bf29f4..ccccce4d7bb6 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2125,8 +2125,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo pw.print("x"); pw.print(mDisplayInfo.smallestNominalAppHeight); pw.print("-"); pw.print(mDisplayInfo.largestNominalAppWidth); pw.print("x"); pw.println(mDisplayInfo.largestNominalAppHeight); - pw.println(subPrefix + "deferred=" + mDeferredRemoval + pw.print(subPrefix + "deferred=" + mDeferredRemoval + " mLayoutNeeded=" + mLayoutNeeded); + pw.println(" mTouchExcludeRegion=" + mTouchExcludeRegion); pw.println(); pw.println(prefix + "Application tokens in top down Z order:"); diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 7bcad9fd852f..a9e56f34b0d6 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -32,6 +32,7 @@ import android.os.RemoteException; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; +import android.util.ArraySet; import android.util.EventLog; import android.util.Slog; import android.util.SparseIntArray; @@ -663,19 +664,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { defaultDisplay.pendingLayoutChanges); } - for (i = mService.mResizingWindows.size() - 1; i >= 0; i--) { - WindowState win = mService.mResizingWindows.get(i); - if (win.mAppFreezing) { - // Don't remove this window until rotation has completed. - continue; - } - // Discard the saved surface if window size is changed, it can't be reused. - if (win.mAppToken != null) { - win.mAppToken.destroySavedSurfaces(); - } - win.reportResized(); - mService.mResizingWindows.remove(i); - } + final ArraySet<DisplayContent> touchExcludeRegionUpdateDisplays = handleResizingWindows(); if (DEBUG_ORIENTATION && mService.mDisplayFrozen) Slog.v(TAG, "With display frozen, orientationChangeComplete=" + mOrientationChangeComplete); @@ -817,6 +806,16 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { mService.mInputMonitor.updateInputWindowsLw(false /*force*/); } mService.setFocusTaskRegionLocked(null); + if (touchExcludeRegionUpdateDisplays != null) { + final DisplayContent focusedDc = mService.mFocusedApp != null + ? mService.mFocusedApp.getDisplayContent() : null; + for (DisplayContent dc : touchExcludeRegionUpdateDisplays) { + // The focused DisplayContent was recalcuated in setFocusTaskRegionLocked + if (focusedDc != dc) { + dc.setTouchExcludeRegion(null /* focusedTask */); + } + } + } // Check to see if we are now in a state where the screen should // be enabled, because the window obscured flags have changed. @@ -868,6 +867,37 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { } /** + * Handles resizing windows during surface placement. + * + * @return A set of any DisplayContent whose touch exclude region needs to be recalculated due + * to a tap-exclude window resizing, or null if no such DisplayContents were found. + */ + private ArraySet<DisplayContent> handleResizingWindows() { + ArraySet<DisplayContent> touchExcludeRegionUpdateSet = null; + for (int i = mService.mResizingWindows.size() - 1; i >= 0; i--) { + WindowState win = mService.mResizingWindows.get(i); + if (win.mAppFreezing) { + // Don't remove this window until rotation has completed. + continue; + } + // Discard the saved surface if window size is changed, it can't be reused. + if (win.mAppToken != null) { + win.mAppToken.destroySavedSurfaces(); + } + win.reportResized(); + mService.mResizingWindows.remove(i); + if (WindowManagerService.excludeWindowTypeFromTapOutTask(win.mAttrs.type)) { + final DisplayContent dc = win.getDisplayContent(); + if (touchExcludeRegionUpdateSet == null) { + touchExcludeRegionUpdateSet = new ArraySet<>(); + } + touchExcludeRegionUpdateSet.add(dc); + } + } + return touchExcludeRegionUpdateSet; + } + + /** * @param w WindowState this method is applied to. * @param obscured True if there is a window on top of this obscuring the display. * @param syswin System window? |