Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java +2 −1 Original line number Diff line number Diff line Loading @@ -64,7 +64,8 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL Handler handler, Choreographer choreographer, SyncTransactionQueue syncQueue) { super(context, displayController, taskOrganizer, taskInfo, taskSurface); super(context, displayController, taskOrganizer, taskInfo, taskSurface, taskInfo.getConfiguration()); mHandler = handler; mChoreographer = choreographer; Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +11 −12 Original line number Diff line number Diff line Loading @@ -104,11 +104,12 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo, SurfaceControl taskSurface, Configuration windowDecorConfig, Handler handler, Choreographer choreographer, SyncTransactionQueue syncQueue, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) { super(context, displayController, taskOrganizer, taskInfo, taskSurface); super(context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig); mHandler = handler; mChoreographer = choreographer; Loading @@ -118,17 +119,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin loadAppInfo(); } @Override protected Configuration getConfigurationWithOverrides( ActivityManager.RunningTaskInfo taskInfo) { Configuration configuration = taskInfo.getConfiguration(); if (DesktopTasksController.isDesktopDensityOverrideSet()) { // Density is overridden for desktop tasks. Keep system density for window decoration. configuration.densityDpi = mContext.getResources().getConfiguration().densityDpi; } return configuration; } void setCaptionListeners( View.OnClickListener onCaptionButtonClickListener, View.OnTouchListener onCaptionTouchListener, Loading Loading @@ -194,6 +184,10 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mRelayoutParams.mShadowRadiusId = shadowRadiusID; mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw; mRelayoutParams.mWindowDecorConfig = DesktopTasksController.isDesktopDensityOverrideSet() ? mContext.getResources().getConfiguration() // Use system context : mTaskInfo.configuration; // Use task configuration mRelayoutParams.mCornerRadius = (int) ScreenDecorationsUtils.getWindowCornerRadius(mContext); relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult); Loading Loading @@ -614,12 +608,17 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin Choreographer choreographer, SyncTransactionQueue syncQueue, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) { final Configuration windowDecorConfig = DesktopTasksController.isDesktopDensityOverrideSet() ? context.getResources().getConfiguration() // Use system context : taskInfo.configuration; // Use task configuration return new DesktopModeWindowDecoration( context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig, handler, choreographer, syncQueue, Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +17 −17 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> SurfaceControl mCaptionContainerSurface; private WindowlessWindowManager mCaptionWindowManager; private SurfaceControlViewHost mViewHost; private Configuration mWindowDecorConfig; private final Binder mOwner = new Binder(); private final Rect mCaptionInsetsRect = new Rect(); Loading @@ -125,8 +126,9 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> DisplayController displayController, ShellTaskOrganizer taskOrganizer, RunningTaskInfo taskInfo, SurfaceControl taskSurface) { this(context, displayController, taskOrganizer, taskInfo, taskSurface, SurfaceControl taskSurface, Configuration windowDecorConfig) { this(context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig, SurfaceControl.Builder::new, SurfaceControl.Transaction::new, WindowContainerTransaction::new, new SurfaceControlViewHostFactory() {}); } Loading @@ -137,6 +139,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> ShellTaskOrganizer taskOrganizer, RunningTaskInfo taskInfo, SurfaceControl taskSurface, Configuration windowDecorConfig, Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier, Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier, Supplier<WindowContainerTransaction> windowContainerTransactionSupplier, Loading @@ -152,17 +155,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mSurfaceControlViewHostFactory = surfaceControlViewHostFactory; mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId); mDecorWindowContext = mContext.createConfigurationContext( getConfigurationWithOverrides(mTaskInfo)); } /** * Get {@link Configuration} from supplied {@link RunningTaskInfo}. * * Allows values to be overridden before returning the configuration. */ protected Configuration getConfigurationWithOverrides(RunningTaskInfo taskInfo) { return taskInfo.getConfiguration(); mWindowDecorConfig = windowDecorConfig; mDecorWindowContext = mContext.createConfigurationContext(mWindowDecorConfig); } /** Loading @@ -179,7 +173,6 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> RelayoutResult<T> outResult) { outResult.reset(); final Configuration oldTaskConfig = mTaskInfo.getConfiguration(); if (params.mRunningTaskInfo != null) { mTaskInfo = params.mRunningTaskInfo; } Loading @@ -198,8 +191,11 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> outResult.mRootView = rootView; rootView = null; // Clear it just in case we use it accidentally final Configuration taskConfig = getConfigurationWithOverrides(mTaskInfo); if (oldTaskConfig.densityDpi != taskConfig.densityDpi final int oldDensityDpi = mWindowDecorConfig.densityDpi; mWindowDecorConfig = params.mWindowDecorConfig != null ? params.mWindowDecorConfig : mTaskInfo.getConfiguration(); if (oldDensityDpi != mWindowDecorConfig.densityDpi || mDisplay == null || mDisplay.getDisplayId() != mTaskInfo.displayId || oldLayoutResId != mLayoutResId) { Loading @@ -209,7 +205,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> outResult.mRootView = null; return; } mDecorWindowContext = mContext.createConfigurationContext(taskConfig); mDecorWindowContext = mContext.createConfigurationContext(mWindowDecorConfig); if (params.mLayoutResId != 0) { outResult.mRootView = (T) LayoutInflater.from(mDecorWindowContext) .inflate(params.mLayoutResId, null); Loading @@ -222,6 +218,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> } final Resources resources = mDecorWindowContext.getResources(); final Configuration taskConfig = mTaskInfo.getConfiguration(); final Rect taskBounds = taskConfig.windowConfiguration.getBounds(); outResult.mWidth = taskBounds.width(); outResult.mHeight = taskBounds.height(); Loading Loading @@ -470,6 +467,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> int mCaptionX; int mCaptionY; Configuration mWindowDecorConfig; boolean mApplyStartTransactionOnDraw; void reset() { Loading @@ -484,6 +483,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mCaptionY = 0; mApplyStartTransactionOnDraw = false; mWindowDecorConfig = null; } } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +8 −3 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Point; Loading Loading @@ -116,6 +117,7 @@ public class WindowDecorationTests extends ShellTestCase { private SurfaceControl.Transaction mMockSurfaceControlFinishT; private SurfaceControl.Transaction mMockSurfaceControlAddWindowT; private WindowDecoration.RelayoutParams mRelayoutParams = new WindowDecoration.RelayoutParams(); private Configuration mWindowConfiguration = new Configuration(); private int mCaptionMenuWidthId; private int mCaptionMenuShadowRadiusId; private int mCaptionMenuCornerRadiusId; Loading Loading @@ -296,6 +298,7 @@ public class WindowDecorationTests extends ShellTestCase { taskInfo.isFocused = true; // Density is 2. Shadow radius is 10px. Caption height is 64px. taskInfo.configuration.densityDpi = DisplayMetrics.DENSITY_DEFAULT * 2; mWindowConfiguration.densityDpi = taskInfo.configuration.densityDpi; final SurfaceControl taskSurface = mock(SurfaceControl.class); final TestWindowDecoration windowDecor = createWindowDecoration(taskInfo, taskSurface); Loading Loading @@ -516,7 +519,7 @@ public class WindowDecorationTests extends ShellTestCase { private TestWindowDecoration createWindowDecoration( ActivityManager.RunningTaskInfo taskInfo, SurfaceControl testSurface) { return new TestWindowDecoration(mContext, mMockDisplayController, mMockShellTaskOrganizer, taskInfo, testSurface, taskInfo, testSurface, mWindowConfiguration, new MockObjectSupplier<>(mMockSurfaceControlBuilders, () -> createMockSurfaceControlBuilder(mock(SurfaceControl.class))), new MockObjectSupplier<>(mMockSurfaceControlTransactions, Loading Loading @@ -556,13 +559,15 @@ public class WindowDecorationTests extends ShellTestCase { TestWindowDecoration(Context context, DisplayController displayController, ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo, SurfaceControl taskSurface, Configuration windowConfiguration, Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier, Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier, Supplier<WindowContainerTransaction> windowContainerTransactionSupplier, SurfaceControlViewHostFactory surfaceControlViewHostFactory) { super(context, displayController, taskOrganizer, taskInfo, taskSurface, surfaceControlBuilderSupplier, surfaceControlTransactionSupplier, windowContainerTransactionSupplier, surfaceControlViewHostFactory); windowConfiguration, surfaceControlBuilderSupplier, surfaceControlTransactionSupplier, windowContainerTransactionSupplier, surfaceControlViewHostFactory); } @Override Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java +2 −1 Original line number Diff line number Diff line Loading @@ -64,7 +64,8 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL Handler handler, Choreographer choreographer, SyncTransactionQueue syncQueue) { super(context, displayController, taskOrganizer, taskInfo, taskSurface); super(context, displayController, taskOrganizer, taskInfo, taskSurface, taskInfo.getConfiguration()); mHandler = handler; mChoreographer = choreographer; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +11 −12 Original line number Diff line number Diff line Loading @@ -104,11 +104,12 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo, SurfaceControl taskSurface, Configuration windowDecorConfig, Handler handler, Choreographer choreographer, SyncTransactionQueue syncQueue, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) { super(context, displayController, taskOrganizer, taskInfo, taskSurface); super(context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig); mHandler = handler; mChoreographer = choreographer; Loading @@ -118,17 +119,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin loadAppInfo(); } @Override protected Configuration getConfigurationWithOverrides( ActivityManager.RunningTaskInfo taskInfo) { Configuration configuration = taskInfo.getConfiguration(); if (DesktopTasksController.isDesktopDensityOverrideSet()) { // Density is overridden for desktop tasks. Keep system density for window decoration. configuration.densityDpi = mContext.getResources().getConfiguration().densityDpi; } return configuration; } void setCaptionListeners( View.OnClickListener onCaptionButtonClickListener, View.OnTouchListener onCaptionTouchListener, Loading Loading @@ -194,6 +184,10 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mRelayoutParams.mShadowRadiusId = shadowRadiusID; mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw; mRelayoutParams.mWindowDecorConfig = DesktopTasksController.isDesktopDensityOverrideSet() ? mContext.getResources().getConfiguration() // Use system context : mTaskInfo.configuration; // Use task configuration mRelayoutParams.mCornerRadius = (int) ScreenDecorationsUtils.getWindowCornerRadius(mContext); relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult); Loading Loading @@ -614,12 +608,17 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin Choreographer choreographer, SyncTransactionQueue syncQueue, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) { final Configuration windowDecorConfig = DesktopTasksController.isDesktopDensityOverrideSet() ? context.getResources().getConfiguration() // Use system context : taskInfo.configuration; // Use task configuration return new DesktopModeWindowDecoration( context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig, handler, choreographer, syncQueue, Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +17 −17 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> SurfaceControl mCaptionContainerSurface; private WindowlessWindowManager mCaptionWindowManager; private SurfaceControlViewHost mViewHost; private Configuration mWindowDecorConfig; private final Binder mOwner = new Binder(); private final Rect mCaptionInsetsRect = new Rect(); Loading @@ -125,8 +126,9 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> DisplayController displayController, ShellTaskOrganizer taskOrganizer, RunningTaskInfo taskInfo, SurfaceControl taskSurface) { this(context, displayController, taskOrganizer, taskInfo, taskSurface, SurfaceControl taskSurface, Configuration windowDecorConfig) { this(context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig, SurfaceControl.Builder::new, SurfaceControl.Transaction::new, WindowContainerTransaction::new, new SurfaceControlViewHostFactory() {}); } Loading @@ -137,6 +139,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> ShellTaskOrganizer taskOrganizer, RunningTaskInfo taskInfo, SurfaceControl taskSurface, Configuration windowDecorConfig, Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier, Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier, Supplier<WindowContainerTransaction> windowContainerTransactionSupplier, Loading @@ -152,17 +155,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mSurfaceControlViewHostFactory = surfaceControlViewHostFactory; mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId); mDecorWindowContext = mContext.createConfigurationContext( getConfigurationWithOverrides(mTaskInfo)); } /** * Get {@link Configuration} from supplied {@link RunningTaskInfo}. * * Allows values to be overridden before returning the configuration. */ protected Configuration getConfigurationWithOverrides(RunningTaskInfo taskInfo) { return taskInfo.getConfiguration(); mWindowDecorConfig = windowDecorConfig; mDecorWindowContext = mContext.createConfigurationContext(mWindowDecorConfig); } /** Loading @@ -179,7 +173,6 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> RelayoutResult<T> outResult) { outResult.reset(); final Configuration oldTaskConfig = mTaskInfo.getConfiguration(); if (params.mRunningTaskInfo != null) { mTaskInfo = params.mRunningTaskInfo; } Loading @@ -198,8 +191,11 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> outResult.mRootView = rootView; rootView = null; // Clear it just in case we use it accidentally final Configuration taskConfig = getConfigurationWithOverrides(mTaskInfo); if (oldTaskConfig.densityDpi != taskConfig.densityDpi final int oldDensityDpi = mWindowDecorConfig.densityDpi; mWindowDecorConfig = params.mWindowDecorConfig != null ? params.mWindowDecorConfig : mTaskInfo.getConfiguration(); if (oldDensityDpi != mWindowDecorConfig.densityDpi || mDisplay == null || mDisplay.getDisplayId() != mTaskInfo.displayId || oldLayoutResId != mLayoutResId) { Loading @@ -209,7 +205,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> outResult.mRootView = null; return; } mDecorWindowContext = mContext.createConfigurationContext(taskConfig); mDecorWindowContext = mContext.createConfigurationContext(mWindowDecorConfig); if (params.mLayoutResId != 0) { outResult.mRootView = (T) LayoutInflater.from(mDecorWindowContext) .inflate(params.mLayoutResId, null); Loading @@ -222,6 +218,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> } final Resources resources = mDecorWindowContext.getResources(); final Configuration taskConfig = mTaskInfo.getConfiguration(); final Rect taskBounds = taskConfig.windowConfiguration.getBounds(); outResult.mWidth = taskBounds.width(); outResult.mHeight = taskBounds.height(); Loading Loading @@ -470,6 +467,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> int mCaptionX; int mCaptionY; Configuration mWindowDecorConfig; boolean mApplyStartTransactionOnDraw; void reset() { Loading @@ -484,6 +483,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mCaptionY = 0; mApplyStartTransactionOnDraw = false; mWindowDecorConfig = null; } } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +8 −3 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Point; Loading Loading @@ -116,6 +117,7 @@ public class WindowDecorationTests extends ShellTestCase { private SurfaceControl.Transaction mMockSurfaceControlFinishT; private SurfaceControl.Transaction mMockSurfaceControlAddWindowT; private WindowDecoration.RelayoutParams mRelayoutParams = new WindowDecoration.RelayoutParams(); private Configuration mWindowConfiguration = new Configuration(); private int mCaptionMenuWidthId; private int mCaptionMenuShadowRadiusId; private int mCaptionMenuCornerRadiusId; Loading Loading @@ -296,6 +298,7 @@ public class WindowDecorationTests extends ShellTestCase { taskInfo.isFocused = true; // Density is 2. Shadow radius is 10px. Caption height is 64px. taskInfo.configuration.densityDpi = DisplayMetrics.DENSITY_DEFAULT * 2; mWindowConfiguration.densityDpi = taskInfo.configuration.densityDpi; final SurfaceControl taskSurface = mock(SurfaceControl.class); final TestWindowDecoration windowDecor = createWindowDecoration(taskInfo, taskSurface); Loading Loading @@ -516,7 +519,7 @@ public class WindowDecorationTests extends ShellTestCase { private TestWindowDecoration createWindowDecoration( ActivityManager.RunningTaskInfo taskInfo, SurfaceControl testSurface) { return new TestWindowDecoration(mContext, mMockDisplayController, mMockShellTaskOrganizer, taskInfo, testSurface, taskInfo, testSurface, mWindowConfiguration, new MockObjectSupplier<>(mMockSurfaceControlBuilders, () -> createMockSurfaceControlBuilder(mock(SurfaceControl.class))), new MockObjectSupplier<>(mMockSurfaceControlTransactions, Loading Loading @@ -556,13 +559,15 @@ public class WindowDecorationTests extends ShellTestCase { TestWindowDecoration(Context context, DisplayController displayController, ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo, SurfaceControl taskSurface, Configuration windowConfiguration, Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier, Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier, Supplier<WindowContainerTransaction> windowContainerTransactionSupplier, SurfaceControlViewHostFactory surfaceControlViewHostFactory) { super(context, displayController, taskOrganizer, taskInfo, taskSurface, surfaceControlBuilderSupplier, surfaceControlTransactionSupplier, windowContainerTransactionSupplier, surfaceControlViewHostFactory); windowConfiguration, surfaceControlBuilderSupplier, surfaceControlTransactionSupplier, windowContainerTransactionSupplier, surfaceControlViewHostFactory); } @Override Loading