Loading services/core/java/com/android/server/wm/DisplayContent.java +16 −16 Original line number Diff line number Diff line Loading @@ -506,8 +506,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp private final Rect mSystemGestureFrameLeft = new Rect(); private final Rect mSystemGestureFrameRight = new Rect(); private Set<Rect> mRestrictedKeepClearAreas = new ArraySet<>(); private Set<Rect> mUnrestrictedKeepClearAreas = new ArraySet<>(); @VisibleForTesting Set<Rect> mRestrictedKeepClearAreas = new ArraySet<>(); @VisibleForTesting Set<Rect> mUnrestrictedKeepClearAreas = new ArraySet<>(); /** * For default display it contains real metrics, empty for others. Loading Loading @@ -3702,7 +3704,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mInsetsStateController.dumpDebug(proto, logLevel); } proto.write(IME_POLICY, getImePolicy()); for (Rect r : getKeepClearAreas()) { for (Rect r : mRestrictedKeepClearAreas) { r.dumpDebug(proto, KEEP_CLEAR_AREAS); } for (Rect r : mUnrestrictedKeepClearAreas) { r.dumpDebug(proto, KEEP_CLEAR_AREAS); } proto.end(token); Loading Loading @@ -3784,11 +3789,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp pw.println(mSystemGestureExclusion); } final Set<Rect> keepClearAreas = getKeepClearAreas(); if (!keepClearAreas.isEmpty()) { if (!mRestrictedKeepClearAreas.isEmpty()) { pw.println(); pw.print(" restrictedKeepClearAreas="); pw.println(mRestrictedKeepClearAreas); } if (!mUnrestrictedKeepClearAreas.isEmpty()) { pw.println(); pw.print(" keepClearAreas="); pw.println(keepClearAreas); pw.print(" unrestrictedKeepClearAreas="); pw.println(mUnrestrictedKeepClearAreas); } pw.println(); Loading Loading @@ -6130,15 +6139,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp }, true); } /** * Returns all keep-clear areas from visible, relevant windows on this display. */ Set<Rect> getKeepClearAreas() { final Set<Rect> keepClearAreas = new ArraySet<>(); getKeepClearAreas(keepClearAreas, keepClearAreas); return keepClearAreas; } protected MetricsLogger getMetricsLogger() { if (mMetricsLogger == null) { mMetricsLogger = new MetricsLogger(); Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +6 −3 Original line number Diff line number Diff line Loading @@ -2743,19 +2743,22 @@ public class DisplayContentTests extends WindowTestsBase { final var keyguardWin = newWindowBuilder("keyguardWin", TYPE_NOTIFICATION_SHADE).build(); final Rect rect2 = new Rect(10, 10, 20, 20); keyguardWin.setKeepClearAreas(List.of(rect2), Collections.emptyList()); mDisplayContent.updateKeepClearAreas(); // No keep clear areas on display, because the windows are not visible assertEquals(Collections.emptySet(), mDisplayContent.getKeepClearAreas()); assertEquals(Collections.emptySet(), mDisplayContent.mRestrictedKeepClearAreas); makeWindowVisible(navBarWin); mDisplayContent.updateKeepClearAreas(); // The returned keep-clear areas contain the areas just from the visible window assertEquals(Set.of(rect1), mDisplayContent.getKeepClearAreas()); assertEquals(Set.of(rect1), mDisplayContent.mRestrictedKeepClearAreas); makeWindowVisible(navBarWin, keyguardWin); mDisplayContent.updateKeepClearAreas(); // The returned keep-clear areas contain the areas from all visible windows assertEquals(Set.of(rect1, rect2), mDisplayContent.getKeepClearAreas()); assertEquals(Set.of(rect1, rect2), mDisplayContent.mRestrictedKeepClearAreas); } @Test Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +16 −16 Original line number Diff line number Diff line Loading @@ -506,8 +506,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp private final Rect mSystemGestureFrameLeft = new Rect(); private final Rect mSystemGestureFrameRight = new Rect(); private Set<Rect> mRestrictedKeepClearAreas = new ArraySet<>(); private Set<Rect> mUnrestrictedKeepClearAreas = new ArraySet<>(); @VisibleForTesting Set<Rect> mRestrictedKeepClearAreas = new ArraySet<>(); @VisibleForTesting Set<Rect> mUnrestrictedKeepClearAreas = new ArraySet<>(); /** * For default display it contains real metrics, empty for others. Loading Loading @@ -3702,7 +3704,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mInsetsStateController.dumpDebug(proto, logLevel); } proto.write(IME_POLICY, getImePolicy()); for (Rect r : getKeepClearAreas()) { for (Rect r : mRestrictedKeepClearAreas) { r.dumpDebug(proto, KEEP_CLEAR_AREAS); } for (Rect r : mUnrestrictedKeepClearAreas) { r.dumpDebug(proto, KEEP_CLEAR_AREAS); } proto.end(token); Loading Loading @@ -3784,11 +3789,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp pw.println(mSystemGestureExclusion); } final Set<Rect> keepClearAreas = getKeepClearAreas(); if (!keepClearAreas.isEmpty()) { if (!mRestrictedKeepClearAreas.isEmpty()) { pw.println(); pw.print(" restrictedKeepClearAreas="); pw.println(mRestrictedKeepClearAreas); } if (!mUnrestrictedKeepClearAreas.isEmpty()) { pw.println(); pw.print(" keepClearAreas="); pw.println(keepClearAreas); pw.print(" unrestrictedKeepClearAreas="); pw.println(mUnrestrictedKeepClearAreas); } pw.println(); Loading Loading @@ -6130,15 +6139,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp }, true); } /** * Returns all keep-clear areas from visible, relevant windows on this display. */ Set<Rect> getKeepClearAreas() { final Set<Rect> keepClearAreas = new ArraySet<>(); getKeepClearAreas(keepClearAreas, keepClearAreas); return keepClearAreas; } protected MetricsLogger getMetricsLogger() { if (mMetricsLogger == null) { mMetricsLogger = new MetricsLogger(); Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +6 −3 Original line number Diff line number Diff line Loading @@ -2743,19 +2743,22 @@ public class DisplayContentTests extends WindowTestsBase { final var keyguardWin = newWindowBuilder("keyguardWin", TYPE_NOTIFICATION_SHADE).build(); final Rect rect2 = new Rect(10, 10, 20, 20); keyguardWin.setKeepClearAreas(List.of(rect2), Collections.emptyList()); mDisplayContent.updateKeepClearAreas(); // No keep clear areas on display, because the windows are not visible assertEquals(Collections.emptySet(), mDisplayContent.getKeepClearAreas()); assertEquals(Collections.emptySet(), mDisplayContent.mRestrictedKeepClearAreas); makeWindowVisible(navBarWin); mDisplayContent.updateKeepClearAreas(); // The returned keep-clear areas contain the areas just from the visible window assertEquals(Set.of(rect1), mDisplayContent.getKeepClearAreas()); assertEquals(Set.of(rect1), mDisplayContent.mRestrictedKeepClearAreas); makeWindowVisible(navBarWin, keyguardWin); mDisplayContent.updateKeepClearAreas(); // The returned keep-clear areas contain the areas from all visible windows assertEquals(Set.of(rect1, rect2), mDisplayContent.getKeepClearAreas()); assertEquals(Set.of(rect1, rect2), mDisplayContent.mRestrictedKeepClearAreas); } @Test Loading