diff options
| author | 2017-08-31 00:05:22 +0000 | |
|---|---|---|
| committer | 2017-08-31 00:05:22 +0000 | |
| commit | 48945246bb088ee6158128d3bbaeb4e17d7675fd (patch) | |
| tree | 62fa3fd7d41490f63e6d1bbf4bde4129652ba416 | |
| parent | 8a9866298df00cc1f5c1f6e3a9957c296c54c75d (diff) | |
| parent | f833ba9141ed71f905f075173e6b8dcf8c1e523f (diff) | |
Merge "Update DisplayContent tap exclude region on window resize"
| -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 | 48 |
2 files changed, 41 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index bd4aa97f528e..d74e48253132 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2173,8 +2173,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 b364fb9c7b45..54dd19961999 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -31,6 +31,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; @@ -664,15 +665,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; - } - win.reportResized(); - mService.mResizingWindows.remove(i); - } + final ArraySet<DisplayContent> touchExcludeRegionUpdateDisplays = handleResizingWindows(); if (DEBUG_ORIENTATION && mService.mDisplayFrozen) Slog.v(TAG, "With display frozen, orientationChangeComplete=" + mOrientationChangeComplete); @@ -814,6 +807,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. @@ -865,6 +868,33 @@ 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; + } + 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? |