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

Commit 96155ff2 authored by Mateusz Cicheński's avatar Mateusz Cicheński
Browse files

Persist the launcher keep clear area.

This prevents the area from being lost due to other regions reporting
their respective keep clear areas. With shell transitions enabled
there is a possibility that the keep clear areas change between
onTaskAppearead and PipTransition#startAnimation callbacks, which would
cause the PiP to enter in the bottom right corner and then move above
Hotseat, instead of going directly to the correct position.

Test: e.g. atest ExpandPipOnDoubleClickTest
Test: the above test would fail otherwise, as the tapping happens at
the old position of PiP, not the one adjusted due to keep clear areas
Bug: 260779127
Bug: 271493738

Change-Id: I5537ce8c9b2395017eeb9e112f44994433733fe9
parent 7b9b280f
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -103,7 +103,6 @@ import com.android.wm.shell.sysui.UserChangeListener;
import com.android.wm.shell.transition.Transitions;

import java.io.PrintWriter;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@@ -118,6 +117,8 @@ public class PipController implements PipTransitionController.PipTransitionCallb
        UserChangeListener {
    private static final String TAG = "PipController";

    private static final String LAUNCHER_KEEP_CLEAR_AREA_TAG = "hotseat";

    private static final long PIP_KEEP_CLEAR_AREAS_DELAY =
            SystemProperties.getLong("persist.wm.debug.pip_keep_clear_areas_delay", 200);

@@ -929,12 +930,10 @@ public class PipController implements PipTransitionController.PipTransitionCallb
                    0, mPipBoundsState.getDisplayBounds().bottom - height,
                    mPipBoundsState.getDisplayBounds().right,
                    mPipBoundsState.getDisplayBounds().bottom);
            Set<Rect> restrictedKeepClearAreas = new HashSet<>(
                    mPipBoundsState.getRestrictedKeepClearAreas());
            restrictedKeepClearAreas.add(rect);
            mPipBoundsState.setKeepClearAreas(restrictedKeepClearAreas,
                    mPipBoundsState.getUnrestrictedKeepClearAreas());
            mPipBoundsState.addNamedUnrestrictedKeepClearArea(LAUNCHER_KEEP_CLEAR_AREA_TAG, rect);
            updatePipPositionForKeepClearAreas();
        } else {
            mPipBoundsState.removeNamedUnrestrictedKeepClearArea(LAUNCHER_KEEP_CLEAR_AREA_TAG);
        }
    }