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

Commit 0d323f1d authored by Marzia Favaro's avatar Marzia Favaro
Browse files

Refactor dimmer getter

To avoid code duplication in next cls

Test: Manual, verify correctness of dimming on closing activities with
dim
Bug: 327332488
Flag: com.android.window.flags.use_tasks_dim_only

Change-Id: I9d816c213d0cf7a7adc32ebbbf843e35ea734d47
parent d6f61590
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -3192,13 +3192,6 @@ class Task extends TaskFragment {
        return "Task=" + mTaskId;
    }

    WindowContainer<?> getDimmerParent() {
        if (!inMultiWindowMode() && isTranslucentForTransition()) {
            return getRootDisplayArea();
        }
        return this;
    }

    @Deprecated
    @Override
    Dimmer getDimmer() {
@@ -3222,6 +3215,13 @@ class Task extends TaskFragment {
        return mDimmer;
    }

    boolean isSuitableForDimming() {
        // If the window is in multi-window mode, we want to dim at the Task level to ensure the dim
        // bounds match the area the app lives in.
        // If translucent, we will move the dim to the display area
        return inMultiWindowMode() || !isTranslucentAndVisible();
    }

    @Override
    void prepareSurfaces() {
        mDimmer.resetDimStates();
+2 −6
Original line number Diff line number Diff line
@@ -484,12 +484,8 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
    boolean canApplyDim(@NonNull Task task) {
        if (mTransientLaunches == null) return true;
        if (Flags.useTasksDimOnly()) {
            WindowContainer<?> dimmerParent = task.getDimmerParent();
            if (dimmerParent == null) {
                return false;
            }
            // Always allow to dim if the host only affects its task.
            if (dimmerParent.asTask() == task) {
            if (task.isSuitableForDimming()) {
                // Always allow to dim if the dimming occurs at task level (dim parented to task)
                return true;
            }
        } else {
+22 −8
Original line number Diff line number Diff line
@@ -5196,14 +5196,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
            Dimmer dimmer;
            WindowContainer<?> geometryParent = task;
            if (Flags.useTasksDimOnly()) {
                if (task != null) {
                    geometryParent = task.getDimmerParent();
                    dimmer = task.mDimmer;
                } else {
                    RootDisplayArea displayArea = getRootDisplayArea();
                    geometryParent = displayArea;
                    dimmer = displayArea != null ? displayArea.getDimmer() : null;
                }
                geometryParent = getDimParent();
                dimmer = getDimController();
                if (dimmer == null) {
                    ProtoLog.e(WM_DEBUG_DIMMER, "WindowState %s does not have task or"
                            + " display area for dimming", this);
@@ -5221,6 +5215,26 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        }
    }

    private Dimmer getDimController() {
        Task task = getTask();
        if (task != null) {
            return task.mDimmer;
        }
        RootDisplayArea displayArea = getRootDisplayArea();
        if (displayArea != null) {
            return displayArea.getDimmer();
        }
        return null;
    }

    private WindowContainer<?> getDimParent() {
        Task task = getTask();
        if (task != null && task.isSuitableForDimming()) {
            return task;
        }
        return getRootDisplayArea();
    }

    private boolean shouldDrawBlurBehind() {
        return (mAttrs.flags & FLAG_BLUR_BEHIND) != 0
            && mWmService.mBlurController.getBlurEnabled();
+2 −2
Original line number Diff line number Diff line
@@ -1590,10 +1590,10 @@ public class TransitionTests extends WindowTestsBase {
        });
        assertTrue(activity1.isVisible());
        doReturn(false).when(task1).isTranslucent(null);
        doReturn(false).when(task1).isTranslucentForTransition();
        doReturn(false).when(task1).isTranslucentAndVisible();
        assertTrue(controller.canApplyDim(task1));
        doReturn(true).when(task1).isTranslucent(null);
        doReturn(true).when(task1).isTranslucentForTransition();
        doReturn(true).when(task1).isTranslucentAndVisible();
        assertFalse(controller.canApplyDim(task1));

        controller.finishTransition(ActionChain.testFinish(closeTransition));