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

Commit e7f06e08 authored by Cosmin Băieș's avatar Cosmin Băieș
Browse files

Dimmer cleanup

This adds missing nullability annotations.

Flag: EXEMPT cleanup
Bug: 281029564
Test: presubmit
Change-Id: I5de84421e578e97f6079bc5252682f21ee45ec64
parent c799c3b3
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -40,11 +40,14 @@ class Dimmer {
     * The {@link WindowContainer} that our Dims are bounded to. We may be dimming on behalf of the
     * host, some controller of it, or one of the hosts children.
     */
    @NonNull
    private final WindowContainer<?> mHost;

    private static final String TAG = "WindowManagerDimmer";

    @Nullable
    DimState mDimState;
    @NonNull
    final DimmerAnimationHelper.AnimationAdapterFactory mAnimationAdapterFactory;

    /**
@@ -57,6 +60,7 @@ class Dimmer {
        // The last container to request to dim
        private WindowState mLastDimmingWindow;
        /** Animation */
        @NonNull
        private final DimmerAnimationHelper mAnimationHelper;
        boolean mSkipAnimation = false;
        // Determines whether the dim layer should animate before destroying.
@@ -64,6 +68,7 @@ class Dimmer {
        /** Surface visibility and bounds */
        private boolean mIsVisible = false;
        // TODO(b/64816140): Remove after confirming dimmer layer always matches its container.
        @NonNull
        final Rect mDimBounds = new Rect();

        DimState() {
@@ -165,6 +170,7 @@ class Dimmer {
                    && (mHostContainer.isVisibleRequested() || !Flags.useTasksDimOnly());
        }

        @NonNull
        private SurfaceControl makeDimLayer() {
            return mHost.makeChildSurface(null)
                    .setParent(mHost.getSurfaceControl())
@@ -180,7 +186,7 @@ class Dimmer {
    }

    @VisibleForTesting
    Dimmer(@NonNull WindowContainer host,
    Dimmer(@NonNull WindowContainer<?> host,
            @NonNull DimmerAnimationHelper.AnimationAdapterFactory animationFactory) {
        mHost = host;
        mAnimationAdapterFactory = animationFactory;
@@ -236,7 +242,7 @@ class Dimmer {
     * If multiple containers call this method, only the changes relative to the topmost will be
     * applied.
     *
     * For each call to {@link WindowContainer#prepareSurfaces()} the DimState will be reset, and
     * <p>For each call to {@link WindowContainer#prepareSurfaces()} the DimState will be reset, and
     * the child of the host should call adjustRelativeLayer and {@link Dimmer#adjustAppearance} to
     * continue dimming. Indeed, this method won't be able to keep dimming or get a new DimState
     * without also adjusting the appearance.
@@ -301,11 +307,13 @@ class Dimmer {
    }

    /** Returns non-null bounds if the dimmer is showing. */
    @Nullable
    @VisibleForTesting
    SurfaceControl getDimLayer() {
        return mDimState != null ? mDimState.mDimSurface : null;
    }

    @Nullable
    Rect getDimBounds() {
        return mDimState != null ? mDimState.mDimBounds : null;
    }
+28 −14
Original line number Diff line number Diff line
@@ -51,7 +51,9 @@ public class DimmerAnimationHelper {
    static class Change {
        private float mAlpha = -1f;
        private int mBlurRadius = -1;
        @Nullable
        private WindowState mDimmingContainer = null;
        @Nullable
        private WindowContainer<?> mGeometryParent = null;
        private static final float EPSILON = 0.0001f;

@@ -91,15 +93,22 @@ public class DimmerAnimationHelper {
        }
    }

    @NonNull
    private final Change mCurrentProperties = new Change();
    @NonNull
    private final Change mRequestedProperties = new Change();
    @Nullable
    private AnimationSpec mAlphaAnimationSpec;

    @NonNull
    private final SurfaceAnimationRunner mSurfaceAnimationRunner;
    @NonNull
    private final AnimationAdapterFactory mAnimationAdapterFactory;
    @Nullable
    private AnimationAdapter mLocalAnimationAdapter;

    DimmerAnimationHelper(WindowContainer<?> host, AnimationAdapterFactory animationFactory) {
    DimmerAnimationHelper(@NonNull WindowContainer<?> host,
            @NonNull AnimationAdapterFactory animationFactory) {
        mAnimationAdapterFactory = animationFactory;
        mSurfaceAnimationRunner = host.mWmService.mSurfaceAnimationRunner;
    }
@@ -130,7 +139,8 @@ public class DimmerAnimationHelper {
    /**
     * Commit the last changes we received. Called after
     * {@link Change#setExitParameters()},
     * {@link Change#setRequestedRelativeParent(WindowContainer)}, or
     * {@link Change#setRequestedRelativeParent(WindowState)}, or
     * {@link Change#setRequestedGeometryParent(WindowContainer)}, or
     * {@link Change#setRequestedAppearance(float, int)}
     */
    void applyChanges(@NonNull SurfaceControl.Transaction t, @NonNull Dimmer.DimState dim) {
@@ -227,7 +237,8 @@ public class DimmerAnimationHelper {
    }

    @NonNull
    private static AnimationSpec getRequestedAnimationSpec(Change from, Change to) {
    private static AnimationSpec getRequestedAnimationSpec(@NonNull Change from,
            @NonNull Change to) {
        final float startAlpha = Math.max(from.mAlpha, 0f);
        final int startBlur = Math.max(from.mBlurRadius, 0);
        long duration = (long) (getDimDuration(to.mDimmingContainer)
@@ -331,15 +342,17 @@ public class DimmerAnimationHelper {
        }

        private final long mDuration;
        @NonNull
        private final AnimationSpec.AnimationExtremes<Float> mAlpha;
        @NonNull
        private final AnimationSpec.AnimationExtremes<Integer> mBlur;

        float mCurrentAlpha = 0;
        int mCurrentBlur = 0;
        boolean mStarted = false;

        AnimationSpec(AnimationSpec.AnimationExtremes<Float> alpha,
                      AnimationSpec.AnimationExtremes<Integer> blur, long duration) {
        AnimationSpec(@NonNull AnimationSpec.AnimationExtremes<Float> alpha,
                @NonNull AnimationSpec.AnimationExtremes<Integer> blur, long duration) {
            mAlpha = alpha;
            mBlur = blur;
            mDuration = duration;
@@ -379,7 +392,7 @@ public class DimmerAnimationHelper {
        }

        @Override
        public void dump(PrintWriter pw, String prefix) {
        public void dump(@NonNull PrintWriter pw, @NonNull String prefix) {
            pw.print(prefix); pw.print("from_alpha="); pw.print(mAlpha.mStartValue);
            pw.print(" to_alpha="); pw.print(mAlpha.mFinishValue);
            pw.print(prefix); pw.print("from_blur="); pw.print(mBlur.mStartValue);
@@ -388,7 +401,7 @@ public class DimmerAnimationHelper {
        }

        @Override
        public void dumpDebugInner(ProtoOutputStream proto) {
        public void dumpDebugInner(@NonNull ProtoOutputStream proto) {
            final long token = proto.start(ALPHA);
            proto.write(FROM, mAlpha.mStartValue);
            proto.write(TO, mAlpha.mFinishValue);
@@ -398,8 +411,9 @@ public class DimmerAnimationHelper {
    }

    static class AnimationAdapterFactory {
        public AnimationAdapter get(LocalAnimationAdapter.AnimationSpec alphaAnimationSpec,
                                    SurfaceAnimationRunner runner) {
        @NonNull
        public AnimationAdapter get(@NonNull LocalAnimationAdapter.AnimationSpec alphaAnimationSpec,
                @NonNull SurfaceAnimationRunner runner) {
            return new LocalAnimationAdapter(alphaAnimationSpec, runner);
        }
    }
+14 −4
Original line number Diff line number Diff line
@@ -39,6 +39,9 @@ import android.platform.test.annotations.RequiresFlagsEnabled;
import android.view.SurfaceControl;
import android.view.SurfaceSession;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.server.testutils.StubTransaction;
import com.android.server.wm.utils.MockAnimationAdapter;
import com.android.window.flags.Flags;
@@ -66,11 +69,12 @@ public class DimmerTests extends WindowTestsBase {
            mVisibleRequested = true;
        }

        class MockSurfaceBuilder extends SurfaceControl.Builder {
        static class MockSurfaceBuilder extends SurfaceControl.Builder {
            MockSurfaceBuilder(SurfaceSession ss) {
                super(ss);
            }

            @NonNull
            @Override
            public SurfaceControl build() {
                SurfaceControl mSc = mock(SurfaceControl.class);
@@ -79,26 +83,31 @@ public class DimmerTests extends WindowTestsBase {
            }
        }

        @NonNull
        @Override
        SurfaceControl.Builder makeChildSurface(WindowContainer child) {
        SurfaceControl.Builder makeChildSurface(@Nullable WindowContainer child) {
            return new MockSurfaceBuilder(mSession);
        }

        @Nullable
        @Override
        public SurfaceControl getSurfaceControl() {
            return mHostControl;
        }

        @NonNull
        @Override
        public SurfaceControl.Transaction getSyncTransaction() {
            return mHostTransaction;
        }

        @NonNull
        @Override
        public SurfaceControl.Transaction getPendingTransaction() {
            return mHostTransaction;
        }

        @NonNull
        @Override
        public Rect getBounds() {
            return mBounds;
@@ -106,9 +115,10 @@ public class DimmerTests extends WindowTestsBase {
    }

    static class MockAnimationAdapterFactory extends DimmerAnimationHelper.AnimationAdapterFactory {
        @NonNull
        @Override
        public AnimationAdapter get(LocalAnimationAdapter.AnimationSpec alphaAnimationSpec,
                SurfaceAnimationRunner runner) {
        public AnimationAdapter get(@NonNull LocalAnimationAdapter.AnimationSpec alphaAnimationSpec,
                @NonNull SurfaceAnimationRunner runner) {
            return sTestAnimation;
        }
    }
+5 −4
Original line number Diff line number Diff line
@@ -37,8 +37,9 @@ public class MockAnimationAdapter implements AnimationAdapter {
    }

    @Override
    public void startAnimation(SurfaceControl animationLeash, SurfaceControl.Transaction t,
            int type, @NonNull SurfaceAnimator.OnAnimationFinishedCallback finishCallback) {
    public void startAnimation(@NonNull SurfaceControl animationLeash,
            @NonNull SurfaceControl.Transaction t, int type,
            @NonNull SurfaceAnimator.OnAnimationFinishedCallback finishCallback) {
        // As the animation won't run, finish it immediately
        finishCallback.onAnimationFinished(0, null);
    }
@@ -57,8 +58,8 @@ public class MockAnimationAdapter implements AnimationAdapter {
    }

    @Override
    public void dump(PrintWriter pw, String prefix) {}
    public void dump(@NonNull PrintWriter pw, @NonNull String prefix) {}

    @Override
    public void dumpDebug(ProtoOutputStream proto) {}
    public void dumpDebug(@NonNull ProtoOutputStream proto) {}
}