Merge "Fix some shell transitions bugs breaking splashscreen cts" into sc-v2-dev

This commit is contained in:
Evan Rosky
2021-07-21 18:01:08 +00:00
committed by Android (Google) Code Review
2 changed files with 19 additions and 2 deletions

View File

@@ -21,7 +21,9 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import android.annotation.IntDef; import android.annotation.IntDef;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.WindowConfiguration; import android.app.WindowConfiguration;
import android.content.ComponentName;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -140,6 +142,7 @@ public final class TransitionFilter implements Parcelable {
public int mActivityType = ACTIVITY_TYPE_UNDEFINED; public int mActivityType = ACTIVITY_TYPE_UNDEFINED;
public int[] mModes = null; public int[] mModes = null;
public @ContainerOrder int mOrder = CONTAINER_ORDER_ANY; public @ContainerOrder int mOrder = CONTAINER_ORDER_ANY;
public ComponentName mTopActivity;
public Requirement() { public Requirement() {
} }
@@ -148,6 +151,7 @@ public final class TransitionFilter implements Parcelable {
mActivityType = in.readInt(); mActivityType = in.readInt();
mModes = in.createIntArray(); mModes = in.createIntArray();
mOrder = in.readInt(); mOrder = in.readInt();
mTopActivity = in.readTypedObject(ComponentName.CREATOR);
} }
/** Go through changes and find if at-least one change matches this filter */ /** Go through changes and find if at-least one change matches this filter */
@@ -167,6 +171,7 @@ public final class TransitionFilter implements Parcelable {
continue; continue;
} }
} }
if (!matchesTopActivity(change.getTaskInfo())) continue;
if (mModes != null) { if (mModes != null) {
boolean pass = false; boolean pass = false;
for (int m = 0; m < mModes.length; ++m) { for (int m = 0; m < mModes.length; ++m) {
@@ -182,12 +187,20 @@ public final class TransitionFilter implements Parcelable {
return false; return false;
} }
private boolean matchesTopActivity(ActivityManager.RunningTaskInfo info) {
if (mTopActivity == null) return true;
if (info == null) return false;
final ComponentName component = info.topActivity;
return mTopActivity.equals(component);
}
/** Check if the request matches this filter. It may generate false positives */ /** Check if the request matches this filter. It may generate false positives */
boolean matches(@NonNull TransitionRequestInfo request) { boolean matches(@NonNull TransitionRequestInfo request) {
// Can't check modes/order since the transition hasn't been built at this point. // Can't check modes/order since the transition hasn't been built at this point.
if (mActivityType == ACTIVITY_TYPE_UNDEFINED) return true; if (mActivityType == ACTIVITY_TYPE_UNDEFINED) return true;
return request.getTriggerTask() != null return request.getTriggerTask() != null
&& request.getTriggerTask().getActivityType() == mActivityType; && request.getTriggerTask().getActivityType() == mActivityType
&& matchesTopActivity(request.getTriggerTask());
} }
@Override @Override
@@ -196,6 +209,7 @@ public final class TransitionFilter implements Parcelable {
dest.writeInt(mActivityType); dest.writeInt(mActivityType);
dest.writeIntArray(mModes); dest.writeIntArray(mModes);
dest.writeInt(mOrder); dest.writeInt(mOrder);
dest.writeTypedObject(mTopActivity, flags);
} }
@NonNull @NonNull
@@ -230,6 +244,7 @@ public final class TransitionFilter implements Parcelable {
} }
out.append("]").toString(); out.append("]").toString();
out.append(" order=" + containerOrderToString(mOrder)); out.append(" order=" + containerOrderToString(mOrder));
out.append(" topActivity=").append(mTopActivity);
return out.toString(); return out.toString();
} }
} }

View File

@@ -29,6 +29,7 @@ import android.annotation.Nullable;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.ActivityTaskManager; import android.app.ActivityTaskManager;
import android.content.ComponentName;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.IBinder; import android.os.IBinder;
import android.os.Parcelable; import android.os.Parcelable;
@@ -166,7 +167,7 @@ public class RemoteTransitionCompat implements Parcelable {
} }
/** Adds a filter check that restricts this remote transition to home open transitions. */ /** Adds a filter check that restricts this remote transition to home open transitions. */
public void addHomeOpenCheck() { public void addHomeOpenCheck(ComponentName homeActivity) {
if (mFilter == null) { if (mFilter == null) {
mFilter = new TransitionFilter(); mFilter = new TransitionFilter();
} }
@@ -174,6 +175,7 @@ public class RemoteTransitionCompat implements Parcelable {
new TransitionFilter.Requirement[]{new TransitionFilter.Requirement(), new TransitionFilter.Requirement[]{new TransitionFilter.Requirement(),
new TransitionFilter.Requirement()}; new TransitionFilter.Requirement()};
mFilter.mRequirements[0].mActivityType = ACTIVITY_TYPE_HOME; mFilter.mRequirements[0].mActivityType = ACTIVITY_TYPE_HOME;
mFilter.mRequirements[0].mTopActivity = homeActivity;
mFilter.mRequirements[0].mModes = new int[]{TRANSIT_OPEN, TRANSIT_TO_FRONT}; mFilter.mRequirements[0].mModes = new int[]{TRANSIT_OPEN, TRANSIT_TO_FRONT};
mFilter.mRequirements[0].mOrder = CONTAINER_ORDER_TOP; mFilter.mRequirements[0].mOrder = CONTAINER_ORDER_TOP;
mFilter.mRequirements[1].mActivityType = ACTIVITY_TYPE_STANDARD; mFilter.mRequirements[1].mActivityType = ACTIVITY_TYPE_STANDARD;