Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c70a0f6c authored by Maryam Dehaini's avatar Maryam Dehaini Committed by Android (Google) Code Review
Browse files

Merge "Allow passing in a custom density to WindowDecoration#relayout" into main

parents bb2d0cd7 24ee3aca
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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;
+11 −12
Original line number Diff line number Diff line
@@ -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;
@@ -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,
@@ -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);
@@ -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,
+17 −17
Original line number Diff line number Diff line
@@ -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();
@@ -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() {});
    }
@@ -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,
@@ -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);
    }

    /**
@@ -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;
        }
@@ -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) {
@@ -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);
@@ -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();
@@ -470,6 +467,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
        int mCaptionX;
        int mCaptionY;

        Configuration mWindowDecorConfig;

        boolean mApplyStartTransactionOnDraw;

        void reset() {
@@ -484,6 +483,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
            mCaptionY = 0;

            mApplyStartTransactionOnDraw = false;
            mWindowDecorConfig = null;
        }
    }

+8 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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);
@@ -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,
@@ -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