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

Commit 54506cbb authored by Louis Chang's avatar Louis Chang
Browse files

Fix unable starting home on an empty display

- Using the activity type of starting activity if caller
  did not specified it in ActivityOptions.
- Avoid reusing home activity on other displays while
  starting home with component specified.
- Start focused activities on all displays after process
  attached.

Bug: 119844270
Test: atest ActivityManagerMultiDisplayTests
Change-Id: I10cec4dc47626319788a306fa672fa597d1746b9
parent 1215943a
Loading
Loading
Loading
Loading
+6 −9
Original line number Original line Diff line number Diff line
@@ -1039,11 +1039,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
        boolean didSomething = false;
        boolean didSomething = false;
        for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
        for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
            final ActivityDisplay display = mActivityDisplays.get(displayNdx);
            final ActivityDisplay display = mActivityDisplays.get(displayNdx);
            for (int stackNdx = display.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
            final ActivityStack stack = display.getFocusedStack();
                final ActivityStack stack = display.getChildAt(stackNdx);
            if (stack != null) {
                if (!isTopDisplayFocusedStack(stack)) {
                    continue;
                }
                stack.getAllRunningVisibleActivitiesLocked(mTmpActivityList);
                stack.getAllRunningVisibleActivitiesLocked(mTmpActivityList);
                final ActivityRecord top = stack.topRunningActivityLocked();
                final ActivityRecord top = stack.topRunningActivityLocked();
                final int size = mTmpActivityList.size();
                final int size = mTmpActivityList.size();
@@ -2566,10 +2563,10 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
                windowingMode = options != null ? options.getLaunchWindowingMode()
                windowingMode = options != null ? options.getLaunchWindowingMode()
                        : r.getWindowingMode();
                        : r.getWindowingMode();
            }
            }
            return activityDisplay.createStack(
            final int activityType =
                    windowingMode,
                    options != null && options.getLaunchActivityType() != ACTIVITY_TYPE_UNDEFINED
                    options != null ? options.getLaunchActivityType() : r.getActivityType(),
                            ? options.getLaunchActivityType() : r.getActivityType();
                    true /*onTop*/);
            return activityDisplay.createStack(windowingMode, activityType, true /*onTop*/);
        }
        }


        Slog.w(TAG, "getValidLaunchStackOnDisplay: can't launch on displayId " + displayId);
        Slog.w(TAG, "getValidLaunchStackOnDisplay: can't launch on displayId " + displayId);
+2 −1
Original line number Original line Diff line number Diff line
@@ -1859,7 +1859,8 @@ class ActivityStarter {
            }
            }
        }
        }


        if (mStartActivity.isActivityTypeHome() && intentActivity != null
        if (intentActivity != null
                && (mStartActivity.isActivityTypeHome() || intentActivity.isActivityTypeHome())
                && intentActivity.getDisplayId() != mPreferredDisplayId) {
                && intentActivity.getDisplayId() != mPreferredDisplayId) {
            // Do not reuse home activity on other displays.
            // Do not reuse home activity on other displays.
            intentActivity = null;
            intentActivity = null;