diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 23 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java | 25 |
2 files changed, 36 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 86c4e0f7c6c6..947eddeaa3eb 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -38,6 +38,9 @@ import static android.os.Process.SYSTEM_UID; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.util.DisplayMetrics.DENSITY_DEFAULT; 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.FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD; import static android.view.Display.FLAG_PRIVATE; @@ -170,6 +173,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo.ScreenOrientation; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.ColorSpace; import android.graphics.Insets; @@ -206,6 +210,7 @@ import android.util.Size; import android.util.Slog; import android.util.SparseArray; import android.util.SparseBooleanArray; +import android.util.TypedValue; import android.util.proto.ProtoOutputStream; import android.view.ContentRecordingSession; import android.view.Display; @@ -1684,14 +1689,16 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp private int getMinimalTaskSizeDp() { final Context displayConfigurationContext = mAtmService.mContext.createConfigurationContext(getConfiguration()); - final float minimalSize = - displayConfigurationContext.getResources().getDimension( - R.dimen.default_minimal_size_resizable_task); - if (Double.compare(mDisplayMetrics.density, 0.0) == 0) { - throw new IllegalArgumentException("Display with ID=" + getDisplayId() + "has invalid " - + "DisplayMetrics.density= 0.0"); - } - return (int) (minimalSize / mDisplayMetrics.density); + final Resources res = displayConfigurationContext.getResources(); + final TypedValue value = new TypedValue(); + res.getValue(R.dimen.default_minimal_size_resizable_task, value, true /* resolveRefs */); + final int valueUnit = ((value.data >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK); + if (value.type != TypedValue.TYPE_DIMENSION || valueUnit != COMPLEX_UNIT_DIP) { + throw new IllegalArgumentException( + "Resource ID #0x" + Integer.toHexString(R.dimen.default_minimal_size_resizable_task) + + " is not in valid type or unit"); + } + return (int) TypedValue.complexToFloat(value.data); } private boolean updateOrientation(boolean forceUpdate) { diff --git a/services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java b/services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java index fec079b7b15b..7e4a9de950e5 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java +++ b/services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java @@ -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.spyOn; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; + import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; @@ -39,6 +42,7 @@ import android.graphics.Insets; import android.graphics.Rect; import android.hardware.display.DisplayManagerGlobal; import android.util.DisplayMetrics; +import android.util.TypedValue; import android.view.Display; import android.view.DisplayCutout; import android.view.DisplayInfo; @@ -47,6 +51,8 @@ import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntr import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; class TestDisplayContent extends DisplayContent { @@ -197,10 +203,21 @@ class TestDisplayContent extends DisplayContent { MockitoAnnotations.initMocks(this); doReturn(mMockContext).when(mService.mContext).createConfigurationContext(any()); doReturn(mResources).when(mMockContext).getResources(); - doReturn(valueDp * mDisplayMetrics.density) - .when(mResources) - .getDimension( - com.android.internal.R.dimen.default_minimal_size_resizable_task); + doAnswer( + new Answer() { + @Override + 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; } Builder setDeviceStateController(@NonNull DeviceStateController deviceStateController) { |