Loading services/core/java/com/android/server/wm/ActivityStack.java +1 −63 Original line number Diff line number Diff line Loading @@ -18,11 +18,8 @@ package com.android.server.wm; import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SPLIT_SCREEN; import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.PINNED_WINDOWING_MODE_ELEVATION_IN_DIP; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; Loading Loading @@ -142,13 +139,11 @@ import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.service.voice.IVoiceInteractionSession; import android.util.DisplayMetrics; import android.util.Log; import android.util.Slog; import android.util.proto.ProtoOutputStream; import android.view.Display; import android.view.DisplayInfo; import android.view.SurfaceControl; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; Loading @@ -157,7 +152,6 @@ import com.android.internal.os.logging.MetricsLoggerWrapper; import com.android.internal.util.function.pooled.PooledConsumer; import com.android.internal.util.function.pooled.PooledFunction; import com.android.internal.util.function.pooled.PooledLambda; import com.android.internal.util.function.pooled.PooledPredicate; import com.android.server.Watchdog; import com.android.server.am.ActivityManagerService; import com.android.server.am.ActivityManagerService.ItemMatcher; Loading Loading @@ -276,11 +270,6 @@ class ActivityStack extends Task { Rect mPreAnimationBounds = new Rect(); /** * For {@link #prepareSurfaces}. */ private final Point mLastSurfaceSize = new Point(); private final AnimatingActivityRegistry mAnimatingActivityRegistry = new AnimatingActivityRegistry(); Loading Loading @@ -606,10 +595,6 @@ class ActivityStack extends Task { super.onConfigurationChanged(newParentConfig); // Only need to update surface size here since the super method will handle updating // surface position. updateSurfaceSize(getPendingTransaction()); final TaskDisplayArea taskDisplayArea = getDisplayArea(); if (taskDisplayArea == null) { return; Loading Loading @@ -3262,61 +3247,14 @@ class ActivityStack extends Task { scheduleAnimation(); } /** * Calculate an amount by which to expand the stack bounds in each direction. * Used to make room for shadows in the pinned windowing mode. */ int getStackOutset() { // If we are drawing shadows on the task then don't outset the stack. if (mWmService.mRenderShadowsInCompositor) { return 0; } DisplayContent displayContent = getDisplayContent(); if (inPinnedWindowingMode() && displayContent != null) { final DisplayMetrics displayMetrics = displayContent.getDisplayMetrics(); // We multiply by two to match the client logic for converting view elevation // to insets, as in {@link WindowManager.LayoutParams#setSurfaceInsets} return (int) Math.ceil( mWmService.dipToPixel(PINNED_WINDOWING_MODE_ELEVATION_IN_DIP, displayMetrics) * 2); } return 0; } @Override void getRelativePosition(Point outPos) { super.getRelativePosition(outPos); final int outset = getStackOutset(); final int outset = getTaskOutset(); outPos.x -= outset; outPos.y -= outset; } private void updateSurfaceSize(SurfaceControl.Transaction transaction) { if (mSurfaceControl == null) { return; } final Rect stackBounds = getBounds(); int width = stackBounds.width(); int height = stackBounds.height(); final int outset = getStackOutset(); width += 2 * outset; height += 2 * outset; if (width == mLastSurfaceSize.x && height == mLastSurfaceSize.y) { return; } transaction.setWindowCrop(mSurfaceControl, width, height); mLastSurfaceSize.set(width, height); } @VisibleForTesting Point getLastSurfaceSize() { return mLastSurfaceSize; } @Override void onDisplayChanged(DisplayContent dc) { super.onDisplayChanged(dc); Loading services/core/java/com/android/server/wm/Task.java +57 −24 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Point; import android.graphics.Rect; import android.os.Debug; import android.os.IBinder; Loading Loading @@ -213,7 +214,6 @@ class Task extends WindowContainer<WindowContainer> { static final int INVALID_MIN_SIZE = -1; private float mShadowRadius = 0; private final Rect mLastSurfaceCrop = new Rect(); /** * The modes to control how the stack is moved to the front when calling {@link Task#reparent}. Loading Loading @@ -397,6 +397,7 @@ class Task extends WindowContainer<WindowContainer> { private Dimmer mDimmer = new Dimmer(this); private final Rect mTmpDimBoundsRect = new Rect(); private final Point mLastSurfaceSize = new Point(); /** @see #setCanAffectSystemUiFlags */ private boolean mCanAffectSystemUiFlags = true; Loading Loading @@ -1943,6 +1944,10 @@ class Task extends WindowContainer<WindowContainer> { mTmpPrevBounds.set(getBounds()); final boolean wasInMultiWindowMode = inMultiWindowMode(); super.onConfigurationChanged(newParentConfig); // Only need to update surface size here since the super method will handle updating // surface position. updateSurfaceSize(getPendingTransaction()); if (wasInMultiWindowMode != inMultiWindowMode()) { mStackSupervisor.scheduleUpdateMultiWindowMode(this); } Loading Loading @@ -1995,6 +2000,57 @@ class Task extends WindowContainer<WindowContainer> { return (prevWinMode == WINDOWING_MODE_FREEFORM) != (newWinMode == WINDOWING_MODE_FREEFORM); } void updateSurfaceSize(SurfaceControl.Transaction transaction) { if (mSurfaceControl == null || mCreatedByOrganizer) { return; } // Apply crop to root tasks only and clear the crops of the descendant tasks. int width = 0; int height = 0; if (isRootTask()) { final Rect taskBounds = getBounds(); width = taskBounds.width(); height = taskBounds.height(); final int outset = getTaskOutset(); width += 2 * outset; height += 2 * outset; } if (width == mLastSurfaceSize.x && height == mLastSurfaceSize.y) { return; } transaction.setWindowCrop(mSurfaceControl, width, height); mLastSurfaceSize.set(width, height); } /** * Calculate an amount by which to expand the task bounds in each direction. * Used to make room for shadows in the pinned windowing mode. */ int getTaskOutset() { // If we are drawing shadows on the task then don't outset the stack. if (mWmService.mRenderShadowsInCompositor) { return 0; } DisplayContent displayContent = getDisplayContent(); if (inPinnedWindowingMode() && displayContent != null) { final DisplayMetrics displayMetrics = displayContent.getDisplayMetrics(); // We multiply by two to match the client logic for converting view elevation // to insets, as in {@link WindowManager.LayoutParams#setSurfaceInsets} return (int) Math.ceil( mWmService.dipToPixel(PINNED_WINDOWING_MODE_ELEVATION_IN_DIP, displayMetrics) * 2); } return 0; } @VisibleForTesting Point getLastSurfaceSize() { return mLastSurfaceSize; } @VisibleForTesting boolean isInChangeTransition() { return mSurfaceFreezer.hasLeash() || AppTransition.isChangeTransit(mTransit); Loading Loading @@ -2813,28 +2869,6 @@ class Task extends WindowContainer<WindowContainer> { return boundsChange; } private void updateSurfaceCrop() { // Only update the crop if we are drawing shadows on the task. if (mSurfaceControl == null || !mWmService.mRenderShadowsInCompositor || !isRootTask()) { return; } if (inSplitScreenWindowingMode()) { // inherit crop from parent mTmpRect.setEmpty(); } else { getBounds(mTmpRect); } mTmpRect.offsetTo(0, 0); if (mLastSurfaceCrop.equals(mTmpRect)) { return; } getPendingTransaction().setWindowCrop(mSurfaceControl, mTmpRect); mLastSurfaceCrop.set(mTmpRect); } @Override public boolean onDescendantOrientationChanged(IBinder freezeDisplayToken, ConfigurationContainer requestingContainer) { Loading Loading @@ -3463,7 +3497,6 @@ class Task extends WindowContainer<WindowContainer> { mTmpDimBoundsRect.offsetTo(0, 0); } updateSurfaceCrop(); updateShadowsRadius(isFocused(), getPendingTransaction()); if (mDimmer.updateDims(getPendingTransaction(), mTmpDimBoundsRect)) { Loading services/core/java/com/android/server/wm/WindowState.java +1 −1 Original line number Diff line number Diff line Loading @@ -5289,7 +5289,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // to account for it. If we actually have shadows we will // then un-inset ourselves by the surfaceInsets. if (stack != null) { final int outset = stack.getStackOutset(); final int outset = stack.getTaskOutset(); outPoint.offset(outset, outset); } Loading services/tests/wmtests/src/com/android/server/wm/TaskStackTests.java +1 −1 Original line number Diff line number Diff line Loading @@ -186,7 +186,7 @@ public class TaskStackTests extends WindowTestsBase { final ActivityStack stack = createTaskStackOnDisplay(mDisplayContent); final int stackOutset = 10; spyOn(stack); doReturn(stackOutset).when(stack).getStackOutset(); doReturn(stackOutset).when(stack).getTaskOutset(); doReturn(true).when(stack).inMultiWindowMode(); // Mock the resolved override windowing mode to non-fullscreen Loading Loading
services/core/java/com/android/server/wm/ActivityStack.java +1 −63 Original line number Diff line number Diff line Loading @@ -18,11 +18,8 @@ package com.android.server.wm; import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SPLIT_SCREEN; import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.PINNED_WINDOWING_MODE_ELEVATION_IN_DIP; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; Loading Loading @@ -142,13 +139,11 @@ import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.service.voice.IVoiceInteractionSession; import android.util.DisplayMetrics; import android.util.Log; import android.util.Slog; import android.util.proto.ProtoOutputStream; import android.view.Display; import android.view.DisplayInfo; import android.view.SurfaceControl; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; Loading @@ -157,7 +152,6 @@ import com.android.internal.os.logging.MetricsLoggerWrapper; import com.android.internal.util.function.pooled.PooledConsumer; import com.android.internal.util.function.pooled.PooledFunction; import com.android.internal.util.function.pooled.PooledLambda; import com.android.internal.util.function.pooled.PooledPredicate; import com.android.server.Watchdog; import com.android.server.am.ActivityManagerService; import com.android.server.am.ActivityManagerService.ItemMatcher; Loading Loading @@ -276,11 +270,6 @@ class ActivityStack extends Task { Rect mPreAnimationBounds = new Rect(); /** * For {@link #prepareSurfaces}. */ private final Point mLastSurfaceSize = new Point(); private final AnimatingActivityRegistry mAnimatingActivityRegistry = new AnimatingActivityRegistry(); Loading Loading @@ -606,10 +595,6 @@ class ActivityStack extends Task { super.onConfigurationChanged(newParentConfig); // Only need to update surface size here since the super method will handle updating // surface position. updateSurfaceSize(getPendingTransaction()); final TaskDisplayArea taskDisplayArea = getDisplayArea(); if (taskDisplayArea == null) { return; Loading Loading @@ -3262,61 +3247,14 @@ class ActivityStack extends Task { scheduleAnimation(); } /** * Calculate an amount by which to expand the stack bounds in each direction. * Used to make room for shadows in the pinned windowing mode. */ int getStackOutset() { // If we are drawing shadows on the task then don't outset the stack. if (mWmService.mRenderShadowsInCompositor) { return 0; } DisplayContent displayContent = getDisplayContent(); if (inPinnedWindowingMode() && displayContent != null) { final DisplayMetrics displayMetrics = displayContent.getDisplayMetrics(); // We multiply by two to match the client logic for converting view elevation // to insets, as in {@link WindowManager.LayoutParams#setSurfaceInsets} return (int) Math.ceil( mWmService.dipToPixel(PINNED_WINDOWING_MODE_ELEVATION_IN_DIP, displayMetrics) * 2); } return 0; } @Override void getRelativePosition(Point outPos) { super.getRelativePosition(outPos); final int outset = getStackOutset(); final int outset = getTaskOutset(); outPos.x -= outset; outPos.y -= outset; } private void updateSurfaceSize(SurfaceControl.Transaction transaction) { if (mSurfaceControl == null) { return; } final Rect stackBounds = getBounds(); int width = stackBounds.width(); int height = stackBounds.height(); final int outset = getStackOutset(); width += 2 * outset; height += 2 * outset; if (width == mLastSurfaceSize.x && height == mLastSurfaceSize.y) { return; } transaction.setWindowCrop(mSurfaceControl, width, height); mLastSurfaceSize.set(width, height); } @VisibleForTesting Point getLastSurfaceSize() { return mLastSurfaceSize; } @Override void onDisplayChanged(DisplayContent dc) { super.onDisplayChanged(dc); Loading
services/core/java/com/android/server/wm/Task.java +57 −24 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Point; import android.graphics.Rect; import android.os.Debug; import android.os.IBinder; Loading Loading @@ -213,7 +214,6 @@ class Task extends WindowContainer<WindowContainer> { static final int INVALID_MIN_SIZE = -1; private float mShadowRadius = 0; private final Rect mLastSurfaceCrop = new Rect(); /** * The modes to control how the stack is moved to the front when calling {@link Task#reparent}. Loading Loading @@ -397,6 +397,7 @@ class Task extends WindowContainer<WindowContainer> { private Dimmer mDimmer = new Dimmer(this); private final Rect mTmpDimBoundsRect = new Rect(); private final Point mLastSurfaceSize = new Point(); /** @see #setCanAffectSystemUiFlags */ private boolean mCanAffectSystemUiFlags = true; Loading Loading @@ -1943,6 +1944,10 @@ class Task extends WindowContainer<WindowContainer> { mTmpPrevBounds.set(getBounds()); final boolean wasInMultiWindowMode = inMultiWindowMode(); super.onConfigurationChanged(newParentConfig); // Only need to update surface size here since the super method will handle updating // surface position. updateSurfaceSize(getPendingTransaction()); if (wasInMultiWindowMode != inMultiWindowMode()) { mStackSupervisor.scheduleUpdateMultiWindowMode(this); } Loading Loading @@ -1995,6 +2000,57 @@ class Task extends WindowContainer<WindowContainer> { return (prevWinMode == WINDOWING_MODE_FREEFORM) != (newWinMode == WINDOWING_MODE_FREEFORM); } void updateSurfaceSize(SurfaceControl.Transaction transaction) { if (mSurfaceControl == null || mCreatedByOrganizer) { return; } // Apply crop to root tasks only and clear the crops of the descendant tasks. int width = 0; int height = 0; if (isRootTask()) { final Rect taskBounds = getBounds(); width = taskBounds.width(); height = taskBounds.height(); final int outset = getTaskOutset(); width += 2 * outset; height += 2 * outset; } if (width == mLastSurfaceSize.x && height == mLastSurfaceSize.y) { return; } transaction.setWindowCrop(mSurfaceControl, width, height); mLastSurfaceSize.set(width, height); } /** * Calculate an amount by which to expand the task bounds in each direction. * Used to make room for shadows in the pinned windowing mode. */ int getTaskOutset() { // If we are drawing shadows on the task then don't outset the stack. if (mWmService.mRenderShadowsInCompositor) { return 0; } DisplayContent displayContent = getDisplayContent(); if (inPinnedWindowingMode() && displayContent != null) { final DisplayMetrics displayMetrics = displayContent.getDisplayMetrics(); // We multiply by two to match the client logic for converting view elevation // to insets, as in {@link WindowManager.LayoutParams#setSurfaceInsets} return (int) Math.ceil( mWmService.dipToPixel(PINNED_WINDOWING_MODE_ELEVATION_IN_DIP, displayMetrics) * 2); } return 0; } @VisibleForTesting Point getLastSurfaceSize() { return mLastSurfaceSize; } @VisibleForTesting boolean isInChangeTransition() { return mSurfaceFreezer.hasLeash() || AppTransition.isChangeTransit(mTransit); Loading Loading @@ -2813,28 +2869,6 @@ class Task extends WindowContainer<WindowContainer> { return boundsChange; } private void updateSurfaceCrop() { // Only update the crop if we are drawing shadows on the task. if (mSurfaceControl == null || !mWmService.mRenderShadowsInCompositor || !isRootTask()) { return; } if (inSplitScreenWindowingMode()) { // inherit crop from parent mTmpRect.setEmpty(); } else { getBounds(mTmpRect); } mTmpRect.offsetTo(0, 0); if (mLastSurfaceCrop.equals(mTmpRect)) { return; } getPendingTransaction().setWindowCrop(mSurfaceControl, mTmpRect); mLastSurfaceCrop.set(mTmpRect); } @Override public boolean onDescendantOrientationChanged(IBinder freezeDisplayToken, ConfigurationContainer requestingContainer) { Loading Loading @@ -3463,7 +3497,6 @@ class Task extends WindowContainer<WindowContainer> { mTmpDimBoundsRect.offsetTo(0, 0); } updateSurfaceCrop(); updateShadowsRadius(isFocused(), getPendingTransaction()); if (mDimmer.updateDims(getPendingTransaction(), mTmpDimBoundsRect)) { Loading
services/core/java/com/android/server/wm/WindowState.java +1 −1 Original line number Diff line number Diff line Loading @@ -5289,7 +5289,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // to account for it. If we actually have shadows we will // then un-inset ourselves by the surfaceInsets. if (stack != null) { final int outset = stack.getStackOutset(); final int outset = stack.getTaskOutset(); outPoint.offset(outset, outset); } Loading
services/tests/wmtests/src/com/android/server/wm/TaskStackTests.java +1 −1 Original line number Diff line number Diff line Loading @@ -186,7 +186,7 @@ public class TaskStackTests extends WindowTestsBase { final ActivityStack stack = createTaskStackOnDisplay(mDisplayContent); final int stackOutset = 10; spyOn(stack); doReturn(stackOutset).when(stack).getStackOutset(); doReturn(stackOutset).when(stack).getTaskOutset(); doReturn(true).when(stack).inMultiWindowMode(); // Mock the resolved override windowing mode to non-fullscreen Loading