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

Commit f36b5920 authored by Maryam Dehaini's avatar Maryam Dehaini Committed by Automerger Merge Worker
Browse files

Merge "Add rounded corners for freeform tasks" into udc-dev am: 323691f2

parents c7cd7614 323691f2
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@ import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Point;
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.PointF;
import android.graphics.Region;
import android.graphics.Region;
@@ -95,7 +96,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
    private int mWindowingPillHeight;
    private int mWindowingPillHeight;
    private int mMoreActionsPillHeight;
    private int mMoreActionsPillHeight;
    private int mShadowRadius;
    private int mShadowRadius;
    private int mCornerRadius;
    private int mMenuCornerRadius;


    DesktopModeWindowDecoration(
    DesktopModeWindowDecoration(
            Context context,
            Context context,
@@ -182,6 +183,11 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
        mRelayoutParams.mShadowRadiusId = shadowRadiusID;
        mRelayoutParams.mShadowRadiusId = shadowRadiusID;
        mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw;
        mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw;


        final TypedArray ta = mContext.obtainStyledAttributes(
                new int[]{android.R.attr.dialogCornerRadius});
        mRelayoutParams.mCornerRadius = ta.getDimensionPixelSize(0, 0);
        ta.recycle();

        relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult);
        relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult);
        // After this line, mTaskInfo is up-to-date and should be used instead of taskInfo
        // After this line, mTaskInfo is up-to-date and should be used instead of taskInfo


+11 −1
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.wm.shell.windowdecor;
package com.android.wm.shell.windowdecor;


import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;

