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

Commit 4d16a902 authored by Todd Lee's avatar Todd Lee Committed by Android Build Coastguard Worker
Browse files

Ensure origin transition return filters have required modes

Test: presubmits
Bug: b/447439396
Flag: NONE EXEMPT BUG_FIX minor change isolated w.r.t origin transitions
Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:ed0b0a1a8312708c4125811749c32915f2d0dad9
Merged-In: I703a308ed1a821c957eea56952752dbfcfee9d1f
Change-Id: I703a308ed1a821c957eea56952752dbfcfee9d1f
parent 8e297b47
Loading
Loading
Loading
Loading
+30 −3
Original line number Original line Diff line number Diff line
@@ -296,6 +296,7 @@ public class IOriginTransitionsImpl extends IOriginTransitions.Stub {
                }
                }
                final TransitionInfoContainer tic = TransitionInfoContainer.extractInfo(info);
                final TransitionInfoContainer tic = TransitionInfoContainer.extractInfo(info);


                int registeredRemotes = 0;
                for (Map.Entry<RemoteTransition, TransitionFilter> entry
                for (Map.Entry<RemoteTransition, TransitionFilter> entry
                        : mWrappedReturnTransitionMap.entrySet()) {
                        : mWrappedReturnTransitionMap.entrySet()) {
                    RemoteTransition t = entry.getKey();
                    RemoteTransition t = entry.getKey();
@@ -312,6 +313,7 @@ public class IOriginTransitionsImpl extends IOriginTransitions.Stub {
                                Log.d(TAG, "Registering filter " + filter);
                                Log.d(TAG, "Registering filter " + filter);
                            }
                            }
                            mShellTransitions.registerRemote(filter, t);
                            mShellTransitions.registerRemote(filter, t);
                            registeredRemotes++;
                        } else {
                        } else {
                            Log.w(TAG, "Failed to update default filter:" + filter);
                            Log.w(TAG, "Failed to update default filter:" + filter);
                        }
                        }
@@ -324,6 +326,7 @@ public class IOriginTransitionsImpl extends IOriginTransitions.Stub {
                            }
                            }
                            mShellTransitions.registerRemoteForTakeover(
                            mShellTransitions.registerRemoteForTakeover(
                                    takeoverFilter, t);
                                    takeoverFilter, t);
                            registeredRemotes++;
                        } else {
                        } else {
                            Log.w(TAG, "Failed to update takeover filter: " + takeoverFilter);
                            Log.w(TAG, "Failed to update takeover filter: " + takeoverFilter);
                        }
                        }
@@ -339,11 +342,16 @@ public class IOriginTransitionsImpl extends IOriginTransitions.Stub {
                            } else {
                            } else {
                                mShellTransitions.registerRemote(updatedFilter, t);
                                mShellTransitions.registerRemote(updatedFilter, t);
                            }
                            }
                            registeredRemotes++;
                        } else {
                        } else {
                            Log.w(TAG, "Failed to update provided filter: " + f);
                            Log.w(TAG, "Failed to update provided filter: " + f);
                        }
                        }
                    }
                    }
                }
                }
                if (registeredRemotes == 0) {
                    // clean up since we don't have anything that needs holding onto
                    destroy();
                }
                return true;
                return true;
            }
            }
        }
        }
