diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index b8e350b753d2..84e62d44d61b 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -4157,19 +4157,40 @@ 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 * color mode set to avoid jank in the middle of the transition. |