summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/Task.java2
-rw-r--r--services/core/java/com/android/server/wm/TaskFragment.java3
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java5
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java5
4 files changed, 15 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 1353ff09b292..e16d869fdcd9 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -3751,9 +3751,11 @@ class Task extends TaskFragment {
// Boost the adjacent TaskFragment for dimmer if needed.
final TaskFragment taskFragment = wc.asTaskFragment();
if (taskFragment != null && taskFragment.isEmbedded()) {
+ taskFragment.mDimmerSurfaceBoosted = false;
final TaskFragment adjacentTf = taskFragment.getAdjacentTaskFragment();
if (adjacentTf != null && adjacentTf.shouldBoostDimmer()) {
adjacentTf.assignLayer(t, layer++);
+ adjacentTf.mDimmerSurfaceBoosted = true;
}
}
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 78ababc6473f..a818a721f964 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -216,6 +216,9 @@ class TaskFragment extends WindowContainer<WindowContainer> {
Dimmer mDimmer = Dimmer.DIMMER_REFACTOR
? new SmoothDimmer(this) : new LegacyDimmer(this);
+ /** {@code true} if the dimmer surface is boosted. {@code false} otherwise. */
+ boolean mDimmerSurfaceBoosted;
+
/** Apply the dim layer on the embedded TaskFragment. */
static final int EMBEDDED_DIM_AREA_TASK_FRAGMENT = 0;
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index ae5a5cb7316c..e011c07b3434 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -9214,6 +9214,11 @@ public class WindowManagerService extends IWindowManager.Stub
return false;
}
+ if (taskFragment.mDimmerSurfaceBoosted) {
+ // Skip if the TaskFragment currently has dimmer surface boosted.
+ return false;
+ }
+
final ActivityRecord topActivity =
taskFragment.getTask().topRunningActivity(true /* focusableOnly */);
if (topActivity == null || topActivity == focusedWindow.mActivityRecord) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
index 01bd96b8a772..5360a1033eb4 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
@@ -896,6 +896,11 @@ public class TaskFragmentTest extends WindowTestsBase {
assertFalse(mWm.moveFocusToTopEmbeddedWindow(winRightTop));
// The focus should NOT change.
assertEquals(winRightTop, mDisplayContent.mCurrentFocus);
+
+ // Do not move focus if the dim is boosted.
+ taskFragmentLeft.mDimmerSurfaceBoosted = true;
+ assertFalse(mWm.moveFocusToTopEmbeddedWindow(winLeftTop));
+ assertEquals(winRightTop, mDisplayContent.mCurrentFocus);
}
}