Merge "Fix some shell transitions bugs breaking splashscreen cts" into sc-v2-dev am: 317e669870

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15340839

Change-Id: Ida7bb38d0da0bd5b059e7c85cd99aaa03ff2efb1
This commit is contained in:
Evan Rosky
2021-07-21 19:19:37 +00:00
committed by Automerger Merge Worker
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.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.WindowConfiguration;
import android.content.ComponentName;
import android.os.Parcel;
import android.os.Parcelable;
@@ -140,6 +142,7 @@ public final class TransitionFilter implements Parcelable {
public int mActivityType = ACTIVITY_TYPE_UNDEFINED;
public int[] mModes = null;
public @ContainerOrder int mOrder = CONTAINER_ORDER_ANY;
public ComponentName mTopActivity;
public Requirement() {
}
@@ -148,6 +151,7 @@ public final class TransitionFilter implements Parcelable {
mActivityType = in.readInt();
mModes = in.createIntArray();
mOrder = in.readInt();
mTopActivity = in.readTypedObject(ComponentName.CREATOR);
}
/** Go through changes and find if at-least one change matches this filter */
@@ -167,6 +171,7 @@ public final class TransitionFilter implements Parcelable {
continue;
}
}
if (!matchesTopActivity(change.getTaskInfo())) continue;
if (mModes != null) {
boolean pass = false;
for (int m = 0; m < mModes.length; ++m) {
@@ -182,12 +187,20 @@ public final class TransitionFilter implements Parcelable {
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 */
boolean matches(@NonNull TransitionRequestInfo request) {
// Can't check modes/order since the transition hasn't been built at this point.
if (mActivityType == ACTIVITY_TYPE_UNDEFINED) return true;
return request.getTriggerTask() != null
&& request.getTriggerTask().getActivityType() == mActivityType;
&& request.getTriggerTask().getActivityType() == mActivityType
&& matchesTopActivity(request.getTriggerTask());
}
@Override
@@ -196,6 +209,7 @@ public final class TransitionFilter implements Parcelable {
dest.writeInt(mActivityType);
dest.writeIntArray(mModes);
dest.writeInt(mOrder);
dest.writeTypedObject(mTopActivity, flags);
}
@NonNull
@@ -230,6 +244,7 @@ public final class TransitionFilter implements Parcelable {
}
out.append("]").toString();
out.append(" order=" + containerOrderToString(mOrder));
out.append(" topActivity=").append(mTopActivity);
return out.toString();
}
}

View File

@@ -29,6 +29,7 @@ import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
import android.content.ComponentName;
import android.graphics.Rect;
import android.os.IBinder;
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. */
public void addHomeOpenCheck() {
public void addHomeOpenCheck(ComponentName homeActivity) {
if (mFilter == null) {
mFilter = new TransitionFilter();
}
@@ -174,6 +175,7 @@ public class RemoteTransitionCompat implements Parcelable {
new TransitionFilter.Requirement[]{new TransitionFilter.Requirement(),
new TransitionFilter.Requirement()};
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].mOrder = CONTAINER_ORDER_TOP;
mFilter.mRequirements[1].mActivityType = ACTIVITY_TYPE_STANDARD;