From e76407c7f3403530b4cb96de324f6194b2011010 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Mon, 16 May 2016 17:04:37 -0700 Subject: [PATCH] Make Recents activity invisible when it is behind a translucent activity We don't want the recents activity to be visible behind a translucent fullscreen activity. Instead we want to show the home activity behind the translucent activity. Bug: 28246419 Change-Id: I0364a592d7d84c88b39b359431492d0395b0f051 --- .../com/android/server/am/ActivityStack.java | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 843720e2a001a..d5878ad10c080 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1725,13 +1725,9 @@ final class ActivityStack { continue; } aboveTop = false; - // mLaunchingBehind: Activities launching behind are at the back of the task stack - // but must be drawn initially for the animation as though they were visible. - final boolean activityVisibleBehind = - (behindTranslucentActivity || stackVisibleBehind) && visibleBehind == r; - final boolean isVisible = (!behindFullscreenActivity || r.mLaunchTaskBehind - || activityVisibleBehind) && okToShowLocked(r); - if (isVisible) { + + if (shouldBeVisible(r, behindTranslucentActivity, stackVisibleBehind, + visibleBehind, behindFullscreenActivity)) { if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Make visible? " + r + " finishing=" + r.finishing + " state=" + r.state); // First: if this is not the current activity being started, make @@ -1819,6 +1815,31 @@ final class ActivityStack { } } + /** Return true if the input activity should be made visible */ + private boolean shouldBeVisible(ActivityRecord r, boolean behindTranslucentActivity, + boolean stackVisibleBehind, ActivityRecord visibleBehind, + boolean behindFullscreenActivity) { + // mLaunchingBehind: Activities launching behind are at the back of the task stack + // but must be drawn initially for the animation as though they were visible. + final boolean activityVisibleBehind = + (behindTranslucentActivity || stackVisibleBehind) && visibleBehind == r; + + if (!okToShowLocked(r)) { + return false; + } + + boolean isVisible = + !behindFullscreenActivity || r.mLaunchTaskBehind || activityVisibleBehind; + + if (isVisible && r.isRecentsActivity()) { + // Recents activity can only be visible if the home stack isn't fullscreen or is the + // focused stack. + isVisible = !mFullscreen || mStackSupervisor.isFocusedStack(this); + } + + return isVisible; + } + private void checkTranslucentActivityWaiting(ActivityRecord top) { if (mTranslucentActivityWaiting != top) { mUndrawnActivitiesBelowTopTranslucent.clear();