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

Commit 28774a4f authored by Evan Rosky's avatar Evan Rosky Committed by Android (Google) Code Review
Browse files

Merge "Add activity-component to transition info change" into main

parents f0c110a1 2fe31fb0
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -212,7 +212,9 @@ public final class TransitionFilter implements Parcelable {
                        continue;
                    }
                }
                if (!matchesTopActivity(change.getTaskInfo())) continue;
                if (!matchesTopActivity(change.getTaskInfo(), change.getActivityComponent())) {
                    continue;
                }
                if (mModes != null) {
                    boolean pass = false;
                    for (int m = 0; m < mModes.length; ++m) {
@@ -234,11 +236,15 @@ public final class TransitionFilter implements Parcelable {
            return false;
        }

        private boolean matchesTopActivity(ActivityManager.RunningTaskInfo info) {
        private boolean matchesTopActivity(ActivityManager.RunningTaskInfo taskInfo,
                @Nullable ComponentName activityComponent) {
            if (mTopActivity == null) return true;
            if (info == null) return false;
            final ComponentName component = info.topActivity;
            return mTopActivity.equals(component);
            if (activityComponent != null) {
                return mTopActivity.equals(activityComponent);
            } else if (taskInfo != null) {
                return mTopActivity.equals(taskInfo.topActivity);
            }
            return false;
        }

        /** Check if the request matches this filter. It may generate false positives */
@@ -247,7 +253,7 @@ public final class TransitionFilter implements Parcelable {
            if (mActivityType == ACTIVITY_TYPE_UNDEFINED) return true;
            return request.getTriggerTask() != null
                    && request.getTriggerTask().getActivityType() == mActivityType
                    && matchesTopActivity(request.getTriggerTask());
                    && matchesTopActivity(request.getTriggerTask(), null /* activityCmp */);
        }

        @Override
+20 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.graphics.Point;
import android.graphics.Rect;
import android.hardware.HardwareBuffer;
@@ -635,6 +636,7 @@ public final class TransitionInfo implements Parcelable {
        private @ColorInt int mBackgroundColor;
        private SurfaceControl mSnapshot = null;
        private float mSnapshotLuma;
        private ComponentName mActivityComponent = null;

        public Change(@Nullable WindowContainerToken container, @NonNull SurfaceControl leash) {
            mContainer = container;
@@ -663,6 +665,7 @@ public final class TransitionInfo implements Parcelable {
            mBackgroundColor = in.readInt();
            mSnapshot = in.readTypedObject(SurfaceControl.CREATOR);
            mSnapshotLuma = in.readFloat();
            mActivityComponent = in.readTypedObject(ComponentName.CREATOR);
        }

        private Change localRemoteCopy() {
@@ -685,6 +688,7 @@ public final class TransitionInfo implements Parcelable {
            out.mBackgroundColor = mBackgroundColor;
            out.mSnapshot = mSnapshot != null ? new SurfaceControl(mSnapshot, "localRemote") : null;
            out.mSnapshotLuma = mSnapshotLuma;
            out.mActivityComponent = mActivityComponent;
            return out;
        }

@@ -780,6 +784,11 @@ public final class TransitionInfo implements Parcelable {
            mSnapshotLuma = luma;
        }

        /** Sets the component-name of the container. Container must be an Activity. */
        public void setActivityComponent(@Nullable ComponentName component) {
            mActivityComponent = component;
        }

        /** @return the container that is changing. May be null if non-remotable (eg. activity) */
        @Nullable
        public WindowContainerToken getContainer() {
@@ -913,6 +922,12 @@ public final class TransitionInfo implements Parcelable {
            return mSnapshotLuma;
        }

        /** @return the component-name of this container (if it is an activity). */
        @Nullable
        public ComponentName getActivityComponent() {
            return mActivityComponent;
        }

        /** @hide */
        @Override
        public void writeToParcel(@NonNull Parcel dest, int flags) {
@@ -936,6 +951,7 @@ public final class TransitionInfo implements Parcelable {
            dest.writeInt(mBackgroundColor);
            dest.writeTypedObject(mSnapshot, flags);
            dest.writeFloat(mSnapshotLuma);
            dest.writeTypedObject(mActivityComponent, flags);
        }

        @NonNull
@@ -994,6 +1010,10 @@ public final class TransitionInfo implements Parcelable {
            if (mLastParent != null) {
                sb.append(" lastParent="); sb.append(mLastParent);
            }
            if (mActivityComponent != null) {
                sb.append(" component=");
                sb.append(mActivityComponent.flattenToShortString());
            }
            sb.append('}');
            return sb.toString();
        }
+25 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ import static org.mockito.Mockito.verify;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.IApplicationThread;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
@@ -419,6 +420,30 @@ public class ShellTransitionTests extends ShellTestCase {
        assertTrue(filter.matches(withoutFlag));
    }

    @Test
    public void testTransitionFilterActivityComponent() {
        TransitionFilter filter = new TransitionFilter();
        ComponentName cmpt = new ComponentName("testpak", "testcls");
        filter.mRequirements =
                new TransitionFilter.Requirement[]{new TransitionFilter.Requirement()};
        filter.mRequirements[0].mTopActivity = cmpt;
        filter.mRequirements[0].mModes = new int[]{TRANSIT_OPEN, TRANSIT_TO_FRONT};

        final RunningTaskInfo taskInf = createTaskInfo(1);
        final TransitionInfo openTask = new TransitionInfoBuilder(TRANSIT_OPEN)
                .addChange(TRANSIT_OPEN, taskInf).build();
        assertFalse(filter.matches(openTask));

        taskInf.topActivity = cmpt;
        final TransitionInfo openTaskCmpt = new TransitionInfoBuilder(TRANSIT_OPEN)
                .addChange(TRANSIT_OPEN, taskInf).build();
        assertTrue(filter.matches(openTaskCmpt));

        final TransitionInfo openAct = new TransitionInfoBuilder(TRANSIT_OPEN)
                .addChange(TRANSIT_OPEN, cmpt).build();
        assertTrue(filter.matches(openAct));
    }

    @Test
    public void testRegisteredRemoteTransition() {
        Transitions transitions = createTestTransitions();
+16 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static org.mockito.Mockito.mock;

import android.app.ActivityManager;
import android.content.ComponentName;
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.window.TransitionInfo;
@@ -50,20 +51,34 @@ public class TransitionInfoBuilder {
    }

    public TransitionInfoBuilder addChange(@WindowManager.TransitionType int mode,
            @TransitionInfo.ChangeFlags int flags, ActivityManager.RunningTaskInfo taskInfo) {
            @TransitionInfo.ChangeFlags int flags, ActivityManager.RunningTaskInfo taskInfo,
            ComponentName activityComponent) {
        final TransitionInfo.Change change = new TransitionInfo.Change(
                taskInfo != null ? taskInfo.token : null, createMockSurface(true /* valid */));
        change.setMode(mode);
        change.setFlags(flags);
        change.setTaskInfo(taskInfo);
        change.setActivityComponent(activityComponent);
        return addChange(change);
    }

    /** Add a change to the TransitionInfo */
    public TransitionInfoBuilder addChange(@WindowManager.TransitionType int mode,
            @TransitionInfo.ChangeFlags int flags, ActivityManager.RunningTaskInfo taskInfo) {
        return addChange(mode, flags, taskInfo, null /* activityComponent */);
    }

    public TransitionInfoBuilder addChange(@WindowManager.TransitionType int mode,
            ActivityManager.RunningTaskInfo taskInfo) {
        return addChange(mode, TransitionInfo.FLAG_NONE, taskInfo);
    }

    /** Add a change to the TransitionInfo */
    public TransitionInfoBuilder addChange(@WindowManager.TransitionType int mode,
            ComponentName activityComponent) {
        return addChange(mode, TransitionInfo.FLAG_NONE, null /* taskinfo */, activityComponent);
    }

    public TransitionInfoBuilder addChange(@WindowManager.TransitionType int mode) {
        return addChange(mode, TransitionInfo.FLAG_NONE, null /* taskInfo */);
    }
+4 −0
Original line number Diff line number Diff line
@@ -2596,6 +2596,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
                change.setBackgroundColor(ColorUtils.setAlphaComponent(backgroundColor, 255));
            }

            if (activityRecord != null) {
                change.setActivityComponent(activityRecord.mActivityComponent);
            }

            change.setRotation(info.mRotation, endRotation);
            if (info.mSnapshot != null) {
                change.setSnapshot(info.mSnapshot, info.mSnapshotLuma);
Loading