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

Commit b331f9d2 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Fix flickery behavior when launching notification when occluded

- Launch the action after the panel is fully collapses in this
case such that we have a clean transition, like we do when
launching all other activities from the shade.
- When Keyguard flags changed, don't execute the app transition
when there was already be one before, as it might interfere with
that one and start it prematurely.

Test: go/wm-smoke
Test: Launch notification from occluded notification shade
Bug: 63686192
Change-Id: I49efb2f627fcc7a0d6386dcea2510d31ab520b11
parent 6498f962
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -6811,7 +6811,6 @@ public class StatusBar extends SystemUI implements DemoMode,
                }
            });

            final boolean keyguardShowing = mStatusBarKeyguardViewManager.isShowing();
            final boolean afterKeyguardGone = intent.isActivity()
                    && PreviewInflater.wouldLaunchResolverActivity(mContext, intent.getIntent(),
                            mCurrentUserId);
@@ -6838,7 +6837,7 @@ public class StatusBar extends SystemUI implements DemoMode,
                        }
                    }
                    final StatusBarNotification parentToCancelFinal = parentToCancel;
                    new Thread() {
                    final Runnable runnable = new Runnable() {
                        @Override
                        public void run() {
                            try {
@@ -6910,7 +6909,14 @@ public class StatusBar extends SystemUI implements DemoMode,
                                });
                            }
                        }
                    }.start();
                    };

                    if (mStatusBarKeyguardViewManager.isShowing()
                            && mStatusBarKeyguardViewManager.isOccluded()) {
                        mStatusBarKeyguardViewManager.addAfterKeyguardGoneRunnable(runnable);
                    } else {
                        new Thread(runnable).start();
                    }

                    // close the shade if it was open
                    animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL,
+12 −2
Original line number Diff line number Diff line
@@ -23982,10 +23982,20 @@ public class ActivityManagerService extends IActivityManager.Stub
                // We might change the visibilities here, so prepare an empty app transition which
                // might be overridden later if we actually change visibilities.
                mWindowManager.prepareAppTransition(TRANSIT_NONE, false /* alwaysKeepCurrent */);
                final boolean wasTransitionSet =
                        mWindowManager.getPendingAppTransition() != TRANSIT_NONE;
                if (!wasTransitionSet) {
                    mWindowManager.prepareAppTransition(TRANSIT_NONE,
                            false /* alwaysKeepCurrent */);
                }
                mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
                // If there was a transition set already we don't want to interfere with it as we
                // might be starting it too early.
                if (!wasTransitionSet) {
                    mWindowManager.executeAppTransition();
                }
            }
            if (callback != null) {
                callback.run();
            }