Read default_minimal_size_resizable_task directly from Resources.
Remove scaling with DisplayMetrics obtain from system context, which can be outdated. Also added check to guarantee that default_minimal_size_resizable_task is in dp unit. Bug: 270393438 Test: passes local atest Change-Id: I1ad4cb7d2d44cce8de9a3d9acb074671549f777a
This commit is contained in:
@@ -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");
|
||||
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) (minimalSize / mDisplayMetrics.density);
|
||||
return (int) TypedValue.complexToFloat(value.data);
|
||||
}
|
||||
|
||||
private boolean updateOrientation(boolean forceUpdate) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user