Merge "Fix some shell transitions bugs breaking splashscreen cts" into sc-v2-dev
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user