Loading core/java/android/window/TransitionFilter.java +16 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { } Loading @@ -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 */ Loading @@ -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) { Loading @@ -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 Loading @@ -196,6 +209,7 @@ public final class TransitionFilter implements Parcelable { dest.writeInt(mActivityType); dest.writeIntArray(mModes); dest.writeInt(mOrder); dest.writeTypedObject(mTopActivity, flags); } @NonNull Loading Loading @@ -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(); } } Loading packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } Loading @@ -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; Loading Loading
core/java/android/window/TransitionFilter.java +16 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { } Loading @@ -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 */ Loading @@ -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) { Loading @@ -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 Loading @@ -196,6 +209,7 @@ public final class TransitionFilter implements Parcelable { dest.writeInt(mActivityType); dest.writeIntArray(mModes); dest.writeInt(mOrder); dest.writeTypedObject(mTopActivity, flags); } @NonNull Loading Loading @@ -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(); } } Loading
packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } Loading @@ -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; Loading