diff options
| author | 2024-08-28 12:21:16 +0000 | |
|---|---|---|
| committer | 2024-09-10 16:02:50 +0000 | |
| commit | 0d323f1d8c864689f5d197672b3d42039edf0fef (patch) | |
| tree | 7fc52490d78f1751cef82306d61f88d991ab38de | |
| parent | d6f61590c35d1a780c0829e67ca60661727b2f8c (diff) | |
Refactor dimmer getter
To avoid code duplication in next cls
Test: Manual, verify correctness of dimming on closing activities with
dim
Bug: 327332488
Flag: com.android.window.flags.use_tasks_dim_only
Change-Id: I9d816c213d0cf7a7adc32ebbbf843e35ea734d47
4 files changed, 33 insertions, 23 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 8c93b4fe447c..3bb273c55f55 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3192,13 +3192,6 @@ class Task extends TaskFragment { return "Task=" + mTaskId; } - WindowContainer<?> getDimmerParent() { - if (!inMultiWindowMode() && isTranslucentForTransition()) { - return getRootDisplayArea(); - } - return this; - } - @Deprecated @Override Dimmer getDimmer() { @@ -3222,6 +3215,13 @@ class Task extends TaskFragment { return mDimmer; } + boolean isSuitableForDimming() { + // If the window is in multi-window mode, we want to dim at the Task level to ensure the dim + // bounds match the area the app lives in. + // If translucent, we will move the dim to the display area + return inMultiWindowMode() || !isTranslucentAndVisible(); + } + @Override void prepareSurfaces() { mDimmer.resetDimStates(); diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index e6226ab6786d..44e07cf50ab5 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -484,12 +484,8 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { boolean canApplyDim(@NonNull Task task) { if (mTransientLaunches == null) return true; if (Flags.useTasksDimOnly()) { - WindowContainer<?> dimmerParent = task.getDimmerParent(); - if (dimmerParent == null) { - return false; - } - // Always allow to dim if the host only affects its task. - if (dimmerParent.asTask() == task) { + if (task.isSuitableForDimming()) { + // Always allow to dim if the dimming occurs at task level (dim parented to task) return true; } } else { diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 256d0c661634..f0022e6295a8 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -5196,14 +5196,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP Dimmer dimmer; WindowContainer<?> geometryParent = task; if (Flags.useTasksDimOnly()) { - if (task != null) { - geometryParent = task.getDimmerParent(); - dimmer = task.mDimmer; - } else { - RootDisplayArea displayArea = getRootDisplayArea(); - geometryParent = displayArea; - dimmer = displayArea != null ? displayArea.getDimmer() : null; - } + geometryParent = getDimParent(); + dimmer = getDimController(); if (dimmer == null) { ProtoLog.e(WM_DEBUG_DIMMER, "WindowState %s does not have task or" + " display area for dimming", this); @@ -5221,6 +5215,26 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } + private Dimmer getDimController() { + Task task = getTask(); + if (task != null) { + return task.mDimmer; + } + RootDisplayArea displayArea = getRootDisplayArea(); + if (displayArea != null) { + return displayArea.getDimmer(); + } + return null; + } + + private WindowContainer<?> getDimParent() { + Task task = getTask(); + if (task != null && task.isSuitableForDimming()) { + return task; + } + return getRootDisplayArea(); + } + private boolean shouldDrawBlurBehind() { return (mAttrs.flags & FLAG_BLUR_BEHIND) != 0 && mWmService.mBlurController.getBlurEnabled(); diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java index 52a80b01971d..cc327d60fd79 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java @@ -1590,10 +1590,10 @@ public class TransitionTests extends WindowTestsBase { }); assertTrue(activity1.isVisible()); doReturn(false).when(task1).isTranslucent(null); - doReturn(false).when(task1).isTranslucentForTransition(); + doReturn(false).when(task1).isTranslucentAndVisible(); assertTrue(controller.canApplyDim(task1)); doReturn(true).when(task1).isTranslucent(null); - doReturn(true).when(task1).isTranslucentForTransition(); + doReturn(true).when(task1).isTranslucentAndVisible(); assertFalse(controller.canApplyDim(task1)); controller.finishTransition(ActionChain.testFinish(closeTransition)); |