diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java index e8682f7a3b22c..26ce4ae8415c4 100644 --- a/services/core/java/com/android/server/wm/TransitionController.java +++ b/services/core/java/com/android/server/wm/TransitionController.java @@ -126,19 +126,27 @@ class TransitionController { mTransitionTracer = transitionTracer; mTransitionPlayerDeath = () -> { synchronized (mAtm.mGlobalLock) { - // Clean-up/finish any playing transitions. - for (int i = 0; i < mPlayingTransitions.size(); ++i) { - mPlayingTransitions.get(i).cleanUpOnFailure(); - } - mPlayingTransitions.clear(); - mTransitionPlayer = null; - mTransitionPlayerProc = null; - mRemotePlayer.clear(); - mRunningLock.doNotifyLocked(); + detachPlayer(); } }; } + private void detachPlayer() { + if (mTransitionPlayer == null) return; + // Clean-up/finish any playing transitions. + for (int i = 0; i < mPlayingTransitions.size(); ++i) { + mPlayingTransitions.get(i).cleanUpOnFailure(); + } + mPlayingTransitions.clear(); + if (mCollectingTransition != null) { + mCollectingTransition.abort(); + } + mTransitionPlayer = null; + mTransitionPlayerProc = null; + mRemotePlayer.clear(); + mRunningLock.doNotifyLocked(); + } + /** @see #createTransition(int, int) */ @NonNull Transition createTransition(int type) { @@ -193,7 +201,7 @@ class TransitionController { if (mTransitionPlayer.asBinder() != null) { mTransitionPlayer.asBinder().unlinkToDeath(mTransitionPlayerDeath, 0); } - mTransitionPlayer = null; + detachPlayer(); } if (player.asBinder() != null) { player.asBinder().linkToDeath(mTransitionPlayerDeath, 0); diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index 949fa9662258e..32a110ea530e1 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -1136,10 +1136,13 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub final LauncherAppsServiceInternal launcherApps = LocalServices.getService( LauncherAppsServiceInternal.class); - launcherApps.startShortcut(caller.mUid, caller.mPid, callingPackage, - hop.getShortcutInfo().getPackage(), null /* default featureId */, + final boolean success = launcherApps.startShortcut(caller.mUid, caller.mPid, + callingPackage, hop.getShortcutInfo().getPackage(), null /* featureId */, hop.getShortcutInfo().getId(), null /* sourceBounds */, launchOpts, hop.getShortcutInfo().getUserId()); + if (success) { + effects |= TRANSACT_EFFECTS_LIFECYCLE; + } break; } case HIERARCHY_OP_TYPE_REPARENT_CHILDREN: {