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

Commit 720135fe authored by Daniel Akinola's avatar Daniel Akinola
Browse files

Ensure that activities started from dual shade launch on correct display

Fixing activties that launch from the shade like settings and
notification history, by passing a context which knows which display the
shade is on

Fix: 397155463
Test: tested launching activities from QS shade while shade on overlay display
Test: StatusBarNotificationActivityStarterTest
Flag: com.android.systemui.shade_window_goes_around
Change-Id: Ice493396cc72a6cba112e1a43548e65fb14e22b4
parent cd319544
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeDisplayAware;
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor;
import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractor;
import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationClickNotifier;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
@@ -116,6 +117,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
    private final static String TAG = "StatusBarNotificationActivityStarter";

    private final Context mContext;
    private final ShadeDialogContextInteractor mContextInteractor;

    private final Handler mMainThreadHandler;
    private final Executor mUiBgExecutor;
@@ -156,6 +158,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
    @Inject
    StatusBarNotificationActivityStarter(
            @ShadeDisplayAware Context context,
            ShadeDialogContextInteractor contextInteractor,
            @Main Handler mainThreadHandler,
            @Background Executor uiBgExecutor,
            NotificationVisibilityProvider visibilityProvider,
@@ -188,6 +191,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
            PowerInteractor powerInteractor,
            UserTracker userTracker) {
        mContext = context;
        mContextInteractor = contextInteractor;
        mMainThreadHandler = mainThreadHandler;
        mUiBgExecutor = uiBgExecutor;
        mVisibilityProvider = visibilityProvider;
@@ -491,7 +495,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
            boolean animate,
            boolean isActivityIntent) {
        mLogger.logStartNotificationIntent(entry);
        final int displayId = mContext.getDisplayId();
        final int displayId = mContextInteractor.getContext().getDisplayId();
        try {
            ActivityTransitionAnimator.Controller animationController =
                    new StatusBarTransitionAnimatorController(
@@ -532,7 +536,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
    public void startNotificationGutsIntent(@NonNull final Intent intent, final int appUid,
            @NonNull ExpandableNotificationRow row) {
        boolean animate = mActivityStarter.shouldAnimateLaunch(true /* isActivityIntent */);
        final int displayId = mContext.getDisplayId();
        final int displayId = mContextInteractor.getContext().getDisplayId();
        ActivityStarter.OnDismissAction onDismissAction = new ActivityStarter.OnDismissAction() {
            @Override
            public boolean onDismiss() {
@@ -571,7 +575,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
    @Override
    public void startHistoryIntent(View view, boolean showHistory) {
        ModesEmptyShadeFix.assertInLegacyMode();
        final int displayId = mContext.getDisplayId();
        final int displayId = mContextInteractor.getContext().getDisplayId();
        boolean animate = mActivityStarter.shouldAnimateLaunch(true /* isActivityIntent */);
        ActivityStarter.OnDismissAction onDismissAction = new ActivityStarter.OnDismissAction() {
            @Override
@@ -621,7 +625,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit

    @Override
    public void startSettingsIntent(@NonNull View view, @NonNull SettingsIntent intentInfo) {
        final int displayId = mContext.getDisplayId();
        final int displayId = mContextInteractor.getContext().getDisplayId();
        boolean animate = mActivityStarter.shouldAnimateLaunch(true /* isActivityIntent */);
        ActivityStarter.OnDismissAction onDismissAction = new ActivityStarter.OnDismissAction() {
            @Override
+5 −4
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.ShadeControllerImpl;
import com.android.systemui.shade.data.repository.FakeShadeRepository;
import com.android.systemui.shade.data.repository.ShadeAnimationRepository;
import com.android.systemui.shade.domain.interactor.FakeShadeDialogContextInteractor;
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor;
import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractorLegacyImpl;
import com.android.systemui.statusbar.CommandQueue;
@@ -171,6 +172,7 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase {
    private final FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
    private ExpandableNotificationRow mNotificationRow;
    private ExpandableNotificationRow mBubbleNotificationRow;
    private FakeShadeDialogContextInteractor mContextInteractor;

    private final Answer<Void> mCallOnDismiss = answerVoid(
            (OnDismissAction dismissAction, Runnable cancel,
@@ -187,6 +189,8 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase {
                mDependency,
                TestableLooper.get(this));

        mContextInteractor = new FakeShadeDialogContextInteractor(mContext);

        // Create standard notification with contentIntent
        mNotificationRow = notificationTestHelper.createRow();
        StatusBarNotification sbn = mNotificationRow.getEntry().getSbn();
@@ -199,10 +203,6 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase {
        bubbleSbn.getNotification().contentIntent = mContentIntent;
        bubbleSbn.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;

//        ArrayList<NotificationEntry> activeNotifications = new ArrayList<>();
//        activeNotifications.add(mNotificationRow.getEntry());
//        activeNotifications.add(mBubbleNotificationRow.getEntry());
//        when(mEntryManager.getVisibleNotifications()).thenReturn(activeNotifications);
        when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
        when(mOnUserInteractionCallback.registerFutureDismissal(eq(mNotificationRow.getEntry()),
                anyInt())).thenReturn(mFutureDismissalRunnable);
@@ -232,6 +232,7 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase {
        mNotificationActivityStarter =
                new StatusBarNotificationActivityStarter(
                        getContext(),
                        mContextInteractor,
                        mHandler,
                        mUiBgExecutor,
                        mVisibilityProvider,
+2 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.systemui.kosmos.Kosmos
import com.android.systemui.plugins.activityStarter
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.settings.userTracker
import com.android.systemui.shade.data.repository.shadeDialogContextInteractor
import com.android.systemui.shade.domain.interactor.panelExpansionInteractor
import com.android.systemui.shade.domain.interactor.shadeAnimationInteractor
import com.android.systemui.shade.shadeController
@@ -52,6 +53,7 @@ val Kosmos.statusBarNotificationActivityStarter by
    Kosmos.Fixture {
        StatusBarNotificationActivityStarter(
            applicationContext,
            shadeDialogContextInteractor,
            fakeExecutorHandler,
            fakeExecutor,
            notificationVisibilityProvider,