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

Commit c99c3114 authored by Tiger Huang's avatar Tiger Huang Committed by Android (Google) Code Review
Browse files

Merge "Update the leash position when gaining a new control" into 24D1-dev

parents 7fb67c56 b033de9f
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -312,7 +312,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
    }

    /** Not running an animation. */
    @VisibleForTesting
    @VisibleForTesting(visibility = PACKAGE)
    public static final int ANIMATION_TYPE_NONE = -1;

    /** Running animation will show insets */
@@ -326,7 +326,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
    public static final int ANIMATION_TYPE_USER = 2;

    /** Running animation will resize insets */
    @VisibleForTesting
    @VisibleForTesting(visibility = PACKAGE)
    public static final int ANIMATION_TYPE_RESIZE = 3;

    @Retention(RetentionPolicy.SOURCE)
@@ -1719,7 +1719,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
        mImeSourceConsumer.onWindowFocusLost();
    }

    @VisibleForTesting
    @VisibleForTesting(visibility = PACKAGE)
    public @AnimationType int getAnimationType(@InsetsType int type) {
        for (int i = mRunningAnimations.size() - 1; i >= 0; i--) {
            InsetsAnimationControlRunner control = mRunningAnimations.get(i).runner;
+18 −9
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.view;

import static android.view.InsetsController.ANIMATION_TYPE_NONE;
import static android.view.InsetsController.ANIMATION_TYPE_RESIZE;
import static android.view.InsetsController.AnimationType;
import static android.view.InsetsController.DEBUG;
import static android.view.InsetsSourceConsumerProto.ANIMATION_STATE;
@@ -31,6 +32,7 @@ import static com.android.internal.annotations.VisibleForTesting.Visibility.PACK

import android.annotation.IntDef;
import android.annotation.Nullable;
import android.graphics.Point;
import android.graphics.Rect;
import android.util.Log;
import android.util.proto.ProtoOutputStream;
@@ -179,10 +181,11 @@ public class InsetsSourceConsumer {
                    mController.notifyVisibilityChanged();
                }

                // If we have a new leash, make sure visibility is up-to-date, even though we
                // didn't want to run an animation above.
                if (mController.getAnimationType(mType) == ANIMATION_TYPE_NONE) {
                    applyRequestedVisibilityToControl();
                // If there is no animation controlling the leash, make sure the visibility and the
                // position is up-to-date.
                final int animType = mController.getAnimationType(mType);
                if (animType == ANIMATION_TYPE_NONE || animType == ANIMATION_TYPE_RESIZE) {
                    applyRequestedVisibilityAndPositionToControl();
                }

                // Remove the surface that owned by last control when it lost.
@@ -371,21 +374,27 @@ public class InsetsSourceConsumer {
        if (DEBUG) Log.d(TAG, "updateSource: " + newSource);
    }

    private void applyRequestedVisibilityToControl() {
        if (mSourceControl == null || mSourceControl.getLeash() == null) {
    private void applyRequestedVisibilityAndPositionToControl() {
        if (mSourceControl == null) {
            return;
        }
        final SurfaceControl leash = mSourceControl.getLeash();
        if (leash == null) {
            return;
        }

        final boolean requestedVisible = (mController.getRequestedVisibleTypes() & mType) != 0;
        final Point surfacePosition = mSourceControl.getSurfacePosition();
        try (Transaction t = mTransactionSupplier.get()) {
            if (DEBUG) Log.d(TAG, "applyRequestedVisibilityToControl: " + requestedVisible);
            if (requestedVisible) {
                t.show(mSourceControl.getLeash());
                t.show(leash);
            } else {
                t.hide(mSourceControl.getLeash());
                t.hide(leash);
            }
            // Ensure the alpha value is aligned with the actual requested visibility.
            t.setAlpha(mSourceControl.getLeash(), requestedVisible ? 1 : 0);
            t.setAlpha(leash, requestedVisible ? 1 : 0);
            t.setPosition(leash, surfacePosition.x, surfacePosition.y);
            t.apply();
        }
        onPerceptible(requestedVisible);