Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +4 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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()) { Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +44 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +4 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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()) { Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +44 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading