Loading services/core/java/com/android/server/wm/DisplayContent.java +15 −8 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,9 @@ import static android.os.Process.SYSTEM_UID; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.util.DisplayMetrics.DENSITY_DEFAULT; import static android.util.DisplayMetrics.DENSITY_DEFAULT; import static android.util.RotationUtils.deltaRotation; import static android.util.RotationUtils.deltaRotation; import static android.util.TypedValue.COMPLEX_UNIT_DIP; import static android.util.TypedValue.COMPLEX_UNIT_MASK; import static android.util.TypedValue.COMPLEX_UNIT_SHIFT; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD; import static android.view.Display.FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD; import static android.view.Display.FLAG_PRIVATE; import static android.view.Display.FLAG_PRIVATE; Loading Loading @@ -170,6 +173,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo.ScreenOrientation; import android.content.pm.ActivityInfo.ScreenOrientation; import android.content.res.CompatibilityInfo; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap; import android.graphics.ColorSpace; import android.graphics.ColorSpace; import android.graphics.Insets; import android.graphics.Insets; Loading Loading @@ -206,6 +210,7 @@ import android.util.Size; import android.util.Slog; import android.util.Slog; import android.util.SparseArray; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.SparseBooleanArray; import android.util.TypedValue; import android.util.proto.ProtoOutputStream; import android.util.proto.ProtoOutputStream; import android.view.ContentRecordingSession; import android.view.ContentRecordingSession; import android.view.Display; import android.view.Display; Loading Loading @@ -1684,14 +1689,16 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp private int getMinimalTaskSizeDp() { private int getMinimalTaskSizeDp() { final Context displayConfigurationContext = final Context displayConfigurationContext = mAtmService.mContext.createConfigurationContext(getConfiguration()); mAtmService.mContext.createConfigurationContext(getConfiguration()); final float minimalSize = final Resources res = displayConfigurationContext.getResources(); displayConfigurationContext.getResources().getDimension( final TypedValue value = new TypedValue(); R.dimen.default_minimal_size_resizable_task); res.getValue(R.dimen.default_minimal_size_resizable_task, value, true /* resolveRefs */); if (Double.compare(mDisplayMetrics.density, 0.0) == 0) { final int valueUnit = ((value.data >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK); throw new IllegalArgumentException("Display with ID=" + getDisplayId() + "has invalid " if (value.type != TypedValue.TYPE_DIMENSION || valueUnit != COMPLEX_UNIT_DIP) { + "DisplayMetrics.density= 0.0"); throw new IllegalArgumentException( } "Resource ID #0x" + Integer.toHexString(R.dimen.default_minimal_size_resizable_task) return (int) (minimalSize / mDisplayMetrics.density); + " is not in valid type or unit"); } return (int) TypedValue.complexToFloat(value.data); } } private boolean updateOrientation(boolean forceUpdate) { private boolean updateOrientation(boolean forceUpdate) { Loading services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java +21 −4 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,9 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.content.Context; import android.content.Context; Loading @@ -39,6 +42,7 @@ import android.graphics.Insets; import android.graphics.Rect; import android.graphics.Rect; import android.hardware.display.DisplayManagerGlobal; import android.hardware.display.DisplayManagerGlobal; import android.util.DisplayMetrics; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.Display; import android.view.Display; import android.view.DisplayCutout; import android.view.DisplayCutout; import android.view.DisplayInfo; import android.view.DisplayInfo; Loading @@ -47,6 +51,8 @@ import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntr import org.mockito.Mock; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; class TestDisplayContent extends DisplayContent { class TestDisplayContent extends DisplayContent { Loading Loading @@ -197,10 +203,21 @@ class TestDisplayContent extends DisplayContent { MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this); doReturn(mMockContext).when(mService.mContext).createConfigurationContext(any()); doReturn(mMockContext).when(mService.mContext).createConfigurationContext(any()); doReturn(mResources).when(mMockContext).getResources(); doReturn(mResources).when(mMockContext).getResources(); doReturn(valueDp * mDisplayMetrics.density) doAnswer( .when(mResources) new Answer() { .getDimension( @Override com.android.internal.R.dimen.default_minimal_size_resizable_task); public Object answer(InvocationOnMock i) { Object[] args = i.getArguments(); TypedValue v = (TypedValue) args[1]; v.type = TypedValue.TYPE_DIMENSION; v.data = TypedValue.createComplexDimension(valueDp, TypedValue.COMPLEX_UNIT_DIP); return null; } } ).when(mResources).getValue( eq(com.android.internal.R.dimen.default_minimal_size_resizable_task), any(TypedValue.class), eq(true)); return this; return this; } } Builder setDeviceStateController(@NonNull DeviceStateController deviceStateController) { Builder setDeviceStateController(@NonNull DeviceStateController deviceStateController) { Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +15 −8 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,9 @@ import static android.os.Process.SYSTEM_UID; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.util.DisplayMetrics.DENSITY_DEFAULT; import static android.util.DisplayMetrics.DENSITY_DEFAULT; import static android.util.RotationUtils.deltaRotation; import static android.util.RotationUtils.deltaRotation; import static android.util.TypedValue.COMPLEX_UNIT_DIP; import static android.util.TypedValue.COMPLEX_UNIT_MASK; import static android.util.TypedValue.COMPLEX_UNIT_SHIFT; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD; import static android.view.Display.FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD; import static android.view.Display.FLAG_PRIVATE; import static android.view.Display.FLAG_PRIVATE; Loading Loading @@ -170,6 +173,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo.ScreenOrientation; import android.content.pm.ActivityInfo.ScreenOrientation; import android.content.res.CompatibilityInfo; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap; import android.graphics.ColorSpace; import android.graphics.ColorSpace; import android.graphics.Insets; import android.graphics.Insets; Loading Loading @@ -206,6 +210,7 @@ import android.util.Size; import android.util.Slog; import android.util.Slog; import android.util.SparseArray; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.SparseBooleanArray; import android.util.TypedValue; import android.util.proto.ProtoOutputStream; import android.util.proto.ProtoOutputStream; import android.view.ContentRecordingSession; import android.view.ContentRecordingSession; import android.view.Display; import android.view.Display; Loading Loading @@ -1684,14 +1689,16 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp private int getMinimalTaskSizeDp() { private int getMinimalTaskSizeDp() { final Context displayConfigurationContext = final Context displayConfigurationContext = mAtmService.mContext.createConfigurationContext(getConfiguration()); mAtmService.mContext.createConfigurationContext(getConfiguration()); final float minimalSize = final Resources res = displayConfigurationContext.getResources(); displayConfigurationContext.getResources().getDimension( final TypedValue value = new TypedValue(); R.dimen.default_minimal_size_resizable_task); res.getValue(R.dimen.default_minimal_size_resizable_task, value, true /* resolveRefs */); if (Double.compare(mDisplayMetrics.density, 0.0) == 0) { final int valueUnit = ((value.data >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK); throw new IllegalArgumentException("Display with ID=" + getDisplayId() + "has invalid " if (value.type != TypedValue.TYPE_DIMENSION || valueUnit != COMPLEX_UNIT_DIP) { + "DisplayMetrics.density= 0.0"); throw new IllegalArgumentException( } "Resource ID #0x" + Integer.toHexString(R.dimen.default_minimal_size_resizable_task) return (int) (minimalSize / mDisplayMetrics.density); + " is not in valid type or unit"); } return (int) TypedValue.complexToFloat(value.data); } } private boolean updateOrientation(boolean forceUpdate) { private boolean updateOrientation(boolean forceUpdate) { Loading
services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java +21 −4 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,9 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.content.Context; import android.content.Context; Loading @@ -39,6 +42,7 @@ import android.graphics.Insets; import android.graphics.Rect; import android.graphics.Rect; import android.hardware.display.DisplayManagerGlobal; import android.hardware.display.DisplayManagerGlobal; import android.util.DisplayMetrics; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.Display; import android.view.Display; import android.view.DisplayCutout; import android.view.DisplayCutout; import android.view.DisplayInfo; import android.view.DisplayInfo; Loading @@ -47,6 +51,8 @@ import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntr import org.mockito.Mock; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; class TestDisplayContent extends DisplayContent { class TestDisplayContent extends DisplayContent { Loading Loading @@ -197,10 +203,21 @@ class TestDisplayContent extends DisplayContent { MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this); doReturn(mMockContext).when(mService.mContext).createConfigurationContext(any()); doReturn(mMockContext).when(mService.mContext).createConfigurationContext(any()); doReturn(mResources).when(mMockContext).getResources(); doReturn(mResources).when(mMockContext).getResources(); doReturn(valueDp * mDisplayMetrics.density) doAnswer( .when(mResources) new Answer() { .getDimension( @Override com.android.internal.R.dimen.default_minimal_size_resizable_task); public Object answer(InvocationOnMock i) { Object[] args = i.getArguments(); TypedValue v = (TypedValue) args[1]; v.type = TypedValue.TYPE_DIMENSION; v.data = TypedValue.createComplexDimension(valueDp, TypedValue.COMPLEX_UNIT_DIP); return null; } } ).when(mResources).getValue( eq(com.android.internal.R.dimen.default_minimal_size_resizable_task), any(TypedValue.class), eq(true)); return this; return this; } } Builder setDeviceStateController(@NonNull DeviceStateController deviceStateController) { Builder setDeviceStateController(@NonNull DeviceStateController deviceStateController) { Loading