summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2016-04-18 04:19:34 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-04-18 04:19:36 +0000
commit02ebaa02c41050b7223b9ec772da669810bff43b (patch)
tree43b16f02de410585fd6d91765ce3abb12c12a662
parent4b6dfc2ef54723768a67887ce2a42d4f8f64d0f4 (diff)
parent43896cffe69ffb70ed4d8248c81c9c25f69a7540 (diff)
Merge "Don't allow pinned activities to request visible behind" into nyc-dev
-rw-r--r--core/java/android/app/ActivityManager.java8
-rw-r--r--services/core/java/com/android/server/am/ActivityStackSupervisor.java14
2 files changed, 22 insertions, 0 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 631a1293cdc0..424d3557a5aa 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -675,6 +675,14 @@ public class ActivityManager {
return isStaticStack(stackId) || stackId == PINNED_STACK_ID
|| stackId == FREEFORM_WORKSPACE_STACK_ID || stackId == DOCKED_STACK_ID;
}
+
+ /**
+ * Returns true if activities contained in this stack can request visible behind by
+ * calling {@link Activity#requestVisibleBehind}.
+ */
+ public static boolean activitiesCanRequestVisibleBehind(int stackId) {
+ return stackId == FULLSCREEN_WORKSPACE_STACK_ID;
+ }
}
/**
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 865ee092cf02..6e2cebbc196f 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -2430,6 +2430,12 @@ public final class ActivityStackSupervisor implements DisplayListener {
try {
final TaskRecord task = r.task;
+ if (r == task.stack.getVisibleBehindActivity()) {
+ // An activity can't be pinned and visible behind at the same time. Go ahead and
+ // release it from been visible behind before pinning.
+ requestVisibleBehindLocked(r, false);
+ }
+
// Need to make sure the pinned stack exist so we can resize it below...
final ActivityStack stack = getStack(PINNED_STACK_ID, CREATE_IF_NEEDED, ON_TOP);
@@ -2689,6 +2695,14 @@ public final class ActivityStackSupervisor implements DisplayListener {
"requestVisibleBehind: r=" + r + " visible=" + visible + " stack is null");
return false;
}
+
+ if (visible && !StackId.activitiesCanRequestVisibleBehind(stack.mStackId)) {
+ if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: r=" + r
+ + " visible=" + visible + " stackId=" + stack.mStackId
+ + " can't contain visible behind activities");
+ return false;
+ }
+
final boolean isVisible = stack.hasVisibleBehindActivity();
if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND,
"requestVisibleBehind r=" + r + " visible=" + visible + " isVisible=" + isVisible);