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

Commit 66a576b4 authored by Louis Chang's avatar Louis Chang
Browse files

[RESTRICT AUTOMERGE] Dimming on an embedded TaskFragment vs. parent Task

Migrate the dimmer to TaskFragment and the dim surface
needs to be offset relative to its parent task.

Bug: 202379687
Test: verify dim in two pane
Change-Id: I95fe47ebc66d419b42c1da8cc8216773c295f1d1
(cherry picked from commit 9b588133)
parent dc955c5a
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -486,7 +486,6 @@ class Task extends TaskFragment {
    // root task moves and we in fact do so when moving from full screen to pinned.
    private boolean mPreserveNonFloatingState = false;

    private Dimmer mDimmer = new Dimmer(this);
    private final Rect mTmpDimBoundsRect = new Rect();

    /** @see #setCanAffectSystemUiFlags */
+30 −0
Original line number Diff line number Diff line
@@ -162,6 +162,8 @@ class TaskFragment extends WindowContainer<WindowContainer> {
     */
    int mMinHeight;

    Dimmer mDimmer = new Dimmer(this);

    /** This task fragment will be removed when the cleanup of its children are done. */
    private boolean mIsRemovalRequested;

@@ -2352,6 +2354,34 @@ class TaskFragment extends WindowContainer<WindowContainer> {
        sendTaskFragmentVanished();
    }

    @Override
    Dimmer getDimmer() {
        // If the window is in an embedded TaskFragment, we want to dim at the TaskFragment.
        if (asTask() == null) {
            return mDimmer;
        }

        return super.getDimmer();
    }

    @Override
    void prepareSurfaces() {
        if (asTask() != null) {
            super.prepareSurfaces();
            return;
        }

        mDimmer.resetDimStates();
        super.prepareSurfaces();

        // Bounds need to be relative, as the dim layer is a child.
        final Rect dimBounds = getBounds();
        dimBounds.offsetTo(0 /* newLeft */, 0 /* newTop */);
        if (mDimmer.updateDims(getPendingTransaction(), dimBounds)) {
            scheduleAnimation();
        }
    }

    @Override
    boolean canBeAnimationTarget() {
        return true;