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

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

Merge "Update the surface position of each control in insets animation" into sc-dev

parents 2c52d52f fa6f7342
Loading
Loading
Loading
Loading
+14 −0
Original line number Original line Diff line number Diff line
@@ -44,6 +44,7 @@ import android.annotation.Nullable;
import android.content.res.CompatibilityInfo;
import android.content.res.CompatibilityInfo;
import android.graphics.Insets;
import android.graphics.Insets;
import android.graphics.Matrix;
import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Rect;
import android.util.ArraySet;
import android.util.ArraySet;
import android.util.Log;
import android.util.Log;
@@ -203,6 +204,19 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll
        mControllingTypes &= ~types;
        mControllingTypes &= ~types;
    }
    }


    @Override
    public void updateSurfacePosition(SparseArray<InsetsSourceControl> controls) {
        for (int i = controls.size() - 1; i >= 0; i--) {
            final InsetsSourceControl control = controls.valueAt(i);
            final InsetsSourceControl c = mControls.get(control.getType());
            if (c == null) {
                continue;
            }
            final Point position = control.getSurfacePosition();
            c.setSurfacePosition(position.x, position.y);
        }
    }

    @Override
    @Override
    public @AnimationType int getAnimationType() {
    public @AnimationType int getAnimationType() {
        return mAnimationType;
        return mAnimationType;
+8 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


package android.view;
package android.view;


import android.util.SparseArray;
import android.util.proto.ProtoOutputStream;
import android.util.proto.ProtoOutputStream;
import android.view.InsetsController.AnimationType;
import android.view.InsetsController.AnimationType;
import android.view.InsetsState.InternalInsetsType;
import android.view.InsetsState.InternalInsetsType;
@@ -44,6 +45,13 @@ public interface InsetsAnimationControlRunner {
     */
     */
    void notifyControlRevoked(@InsetsType int types);
    void notifyControlRevoked(@InsetsType int types);


    /**
     * Updates the surface positions of the controls owned by this runner if there is any.
     *
     * @param controls An array of {@link InsetsSourceControl} that the caller newly receives.
     */
    void updateSurfacePosition(SparseArray<InsetsSourceControl> controls);

    /**
    /**
     * Cancels the animation.
     * Cancels the animation.
     */
     */
+17 −1
Original line number Original line Diff line number Diff line
@@ -62,8 +62,13 @@ public class InsetsAnimationThreadControlRunner implements InsetsAnimationContro


        @Override
        @Override
        public void scheduleApplyChangeInsets(InsetsAnimationControlRunner runner) {
        public void scheduleApplyChangeInsets(InsetsAnimationControlRunner runner) {
            synchronized (mControl) {
                // This reads the surface position on the animation thread, but the surface position
                // would be updated on the UI thread, so we need this critical section.
                // See: updateSurfacePosition.
                mControl.applyChangeInsets(null /* outState */);
                mControl.applyChangeInsets(null /* outState */);
            }
            }
        }


        @Override
        @Override
        public void notifyFinished(InsetsAnimationControlRunner runner, boolean shown) {
        public void notifyFinished(InsetsAnimationControlRunner runner, boolean shown) {
@@ -148,10 +153,21 @@ public class InsetsAnimationThreadControlRunner implements InsetsAnimationContro
    }
    }


    @Override
    @Override
    @UiThread
    public void notifyControlRevoked(@InsetsType int types) {
    public void notifyControlRevoked(@InsetsType int types) {
        mControl.notifyControlRevoked(types);
        mControl.notifyControlRevoked(types);
    }
    }


    @Override
    @UiThread
    public void updateSurfacePosition(SparseArray<InsetsSourceControl> controls) {
        synchronized (mControl) {
            // This is called from the UI thread, however, the surface position will be used on the
            // animation thread, so we need this critical section. See: scheduleApplyChangeInsets.
            mControl.updateSurfacePosition(controls);
        }
    }

    @Override
    @Override
    @UiThread
    @UiThread
    public void cancel() {
    public void cancel() {
+6 −0
Original line number Original line Diff line number Diff line
@@ -829,7 +829,13 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation


                requestedStateStale = requestedVisibilityChanged || imeRequestedVisible;
                requestedStateStale = requestedVisibilityChanged || imeRequestedVisible;
            }
            }
        }


        if (mTmpControlArray.size() > 0) {
            // Update surface positions for animations.
            for (int i = mRunningAnimations.size() - 1; i >= 0; i--) {
                mRunningAnimations.get(i).runner.updateSurfacePosition(mTmpControlArray);
            }
        }
        }
        mTmpControlArray.clear();
        mTmpControlArray.clear();