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
This commit is contained in:
Wale Ogunwale
2016-05-16 17:04:37 -07:00
parent 5a68af3840
commit e76407c7f3

View File

@@ -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();