Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 115b979f authored by Robin Lee's avatar Robin Lee
Browse files

Dump KeepClearAreas from existing data structure

There is no need to regenerate the list of applicable keep-clear-areas
from first principles, because we already save the result from the last
relevant window setup and can just read it off directly for the dump.

Flag: EXEMPT bugfix
Test: atest DisplayContentTests
Bug: 424195937
Change-Id: Ic57dd247e332e85a53c22ec88984ac2d3db7c402
parent 6fa85799
Loading
Loading
Loading
Loading
+16 −16
Original line number Diff line number Diff line
@@ -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.
@@ -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);
@@ -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();
@@ -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();
+6 −3
Original line number Diff line number Diff line
@@ -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