@@ -473,6 +481,18 @@ public class IOriginTransitionsImpl extends IOriginTransitions.Stub {
            return wrappedTransitionMap;
            return wrappedTransitionMap;
        }
        }


        /**
         * Update the provided transition filter with applicable details from the current transition
         * info from a given launch. The updated filter will have TopActivity and/or LaunchCookie
         * details added to specific requirements as appropriate which can be used for matching
         * app launches with their corresponding returns. If the update fails or is skipped for
         * whatever reason, it will return null and no return animation will be registered for
         * the launch.
         *
         * @param filter the TransitionFilter to be updated.
         * @param info the TransitionInfo associated with a given app launch.
         * @return the updated transition filter or null if the update failed.
         */
        @Nullable
        @Nullable
        private static TransitionFilter updateTransitionFilterForInfo(
        private static TransitionFilter updateTransitionFilterForInfo(
                TransitionFilter filter,
                TransitionFilter filter,
@@ -484,8 +504,8 @@ public class IOriginTransitionsImpl extends IOriginTransitions.Stub {
                        "updateTransitionFilterForInfo:"
                        "updateTransitionFilterForInfo:"
                                + "\n\tfilter=" + filter
                                + "\n\tfilter=" + filter
                                + "\n\tlaunchingTaskInfo=" + info.launchingTaskInfo
                                + "\n\tlaunchingTaskInfo=" + info.launchingTaskInfo
                                + "\n\tlaunchedTaskInfo=" + info.launchedTaskInfo
                                + "\n\tlaunchingActivity=" + info.launchingActivity
                                + "\n\tlaunchingActivity=" + info.launchingActivity
                                + "\n\tlaunchedTaskInfo=" + info.launchedTaskInfo
                                + "\n\tlaunchedActivity=" + info.launchedActivity);
                                + "\n\tlaunchedActivity=" + info.launchedActivity);
            }
            }
            if (info.launchingTaskInfo == null && info.launchingActivity == null) {
            if (info.launchingTaskInfo == null && info.launchingActivity == null) {
@@ -527,6 +547,8 @@ public class IOriginTransitionsImpl extends IOriginTransitions.Stub {
                return null;
                return null;
            }
            }


            boolean hasOpeningModeRequirement = false;
            boolean hasClosingChangeModeRequirement = false;
            for (int i = 0; i < filter.mRequirements.length; i++) {
            for (int i = 0; i < filter.mRequirements.length; i++) {
                TransitionFilter.Requirement req = filter.mRequirements[i];
                TransitionFilter.Requirement req = filter.mRequirements[i];
                if (req.mNot) {
                if (req.mNot) {
@@ -539,7 +561,7 @@ public class IOriginTransitionsImpl extends IOriginTransitions.Stub {
                                    ? info.launchingTaskInfo.topActivity : info.launchingActivity;
                                    ? info.launchingTaskInfo.topActivity : info.launchingActivity;
                    Log.d(TAG, "updateTransitionFilterForInfo: "
                    Log.d(TAG, "updateTransitionFilterForInfo: "
                            + "opening change expects topActivity: " + req.mTopActivity);
                            + "opening change expects topActivity: " + req.mTopActivity);

                    hasOpeningModeRequirement = true;
                } else if (isFilterModeClosingOrChange(req.mModes)) {
                } else if (isFilterModeClosingOrChange(req.mModes)) {
                    if (info.launchedTaskInfo != null) {
                    if (info.launchedTaskInfo != null) {
                        // For task transitions, the closing task's cookie must match the task we
                        // For task transitions, the closing task's cookie must match the task we
@@ -554,10 +576,15 @@ public class IOriginTransitionsImpl extends IOriginTransitions.Stub {
                        Log.d(TAG, "updateTransitionFilterForInfo: "
                        Log.d(TAG, "updateTransitionFilterForInfo: "
                                + "closing change expects top activity: " + req.mTopActivity);
                                + "closing change expects top activity: " + req.mTopActivity);
                    }
                    }
                    hasClosingChangeModeRequirement = true;
                }
                }
            }
            }
            if (hasOpeningModeRequirement && hasClosingChangeModeRequirement) {
                return filter;
                return filter;
            }
            }
            Log.w(TAG, "updateTransitionFilterForInfo failed - filter missing required modes");
            return null;
        }
    }
    }


    private static TransitionFilter createReturnTransitionFilter(boolean forTakeover) {
    private static TransitionFilter createReturnTransitionFilter(boolean forTakeover) {