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

Commit 4f99b0dc authored by Jeff Chang's avatar Jeff Chang
Browse files

Don't show the embedded activities if visible needed activity without showWhenLocked

While the host activity and the embedded activity are displayed
side-by-side. Only the activity with showWhenLocked flag is shown
when the lock-screen is displayed. This CL updates the logic for
embedded activities policy if the visible needed activity without
showWhenLocked flags. Don’t display the embedded activities while
the lock-screen is shown.

Bug: 197298936
Test: atest TaskFragmentOrganizerTest
            TaskFragmentOrganizerPolicyTest
            SplitActivityLifecycleTest
Change-Id: I8e318c4b47f38ff3daf0713ab70cd980e7928000
parent f426ad97
Loading
Loading
Loading
Loading
+27 −6
Original line number Diff line number Diff line
@@ -4151,18 +4151,39 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
     *         conditions a) above.
     *         Multi-windowing mode will be exited if {@code true} is returned.
     */
    boolean canShowWhenLocked() {
        if (!inPinnedWindowingMode() && (mShowWhenLocked || containsShowWhenLockedWindow())) {
    private static boolean canShowWhenLocked(ActivityRecord r) {
        if (r == null || r.getTaskFragment() == null) {
            return false;
        }
        if (!r.inPinnedWindowingMode() && (r.mShowWhenLocked || r.containsShowWhenLockedWindow())) {
            return true;
        } else if (mInheritShownWhenLocked) {
            final ActivityRecord r = task.getActivityBelow(this);
            return r != null && !r.inPinnedWindowingMode() && (r.mShowWhenLocked
                    || r.containsShowWhenLockedWindow());
        } else if (r.mInheritShownWhenLocked) {
            final ActivityRecord activity = r.getTaskFragment().getActivityBelow(r);
            return activity != null && !activity.inPinnedWindowingMode()
                    && (activity.mShowWhenLocked || activity.containsShowWhenLockedWindow());
        } else {
            return false;
        }
    }

    /**
     *  Determines if the activity can show while lock-screen is displayed. System displays
     *  activities while lock-screen is displayed only if all activities
     *  {@link #canShowWhenLocked(ActivityRecord)}.
     *  @see #canShowWhenLocked(ActivityRecord)
     */
    boolean canShowWhenLocked() {
        final TaskFragment taskFragment = getTaskFragment();
        if (taskFragment != null && taskFragment.getAdjacentTaskFragment() != null
                && taskFragment.isEmbedded()) {
            final TaskFragment adjacentTaskFragment = taskFragment.getAdjacentTaskFragment();
            final ActivityRecord r = adjacentTaskFragment.getTopNonFinishingActivity();
            return canShowWhenLocked(this) && canShowWhenLocked(r);
        } else {
            return canShowWhenLocked(this);
        }
    }

    /**
     * @return Whether we are allowed to show non-starting windows at the moment. We disallow
     *         showing windows during transitions in case we have windows that have wide-color-gamut