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

Commit 3ef58a6d authored by Todd Lee's avatar Todd Lee Committed by Android (Google) Code Review
Browse files

Merge "Ensure that rounded corner radius applies on activity launches" into main

parents 7d02389f 2f5394a7
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -198,6 +198,12 @@ public class RoundedCorners implements Parcelable {
            radius = res.getDimensionPixelSize(R.dimen.rounded_corner_radius);
        }
        array.recycle();
        // For devices with round displays (e.g. watches) that don't otherwise provide the rounded
        // corner radius via resource overlays, we can infer the corner radius directly from the
        // display size.
        if (radius == 0 && res.getConfiguration().isScreenRound()) {
            radius = res.getDisplayMetrics().widthPixels / 2;
        }
        return radius;
    }

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

package android.view;

import static android.content.res.Configuration.SCREENLAYOUT_ROUND_NO;
import static android.content.res.Configuration.SCREENLAYOUT_ROUND_YES;
import static android.view.RoundedCorner.POSITION_BOTTOM_LEFT;
import static android.view.RoundedCorner.POSITION_BOTTOM_RIGHT;
import static android.view.RoundedCorner.POSITION_TOP_LEFT;
@@ -28,22 +30,47 @@ import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.Matchers.sameInstance;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.when;

import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.platform.test.annotations.Presubmit;
import android.util.DisplayMetrics;
import android.util.Pair;

import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;

import com.android.internal.R;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

@RunWith(AndroidJUnit4.class)
@SmallTest
@Presubmit
public class RoundedCornersTest {

    @Mock
    DisplayMetrics mMockDisplayMetrics;
    @Mock
    Resources mMockResources;
    @Mock TypedArray mMockTypedArray;
    Configuration mConfiguration;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mConfiguration = Configuration.EMPTY;
    }

    final RoundedCorners mRoundedCorners = new RoundedCorners(
            new RoundedCorner(POSITION_TOP_LEFT, 10, 10, 10),
            new RoundedCorner(POSITION_TOP_RIGHT, 10, 190, 10),
@@ -199,4 +226,63 @@ public class RoundedCornersTest {
        assertThat(RoundedCorners.fromRadii(radius, 200, 300),
                not(sameInstance(cached)));
    }

    @Test
    public void testGetRoundedCornerRadius_withRoundDevice_usesDisplayRadiusAsDefault() {
        final int displayWidth = 400;
        mConfiguration.screenLayout = SCREENLAYOUT_ROUND_YES;
        mMockDisplayMetrics.widthPixels = displayWidth;

        when(mMockResources.getConfiguration()).thenReturn(mConfiguration);
        when(mMockResources.getDisplayMetrics()).thenReturn(mMockDisplayMetrics);
        when(mMockResources.getStringArray(R.array.config_displayUniqueIdArray))
                .thenReturn(new String[]{"0"});
        when(mMockTypedArray.length()).thenReturn(0);
        when(mMockResources.obtainTypedArray(anyInt())).thenReturn(mMockTypedArray);
        when(mMockResources.getDimensionPixelSize(R.dimen.rounded_corner_radius))
                .thenReturn(0);


        int radius = RoundedCorners.getRoundedCornerRadius(mMockResources, "0");
        assertEquals((displayWidth / 2), radius);
    }

    @Test
    public void testGetRoundedCornerRadius_withRoundDevice_usesOverlayIfProvided() {
        final int displayWidth = 400;
        final int overlayValue = 199;
        mConfiguration.screenLayout = SCREENLAYOUT_ROUND_YES;
        mMockDisplayMetrics.widthPixels = displayWidth;

        when(mMockResources.getConfiguration()).thenReturn(mConfiguration);
        when(mMockResources.getDisplayMetrics()).thenReturn(mMockDisplayMetrics);
        when(mMockResources.getStringArray(R.array.config_displayUniqueIdArray))
                .thenReturn(new String[]{"0"});
        when(mMockTypedArray.length()).thenReturn(0);
        when(mMockResources.obtainTypedArray(anyInt())).thenReturn(mMockTypedArray);
        when(mMockResources.getDimensionPixelSize(R.dimen.rounded_corner_radius))
                .thenReturn(overlayValue);

        int radius = RoundedCorners.getRoundedCornerRadius(mMockResources, "0");
        assertEquals(overlayValue, radius);
    }

    @Test
    public void testGetRoundedCornerRadius_withNonRoundDevice_noDisplayDefault() {
        final int displayWidth = 400;
        mConfiguration.screenLayout = SCREENLAYOUT_ROUND_NO;
        mMockDisplayMetrics.widthPixels = displayWidth;

        when(mMockResources.getConfiguration()).thenReturn(mConfiguration);
        when(mMockResources.getDisplayMetrics()).thenReturn(mMockDisplayMetrics);
        when(mMockResources.getStringArray(R.array.config_displayUniqueIdArray))
                .thenReturn(new String[]{"0"});
        when(mMockTypedArray.length()).thenReturn(0);
        when(mMockResources.obtainTypedArray(anyInt())).thenReturn(mMockTypedArray);
        when(mMockResources.getDimensionPixelSize(R.dimen.rounded_corner_radius))
                .thenReturn(0);

        int radius = RoundedCorners.getRoundedCornerRadius(mMockResources, "0");
        assertEquals(0, radius);
    }
}
+5 −3
Original line number Diff line number Diff line
@@ -470,10 +470,12 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
                }

                final float cornerRadius;
                if (a.hasRoundedCorners() && isTask) {
                    // hasRoundedCorners is currently only enabled for tasks
                if (a.hasRoundedCorners()) {
                    final int displayId = isTask ? change.getTaskInfo().displayId
                            : info.getRoot(TransitionUtil.rootIndexFor(change, info))
                                    .getDisplayId();
                    final Context displayContext =
                            mDisplayController.getDisplayContext(change.getTaskInfo().displayId);
                            mDisplayController.getDisplayContext(displayId);
                    cornerRadius = displayContext == null ? 0
                            : ScreenDecorationsUtils.getWindowCornerRadius(displayContext);
                } else {