Loading services/core/java/com/android/server/wm/AppWindowToken.java +11 −0 Original line number Diff line number Diff line Loading @@ -1573,6 +1573,17 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree return null; } int getLowestAnimLayer() { for (int i = 0; i < mChildren.size(); i++) { final WindowState w = mChildren.get(i); if (w.mRemoved) { continue; } return w.mWinAnimator.mAnimLayer; } return Integer.MAX_VALUE; } WindowState getHighestAnimLayerWindow(WindowState currentTarget) { WindowState candidate = null; for (int i = mChildren.indexOf(currentTarget); i >= 0; i--) { Loading services/core/java/com/android/server/wm/DimLayer.java +6 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,12 @@ public class DimLayer { boolean isAttachedToDisplay(); /** Gets the bounds of the dim layer user. */ void getDimBounds(Rect outBounds); /** Returns the layer to place a dim layer. */ default int getLayerForDim(WindowStateAnimator animator, int layerOffset, int defaultLayer) { return defaultLayer; } String toShortString(); } /** The user of this dim layer. */ Loading services/core/java/com/android/server/wm/DimLayerController.java +2 −1 Original line number Diff line number Diff line Loading @@ -261,7 +261,8 @@ class DimLayerController { dimLayer = state.animator.mAnimLayer + LAYER_OFFSET_DIM; dimAmount = DEFAULT_DIM_AMOUNT_DEAD_WINDOW; } else { dimLayer = state.animator.mAnimLayer - LAYER_OFFSET_DIM; dimLayer = dimLayerUser.getLayerForDim(state.animator, LAYER_OFFSET_DIM, state.animator.mAnimLayer - LAYER_OFFSET_DIM); dimAmount = state.animator.mWin.mAttrs.dimAmount; } } Loading services/core/java/com/android/server/wm/Task.java +15 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_LANDSC import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PORTRAIT_ONLY; import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PRESERVE_ORIENTATION; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static com.android.server.EventLogTags.WM_TASK_REMOVED; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; Loading @@ -39,6 +41,7 @@ import android.view.DisplayInfo; import android.view.Surface; import com.android.internal.annotations.VisibleForTesting; import com.android.server.wm.DimLayer.DimLayerUser; import java.io.PrintWriter; import java.util.function.Consumer; Loading Loading @@ -637,6 +640,18 @@ class Task extends WindowContainer<AppWindowToken> implements DimLayer.DimLayerU return isFullscreen(); } @Override public int getLayerForDim(WindowStateAnimator animator, int layerOffset, int defaultLayer) { // If the dim layer is for a starting window, move the dim layer back in the z-order behind // the lowest activity window to ensure it does not occlude the main window if it is // translucent final AppWindowToken appToken = animator.mWin.mAppToken; if (animator.mAttrType == TYPE_APPLICATION_STARTING && hasChild(appToken) ) { return Math.min(defaultLayer, appToken.getLowestAnimLayer() - layerOffset); } return defaultLayer; } boolean isFullscreen() { if (useCurrentBounds()) { return mFillsParent; Loading services/core/java/com/android/server/wm/TaskSnapshotSurface.java +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.graphics.Color.WHITE; import static android.graphics.Color.alpha; import static android.view.SurfaceControl.HIDDEN; import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND; import static android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; import static android.view.WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES; import static android.view.WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE; Loading Loading @@ -159,6 +160,7 @@ class TaskSnapshotSurface implements StartingSurface { windowFlags = mainWindow.getAttrs().flags; windowPrivateFlags = mainWindow.getAttrs().privateFlags; layoutParams.dimAmount = mainWindow.getAttrs().dimAmount; layoutParams.type = TYPE_APPLICATION_STARTING; layoutParams.format = snapshot.getSnapshot().getFormat(); layoutParams.flags = (windowFlags & ~FLAG_INHERIT_EXCLUDES) Loading Loading
services/core/java/com/android/server/wm/AppWindowToken.java +11 −0 Original line number Diff line number Diff line Loading @@ -1573,6 +1573,17 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree return null; } int getLowestAnimLayer() { for (int i = 0; i < mChildren.size(); i++) { final WindowState w = mChildren.get(i); if (w.mRemoved) { continue; } return w.mWinAnimator.mAnimLayer; } return Integer.MAX_VALUE; } WindowState getHighestAnimLayerWindow(WindowState currentTarget) { WindowState candidate = null; for (int i = mChildren.indexOf(currentTarget); i >= 0; i--) { Loading
services/core/java/com/android/server/wm/DimLayer.java +6 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,12 @@ public class DimLayer { boolean isAttachedToDisplay(); /** Gets the bounds of the dim layer user. */ void getDimBounds(Rect outBounds); /** Returns the layer to place a dim layer. */ default int getLayerForDim(WindowStateAnimator animator, int layerOffset, int defaultLayer) { return defaultLayer; } String toShortString(); } /** The user of this dim layer. */ Loading
services/core/java/com/android/server/wm/DimLayerController.java +2 −1 Original line number Diff line number Diff line Loading @@ -261,7 +261,8 @@ class DimLayerController { dimLayer = state.animator.mAnimLayer + LAYER_OFFSET_DIM; dimAmount = DEFAULT_DIM_AMOUNT_DEAD_WINDOW; } else { dimLayer = state.animator.mAnimLayer - LAYER_OFFSET_DIM; dimLayer = dimLayerUser.getLayerForDim(state.animator, LAYER_OFFSET_DIM, state.animator.mAnimLayer - LAYER_OFFSET_DIM); dimAmount = state.animator.mWin.mAttrs.dimAmount; } } Loading
services/core/java/com/android/server/wm/Task.java +15 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_LANDSC import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PORTRAIT_ONLY; import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZABLE_PRESERVE_ORIENTATION; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static com.android.server.EventLogTags.WM_TASK_REMOVED; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; Loading @@ -39,6 +41,7 @@ import android.view.DisplayInfo; import android.view.Surface; import com.android.internal.annotations.VisibleForTesting; import com.android.server.wm.DimLayer.DimLayerUser; import java.io.PrintWriter; import java.util.function.Consumer; Loading Loading @@ -637,6 +640,18 @@ class Task extends WindowContainer<AppWindowToken> implements DimLayer.DimLayerU return isFullscreen(); } @Override public int getLayerForDim(WindowStateAnimator animator, int layerOffset, int defaultLayer) { // If the dim layer is for a starting window, move the dim layer back in the z-order behind // the lowest activity window to ensure it does not occlude the main window if it is // translucent final AppWindowToken appToken = animator.mWin.mAppToken; if (animator.mAttrType == TYPE_APPLICATION_STARTING && hasChild(appToken) ) { return Math.min(defaultLayer, appToken.getLowestAnimLayer() - layerOffset); } return defaultLayer; } boolean isFullscreen() { if (useCurrentBounds()) { return mFillsParent; Loading
services/core/java/com/android/server/wm/TaskSnapshotSurface.java +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.graphics.Color.WHITE; import static android.graphics.Color.alpha; import static android.view.SurfaceControl.HIDDEN; import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND; import static android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; import static android.view.WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES; import static android.view.WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE; Loading Loading @@ -159,6 +160,7 @@ class TaskSnapshotSurface implements StartingSurface { windowFlags = mainWindow.getAttrs().flags; windowPrivateFlags = mainWindow.getAttrs().privateFlags; layoutParams.dimAmount = mainWindow.getAttrs().dimAmount; layoutParams.type = TYPE_APPLICATION_STARTING; layoutParams.format = snapshot.getSnapshot().getFormat(); layoutParams.flags = (windowFlags & ~FLAG_INHERIT_EXCLUDES) Loading