Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java +20 −2 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Insets; import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.GradientDrawable; Loading @@ -37,10 +38,12 @@ import android.graphics.drawable.VectorDrawable; import android.os.Handler; import android.util.Size; import android.view.Choreographer; import android.view.InsetsState; import android.view.MotionEvent; import android.view.SurfaceControl; import android.view.View; import android.view.ViewConfiguration; import android.view.WindowInsets; import android.view.WindowManager; import android.window.WindowContainerTransaction; Loading Loading @@ -195,7 +198,8 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL RelayoutParams relayoutParams, ActivityManager.RunningTaskInfo taskInfo, boolean applyStartTransactionOnDraw, boolean setTaskCropAndPosition) { boolean setTaskCropAndPosition, InsetsState displayInsetsState) { relayoutParams.reset(); relayoutParams.mRunningTaskInfo = taskInfo; relayoutParams.mLayoutResId = R.layout.caption_window_decor; Loading Loading @@ -223,6 +227,8 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL controlsElement.mWidthResId = R.dimen.caption_right_buttons_width; controlsElement.mAlignment = RelayoutParams.OccludingCaptionElement.Alignment.END; relayoutParams.mOccludingCaptionElements.add(controlsElement); relayoutParams.mCaptionTopPadding = getTopPadding(relayoutParams, taskInfo.getConfiguration().windowConfiguration.getBounds(), displayInsetsState); } @SuppressLint("MissingPermission") Loading @@ -238,7 +244,7 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL final WindowContainerTransaction wct = new WindowContainerTransaction(); updateRelayoutParams(mRelayoutParams, taskInfo, applyStartTransactionOnDraw, setTaskCropAndPosition); setTaskCropAndPosition, mDisplayController.getInsetsState(taskInfo.displayId)); relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult); // After this line, mTaskInfo is up-to-date and should be used instead of taskInfo Loading Loading @@ -344,6 +350,18 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL mDragResizeListener = null; } private static int getTopPadding(RelayoutParams params, Rect taskBounds, InsetsState insetsState) { if (!params.mRunningTaskInfo.isFreeform()) { Insets systemDecor = insetsState.calculateInsets(taskBounds, WindowInsets.Type.systemBars() & ~WindowInsets.Type.captionBar(), false /* ignoreVisibility */); return systemDecor.top; } else { return 0; } } /** * Checks whether the touch event falls inside the customizable caption region. */ Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +8 −1 Original line number Diff line number Diff line Loading @@ -239,7 +239,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> outResult.mHeight = taskBounds.height(); outResult.mRootView.setTaskFocusState(mTaskInfo.isFocused); final Resources resources = mDecorWindowContext.getResources(); outResult.mCaptionHeight = loadDimensionPixelSize(resources, params.mCaptionHeightId); outResult.mCaptionHeight = loadDimensionPixelSize(resources, params.mCaptionHeightId) + params.mCaptionTopPadding; outResult.mCaptionWidth = params.mCaptionWidthId != Resources.ID_NULL ? loadDimensionPixelSize(resources, params.mCaptionWidthId) : taskBounds.width(); outResult.mCaptionX = (outResult.mWidth - outResult.mCaptionWidth) / 2; Loading Loading @@ -459,6 +460,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> } mViewHost.getRootSurfaceControl().applyTransactionOnDraw(onDrawTransaction); } outResult.mRootView.setPadding(0, params.mCaptionTopPadding, 0, 0); mViewHost.setView(outResult.mRootView, lp); Trace.endSection(); } else { Loading @@ -469,6 +471,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> } mViewHost.getRootSurfaceControl().applyTransactionOnDraw(onDrawTransaction); } outResult.mRootView.setPadding(0, params.mCaptionTopPadding, 0, 0); mViewHost.relayout(lp); Trace.endSection(); } Loading Loading @@ -700,6 +703,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> int mShadowRadiusId; int mCornerRadius; int mCaptionTopPadding; Configuration mWindowDecorConfig; boolean mApplyStartTransactionOnDraw; Loading @@ -716,6 +721,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mShadowRadiusId = Resources.ID_NULL; mCornerRadius = 0; mCaptionTopPadding = 0; mApplyStartTransactionOnDraw = false; mSetTaskPositionAndCrop = false; mWindowDecorConfig = null; Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/CaptionWindowDecorationTests.kt +7 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.app.WindowConfiguration import android.content.ComponentName import android.testing.AndroidTestingRunner import android.view.Display import android.view.InsetsState import android.view.WindowInsetsController import androidx.test.filters.SmallTest import com.android.wm.shell.ShellTestCase Loading @@ -45,7 +46,8 @@ class CaptionWindowDecorationTests : ShellTestCase() { relayoutParams, taskInfo, true, false false, InsetsState() ) Truth.assertThat(relayoutParams.hasInputFeatureSpy()).isTrue() Loading @@ -63,7 +65,8 @@ class CaptionWindowDecorationTests : ShellTestCase() { relayoutParams, taskInfo, true, false false, InsetsState() ) Truth.assertThat(relayoutParams.hasInputFeatureSpy()).isFalse() Loading @@ -77,7 +80,8 @@ class CaptionWindowDecorationTests : ShellTestCase() { relayoutParams, taskInfo, true, false false, InsetsState() ) Truth.assertThat(relayoutParams.mOccludingCaptionElements.size).isEqualTo(2) Truth.assertThat(relayoutParams.mOccludingCaptionElements[0].mAlignment).isEqualTo( Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +3 −0 Original line number Diff line number Diff line Loading @@ -867,6 +867,7 @@ public class WindowDecorationTests extends ShellTestCase { final TestWindowDecoration windowDecor = createWindowDecoration( new TestRunningTaskInfoBuilder().build()); mRelayoutParams.mApplyStartTransactionOnDraw = true; mRelayoutResult.mRootView = mMockView; windowDecor.updateViewHost(mRelayoutParams, mMockSurfaceControlStartT, mRelayoutResult); Loading @@ -878,6 +879,7 @@ public class WindowDecorationTests extends ShellTestCase { final TestWindowDecoration windowDecor = createWindowDecoration( new TestRunningTaskInfoBuilder().build()); mRelayoutParams.mApplyStartTransactionOnDraw = true; mRelayoutResult.mRootView = mMockView; assertThrows(IllegalArgumentException.class, () -> windowDecor.updateViewHost( Loading @@ -889,6 +891,7 @@ public class WindowDecorationTests extends ShellTestCase { final TestWindowDecoration windowDecor = createWindowDecoration( new TestRunningTaskInfoBuilder().build()); mRelayoutParams.mApplyStartTransactionOnDraw = false; mRelayoutResult.mRootView = mMockView; windowDecor.updateViewHost(mRelayoutParams, null /* onDrawTransaction */, mRelayoutResult); } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java +20 −2 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Insets; import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.GradientDrawable; Loading @@ -37,10 +38,12 @@ import android.graphics.drawable.VectorDrawable; import android.os.Handler; import android.util.Size; import android.view.Choreographer; import android.view.InsetsState; import android.view.MotionEvent; import android.view.SurfaceControl; import android.view.View; import android.view.ViewConfiguration; import android.view.WindowInsets; import android.view.WindowManager; import android.window.WindowContainerTransaction; Loading Loading @@ -195,7 +198,8 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL RelayoutParams relayoutParams, ActivityManager.RunningTaskInfo taskInfo, boolean applyStartTransactionOnDraw, boolean setTaskCropAndPosition) { boolean setTaskCropAndPosition, InsetsState displayInsetsState) { relayoutParams.reset(); relayoutParams.mRunningTaskInfo = taskInfo; relayoutParams.mLayoutResId = R.layout.caption_window_decor; Loading Loading @@ -223,6 +227,8 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL controlsElement.mWidthResId = R.dimen.caption_right_buttons_width; controlsElement.mAlignment = RelayoutParams.OccludingCaptionElement.Alignment.END; relayoutParams.mOccludingCaptionElements.add(controlsElement); relayoutParams.mCaptionTopPadding = getTopPadding(relayoutParams, taskInfo.getConfiguration().windowConfiguration.getBounds(), displayInsetsState); } @SuppressLint("MissingPermission") Loading @@ -238,7 +244,7 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL final WindowContainerTransaction wct = new WindowContainerTransaction(); updateRelayoutParams(mRelayoutParams, taskInfo, applyStartTransactionOnDraw, setTaskCropAndPosition); setTaskCropAndPosition, mDisplayController.getInsetsState(taskInfo.displayId)); relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult); // After this line, mTaskInfo is up-to-date and should be used instead of taskInfo Loading Loading @@ -344,6 +350,18 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL mDragResizeListener = null; } private static int getTopPadding(RelayoutParams params, Rect taskBounds, InsetsState insetsState) { if (!params.mRunningTaskInfo.isFreeform()) { Insets systemDecor = insetsState.calculateInsets(taskBounds, WindowInsets.Type.systemBars() & ~WindowInsets.Type.captionBar(), false /* ignoreVisibility */); return systemDecor.top; } else { return 0; } } /** * Checks whether the touch event falls inside the customizable caption region. */ Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +8 −1 Original line number Diff line number Diff line Loading @@ -239,7 +239,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> outResult.mHeight = taskBounds.height(); outResult.mRootView.setTaskFocusState(mTaskInfo.isFocused); final Resources resources = mDecorWindowContext.getResources(); outResult.mCaptionHeight = loadDimensionPixelSize(resources, params.mCaptionHeightId); outResult.mCaptionHeight = loadDimensionPixelSize(resources, params.mCaptionHeightId) + params.mCaptionTopPadding; outResult.mCaptionWidth = params.mCaptionWidthId != Resources.ID_NULL ? loadDimensionPixelSize(resources, params.mCaptionWidthId) : taskBounds.width(); outResult.mCaptionX = (outResult.mWidth - outResult.mCaptionWidth) / 2; Loading Loading @@ -459,6 +460,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> } mViewHost.getRootSurfaceControl().applyTransactionOnDraw(onDrawTransaction); } outResult.mRootView.setPadding(0, params.mCaptionTopPadding, 0, 0); mViewHost.setView(outResult.mRootView, lp); Trace.endSection(); } else { Loading @@ -469,6 +471,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> } mViewHost.getRootSurfaceControl().applyTransactionOnDraw(onDrawTransaction); } outResult.mRootView.setPadding(0, params.mCaptionTopPadding, 0, 0); mViewHost.relayout(lp); Trace.endSection(); } Loading Loading @@ -700,6 +703,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> int mShadowRadiusId; int mCornerRadius; int mCaptionTopPadding; Configuration mWindowDecorConfig; boolean mApplyStartTransactionOnDraw; Loading @@ -716,6 +721,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mShadowRadiusId = Resources.ID_NULL; mCornerRadius = 0; mCaptionTopPadding = 0; mApplyStartTransactionOnDraw = false; mSetTaskPositionAndCrop = false; mWindowDecorConfig = null; Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/CaptionWindowDecorationTests.kt +7 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.app.WindowConfiguration import android.content.ComponentName import android.testing.AndroidTestingRunner import android.view.Display import android.view.InsetsState import android.view.WindowInsetsController import androidx.test.filters.SmallTest import com.android.wm.shell.ShellTestCase Loading @@ -45,7 +46,8 @@ class CaptionWindowDecorationTests : ShellTestCase() { relayoutParams, taskInfo, true, false false, InsetsState() ) Truth.assertThat(relayoutParams.hasInputFeatureSpy()).isTrue() Loading @@ -63,7 +65,8 @@ class CaptionWindowDecorationTests : ShellTestCase() { relayoutParams, taskInfo, true, false false, InsetsState() ) Truth.assertThat(relayoutParams.hasInputFeatureSpy()).isFalse() Loading @@ -77,7 +80,8 @@ class CaptionWindowDecorationTests : ShellTestCase() { relayoutParams, taskInfo, true, false false, InsetsState() ) Truth.assertThat(relayoutParams.mOccludingCaptionElements.size).isEqualTo(2) Truth.assertThat(relayoutParams.mOccludingCaptionElements[0].mAlignment).isEqualTo( Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +3 −0 Original line number Diff line number Diff line Loading @@ -867,6 +867,7 @@ public class WindowDecorationTests extends ShellTestCase { final TestWindowDecoration windowDecor = createWindowDecoration( new TestRunningTaskInfoBuilder().build()); mRelayoutParams.mApplyStartTransactionOnDraw = true; mRelayoutResult.mRootView = mMockView; windowDecor.updateViewHost(mRelayoutParams, mMockSurfaceControlStartT, mRelayoutResult); Loading @@ -878,6 +879,7 @@ public class WindowDecorationTests extends ShellTestCase { final TestWindowDecoration windowDecor = createWindowDecoration( new TestRunningTaskInfoBuilder().build()); mRelayoutParams.mApplyStartTransactionOnDraw = true; mRelayoutResult.mRootView = mMockView; assertThrows(IllegalArgumentException.class, () -> windowDecor.updateViewHost( Loading @@ -889,6 +891,7 @@ public class WindowDecorationTests extends ShellTestCase { final TestWindowDecoration windowDecor = createWindowDecoration( new TestRunningTaskInfoBuilder().build()); mRelayoutParams.mApplyStartTransactionOnDraw = false; mRelayoutResult.mRootView = mMockView; windowDecor.updateViewHost(mRelayoutParams, null /* onDrawTransaction */, mRelayoutResult); } Loading