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

Commit 2adc744a authored by Daniel Akinola's avatar Daniel Akinola
Browse files

Fix activity's launched from notification shade's displayId

Trying to launch Settings from the settings gear on the notification
shade, or other activities like notification history, would always
launch on the default display, even if the shade is on an external
display. This is because the displayId used for launching the activity
was alwasy the default display. Now it is the display id is shade aware
since it is derived via shade aware context.

Fix: 389636334
Test: manual testing
Test: StatusBarNotificationActivityStarterTest
Flag: EXEMPT bugfix
Change-Id: I10a41cc6d6766263027766698bbc58beda2ec03e
parent fed93f24
Loading
Loading
Loading
Loading
+17 −16
Original line number Diff line number Diff line
@@ -57,11 +57,11 @@ import com.android.systemui.animation.ActivityTransitionAnimator;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.DisplayId;
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.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.statusbar.CommandQueue;
@@ -76,11 +76,11 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.provider.LaunchFullScreenIntentProvider;
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
import com.android.systemui.statusbar.notification.emptyshade.shared.ModesEmptyShadeFix;
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
import com.android.systemui.statusbar.notification.headsup.HeadsUpUtil;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRowDragController;
import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback;
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
import com.android.systemui.statusbar.notification.headsup.HeadsUpUtil;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.wmshell.BubblesManager;

@@ -115,7 +115,6 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
    private final static String TAG = "StatusBarNotificationActivityStarter";

    private final Context mContext;
    private final int mDisplayId;

    private final Handler mMainThreadHandler;
    private final Executor mUiBgExecutor;
@@ -155,8 +154,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit

    @Inject
    StatusBarNotificationActivityStarter(
            Context context,
            @DisplayId int displayId,
            @ShadeDisplayAware Context context,
            Handler mainThreadHandler,
            @Background Executor uiBgExecutor,
            NotificationVisibilityProvider visibilityProvider,
@@ -189,7 +187,6 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
            PowerInteractor powerInteractor,
            UserTracker userTracker) {
        mContext = context;
        mDisplayId = displayId;
        mMainThreadHandler = mainThreadHandler;
        mUiBgExecutor = uiBgExecutor;
        mVisibilityProvider = visibilityProvider;
@@ -493,6 +490,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
            boolean animate,
            boolean isActivityIntent) {
        mLogger.logStartNotificationIntent(entry);
        final int displayId = mContext.getDisplayId();
        try {
            ActivityTransitionAnimator.Controller animationController =
                    new StatusBarTransitionAnimatorController(
@@ -501,7 +499,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
                            mShadeController,
                            mNotificationShadeWindowController,
                            mCommandQueue,
                            mDisplayId,
                            displayId,
                            isActivityIntent);
            mActivityTransitionAnimator.startPendingIntentWithAnimation(
                    animationController,
@@ -511,11 +509,11 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
                        long eventTime = row.getAndResetLastActionUpTime();
                        Bundle options = eventTime > 0
                                ? getActivityOptions(
                                mDisplayId,
                                displayId,
                                adapter,
                                mKeyguardStateController.isShowing(),
                                eventTime)
                                : getActivityOptions(mDisplayId, adapter);
                                : getActivityOptions(displayId, adapter);
                        int result = intent.sendAndReturnResult(mContext, 0, fillInIntent, null,
                                null, null, options);
                        mLogger.logSendPendingIntent(entry, intent, result);
@@ -533,6 +531,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();
        ActivityStarter.OnDismissAction onDismissAction = new ActivityStarter.OnDismissAction() {
            @Override
            public boolean onDismiss() {
@@ -544,7 +543,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
                                    mShadeController,
                                    mNotificationShadeWindowController,
                                    mCommandQueue,
                                    mDisplayId,
                                    displayId,
                                    true /* isActivityIntent */);

                    mActivityTransitionAnimator.startIntentWithAnimation(
@@ -552,7 +551,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
                            (adapter) -> TaskStackBuilder.create(mContext)
                                    .addNextIntentWithParentStack(intent)
                                    .startActivities(getActivityOptions(
                                                    mDisplayId,
                                                    displayId,
                                                    adapter),
                                            new UserHandle(UserHandle.getUserId(appUid))));
                });
@@ -571,6 +570,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
    @Override
    public void startHistoryIntent(View view, boolean showHistory) {
        ModesEmptyShadeFix.assertInLegacyMode();
        final int displayId = mContext.getDisplayId();
        boolean animate = mActivityStarter.shouldAnimateLaunch(true /* isActivityIntent */);
        ActivityStarter.OnDismissAction onDismissAction = new ActivityStarter.OnDismissAction() {
            @Override
@@ -597,13 +597,13 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
                                            mShadeController,
                                            mNotificationShadeWindowController,
                                            mCommandQueue,
                                            mDisplayId,
                                            displayId,
                                            true /* isActivityIntent */);

                    mActivityTransitionAnimator.startIntentWithAnimation(
                            animationController, animate, intent.getPackage(),
                            (adapter) -> tsb.startActivities(
                                    getActivityOptions(mDisplayId, adapter),
                                    getActivityOptions(displayId, adapter),
                                    mUserTracker.getUserHandle()));
                });
                return true;
@@ -620,6 +620,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit

    @Override
    public void startSettingsIntent(@NonNull View view, @NonNull SettingsIntent intentInfo) {
        final int displayId = mContext.getDisplayId();
        boolean animate = mActivityStarter.shouldAnimateLaunch(true /* isActivityIntent */);
        ActivityStarter.OnDismissAction onDismissAction = new ActivityStarter.OnDismissAction() {
            @Override
@@ -642,13 +643,13 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
                                            mShadeController,
                                            mNotificationShadeWindowController,
                                            mCommandQueue,
                                            mDisplayId,
                                            displayId,
                                            true /* isActivityIntent */);

                    mActivityTransitionAnimator.startIntentWithAnimation(
                            animationController, animate, intentInfo.getTargetIntent().getPackage(),
                            (adapter) -> tsb.startActivities(
                                    getActivityOptions(mDisplayId, adapter),
                                    getActivityOptions(displayId, adapter),
                                    mUserTracker.getUserHandle()));
                });
                return true;
+1 −3
Original line number Diff line number Diff line
@@ -91,11 +91,11 @@ import com.android.systemui.statusbar.notification.collection.provider.LaunchFul
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
import com.android.systemui.statusbar.notification.data.repository.NotificationLaunchAnimationRepository;
import com.android.systemui.statusbar.notification.domain.interactor.NotificationLaunchAnimationInteractor;
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback;
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
@@ -122,7 +122,6 @@ import java.util.Optional;
@TestableLooper.RunWithLooper(setAsMainLooper = true)
public class StatusBarNotificationActivityStarterTest extends SysuiTestCase {

    private static final int DISPLAY_ID = 0;
    private final FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags();

    @Mock
@@ -233,7 +232,6 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase {
        mNotificationActivityStarter =
                new StatusBarNotificationActivityStarter(
                        getContext(),
                        DISPLAY_ID,
                        mHandler,
                        mUiBgExecutor,
                        mVisibilityProvider,
+0 −1
Original line number Diff line number Diff line
@@ -52,7 +52,6 @@ val Kosmos.statusBarNotificationActivityStarter by
    Kosmos.Fixture {
        StatusBarNotificationActivityStarter(
            applicationContext,
            applicationContext.displayId,
            fakeExecutorHandler,
            fakeExecutor,
            notificationVisibilityProvider,