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

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

Merge "Reinflate window decor views if font scale has changed" into main

parents 5a29f8ac c7a66d4f
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -361,6 +361,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
        }

        outResult.mRootView = rootView;
        final boolean fontScaleChanged = mWindowDecorConfig != null
                && mWindowDecorConfig.fontScale != mTaskInfo.configuration.fontScale;
        final int oldDensityDpi = mWindowDecorConfig != null
                ? mWindowDecorConfig.densityDpi : DENSITY_DPI_UNDEFINED;
        final int oldNightMode =  mWindowDecorConfig != null
@@ -375,7 +377,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
                || mDisplay.getDisplayId() != mTaskInfo.displayId
                || oldLayoutResId != mLayoutResId
                || oldNightMode != newNightMode
                || mDecorWindowContext == null) {
                || mDecorWindowContext == null
                || fontScaleChanged) {
            releaseViews(wct);

            if (!obtainDisplayOrRegisterListener()) {
+44 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.argThat;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.inOrder;
@@ -386,6 +387,49 @@ public class WindowDecorationTests extends ShellTestCase {
        verify(mMockWindowDecorViewHost).updateView(same(mMockView), any(), any(), any(), any());
    }


    @Test
    public void testReinflateViewsOnFontScaleChange() {
        final Display defaultDisplay = mock(Display.class);
        doReturn(defaultDisplay).when(mMockDisplayController)
                .getDisplay(Display.DEFAULT_DISPLAY);

        final ActivityManager.RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
                .setVisible(true)
                .setDisplayId(Display.DEFAULT_DISPLAY)
                .build();
        final TestWindowDecoration windowDecor = spy(createWindowDecoration(taskInfo));
        windowDecor.relayout(taskInfo, true /* hasGlobalFocus */, Region.obtain());
        clearInvocations(windowDecor);
        final ActivityManager.RunningTaskInfo taskInfo2 = new TestRunningTaskInfoBuilder()
                .setVisible(true)
                .setDisplayId(Display.DEFAULT_DISPLAY)
                .build();
        taskInfo2.configuration.fontScale = taskInfo.configuration.fontScale + 1;
        windowDecor.relayout(taskInfo2, true /* hasGlobalFocus */, Region.obtain());
        // WindowDecoration#releaseViews should be called since the font scale has changed.
        verify(windowDecor).releaseViews(any());
    }

    @Test
    public void testViewNotReinflatedWhenFontScaleNotChanged() {
        final Display defaultDisplay = mock(Display.class);
        doReturn(defaultDisplay).when(mMockDisplayController)
                .getDisplay(Display.DEFAULT_DISPLAY);

        final ActivityManager.RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
                .setVisible(true)
                .setDisplayId(Display.DEFAULT_DISPLAY)
                .build();
        final TestWindowDecoration windowDecor = spy(createWindowDecoration(taskInfo));
        windowDecor.relayout(taskInfo, true /* hasGlobalFocus */, Region.obtain());
        clearInvocations(windowDecor);
        windowDecor.relayout(taskInfo, true /* hasGlobalFocus */, Region.obtain());
        // WindowDecoration#releaseViews should be called since task info (and therefore the
        // fontScale) has not changed.
        verify(windowDecor, never()).releaseViews(any());
    }

    @Test
    public void testAddViewHostViewContainer() {
        final Display defaultDisplay = mock(Display.class);