import android.app.ActivityManager.RunningTaskInfo;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Configuration;
@@ -256,13 +258,17 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
        mTmpColor[0] = (float) Color.red(backgroundColorInt) / 255.f;
        mTmpColor[0] = (float) Color.red(backgroundColorInt) / 255.f;
        mTmpColor[1] = (float) Color.green(backgroundColorInt) / 255.f;
        mTmpColor[1] = (float) Color.green(backgroundColorInt) / 255.f;
        mTmpColor[2] = (float) Color.blue(backgroundColorInt) / 255.f;
        mTmpColor[2] = (float) Color.blue(backgroundColorInt) / 255.f;
        Point taskPosition = mTaskInfo.positionInParent;
        final Point taskPosition = mTaskInfo.positionInParent;
        startT.setWindowCrop(mTaskSurface, outResult.mWidth, outResult.mHeight)
        startT.setWindowCrop(mTaskSurface, outResult.mWidth, outResult.mHeight)
                .setShadowRadius(mTaskSurface, shadowRadius)
                .setShadowRadius(mTaskSurface, shadowRadius)
                .setColor(mTaskSurface, mTmpColor)
                .setColor(mTaskSurface, mTmpColor)
                .show(mTaskSurface);
                .show(mTaskSurface);
        finishT.setPosition(mTaskSurface, taskPosition.x, taskPosition.y)
        finishT.setPosition(mTaskSurface, taskPosition.x, taskPosition.y)
                .setWindowCrop(mTaskSurface, outResult.mWidth, outResult.mHeight);
                .setWindowCrop(mTaskSurface, outResult.mWidth, outResult.mHeight);
        if (mTaskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) {
            startT.setCornerRadius(mTaskSurface, params.mCornerRadius);
            finishT.setCornerRadius(mTaskSurface, params.mCornerRadius);
        }


        if (mCaptionWindowManager == null) {
        if (mCaptionWindowManager == null) {
            // Put caption under a container surface because ViewRootImpl sets the destination frame
            // Put caption under a container surface because ViewRootImpl sets the destination frame
@@ -414,6 +420,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
        int mCaptionWidthId;
        int mCaptionWidthId;
        int mShadowRadiusId;
        int mShadowRadiusId;


        int mCornerRadius;

        int mCaptionX;
        int mCaptionX;
        int mCaptionY;
        int mCaptionY;


@@ -425,6 +433,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
            mCaptionWidthId = Resources.ID_NULL;
            mCaptionWidthId = Resources.ID_NULL;
            mShadowRadiusId = Resources.ID_NULL;
            mShadowRadiusId = Resources.ID_NULL;


            mCornerRadius = 0;

            mCaptionX = 0;
            mCaptionX = 0;
            mCaptionY = 0;
            mCaptionY = 0;


+7 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.wm.shell.windowdecor;
package com.android.wm.shell.windowdecor;


import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;

import static com.android.wm.shell.MockSurfaceControlHelper.createMockSurfaceControlBuilder;
import static com.android.wm.shell.MockSurfaceControlHelper.createMockSurfaceControlBuilder;
import static com.android.wm.shell.MockSurfaceControlHelper.createMockSurfaceControlTransaction;
import static com.android.wm.shell.MockSurfaceControlHelper.createMockSurfaceControlTransaction;


@@ -86,6 +88,7 @@ import java.util.function.Supplier;
public class WindowDecorationTests extends ShellTestCase {
public class WindowDecorationTests extends ShellTestCase {
    private static final Rect TASK_BOUNDS = new Rect(100, 300, 400, 400);
    private static final Rect TASK_BOUNDS = new Rect(100, 300, 400, 400);
    private static final Point TASK_POSITION_IN_PARENT = new Point(40, 60);
    private static final Point TASK_POSITION_IN_PARENT = new Point(40, 60);
    private static final int CORNER_RADIUS = 20;


    private final WindowDecoration.RelayoutResult<TestView> mRelayoutResult =
    private final WindowDecoration.RelayoutResult<TestView> mRelayoutResult =
            new WindowDecoration.RelayoutResult<>();
            new WindowDecoration.RelayoutResult<>();
@@ -130,6 +133,7 @@ public class WindowDecorationTests extends ShellTestCase {
        mCaptionMenuShadowRadiusId = R.dimen.test_caption_menu_shadow_radius;
        mCaptionMenuShadowRadiusId = R.dimen.test_caption_menu_shadow_radius;
        mCaptionMenuCornerRadiusId = R.dimen.test_caption_menu_corner_radius;
        mCaptionMenuCornerRadiusId = R.dimen.test_caption_menu_corner_radius;
        mRelayoutParams.mShadowRadiusId = R.dimen.test_window_decor_shadow_radius;
        mRelayoutParams.mShadowRadiusId = R.dimen.test_window_decor_shadow_radius;
        mRelayoutParams.mCornerRadius = CORNER_RADIUS;


        doReturn(mMockSurfaceControlViewHost).when(mMockSurfaceControlViewHostFactory)
        doReturn(mMockSurfaceControlViewHost).when(mMockSurfaceControlViewHostFactory)
                .create(any(), any(), any());
                .create(any(), any(), any());
@@ -209,6 +213,7 @@ public class WindowDecorationTests extends ShellTestCase {
                .setBounds(TASK_BOUNDS)
                .setBounds(TASK_BOUNDS)
                .setPositionInParent(TASK_POSITION_IN_PARENT.x, TASK_POSITION_IN_PARENT.y)
                .setPositionInParent(TASK_POSITION_IN_PARENT.x, TASK_POSITION_IN_PARENT.y)
                .setVisible(true)
                .setVisible(true)
                .setWindowingMode(WINDOWING_MODE_FREEFORM)
                .build();
                .build();
        taskInfo.isFocused = true;
        taskInfo.isFocused = true;
        // Density is 2. Shadow radius is 10px. Caption height is 64px.
        // Density is 2. Shadow radius is 10px. Caption height is 64px.
@@ -249,6 +254,8 @@ public class WindowDecorationTests extends ShellTestCase {
                .setPosition(taskSurface, TASK_POSITION_IN_PARENT.x, TASK_POSITION_IN_PARENT.y);
                .setPosition(taskSurface, TASK_POSITION_IN_PARENT.x, TASK_POSITION_IN_PARENT.y);
        verify(mMockSurfaceControlFinishT)
        verify(mMockSurfaceControlFinishT)
                .setWindowCrop(taskSurface, 300, 100);
                .setWindowCrop(taskSurface, 300, 100);
        verify(mMockSurfaceControlStartT).setCornerRadius(taskSurface, CORNER_RADIUS);
        verify(mMockSurfaceControlFinishT).setCornerRadius(taskSurface, CORNER_RADIUS);
        verify(mMockSurfaceControlStartT)
        verify(mMockSurfaceControlStartT)
                .show(taskSurface);
                .show(taskSurface);
        verify(mMockSurfaceControlStartT)
        verify(mMockSurfaceControlStartT)