diff options
| author | 2022-11-11 18:38:56 +0800 | |
|---|---|---|
| committer | 2022-11-11 11:19:06 +0000 | |
| commit | bcbd60c45c047c625bd66d7cc018b0c65f02d3fd (patch) | |
| tree | de5ba0307fa1926db70f53968f76980f52efc340 | |
| parent | 518b3949623f0a418d3ef3ce892cbb560176b039 (diff) | |
Refine the naming about compatible scale
There can be 2 reasons that we need to apply compatible scale to a
window:
1. The app doesn't support large screen. We would layout the window as
if it is on a small display. And then we need to scale its window up
to match the display.
2. We put a running app into a container that the size doesn't fit. We
need to down-scale the app so that it can fit the container.
The scaling of case 2 is also known as size-compat-scale which is fully
controlled at the server side. The client shouldn't know about it. And
this CL refines the naming.
Fix: 258393096
Bug: 254187021
Test: presubmit
Change-Id: Ifbd2ca725bed231d9e6dd8190df3dc773d4402b7
9 files changed, 37 insertions, 39 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index e664ebf4c484..43f09473b2d8 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -711,7 +711,7 @@ public final class ViewRootImpl implements ViewParent, private final InsetsState mTempInsets = new InsetsState(); private final InsetsSourceControl[] mTempControls = new InsetsSourceControl[SIZE]; private final WindowConfiguration mTempWinConfig = new WindowConfiguration(); - private float mInvSizeCompatScale = 1f; + private float mInvCompatScale = 1f; final ViewTreeObserver.InternalInsetsInfo mLastGivenInsets = new ViewTreeObserver.InternalInsetsInfo(); @@ -1105,11 +1105,11 @@ public final class ViewRootImpl implements ViewParent, private WindowConfiguration getCompatWindowConfiguration() { final WindowConfiguration winConfig = getConfiguration().windowConfiguration; - if (mInvSizeCompatScale == 1f) { + if (mInvCompatScale == 1f) { return winConfig; } mTempWinConfig.setTo(winConfig); - mTempWinConfig.scale(mInvSizeCompatScale); + mTempWinConfig.scale(mInvCompatScale); return mTempWinConfig; } @@ -1241,11 +1241,11 @@ public final class ViewRootImpl implements ViewParent, controlInsetsForCompatibility(mWindowAttributes); Rect attachedFrame = new Rect(); - final float[] sizeCompatScale = { 1f }; + final float[] compatScale = { 1f }; res = mWindowSession.addToDisplayAsUser(mWindow, mWindowAttributes, getHostVisibility(), mDisplay.getDisplayId(), userId, mInsetsController.getRequestedVisibleTypes(), inputChannel, mTempInsets, - mTempControls, attachedFrame, sizeCompatScale); + mTempControls, attachedFrame, compatScale); if (!attachedFrame.isValid()) { attachedFrame = null; } @@ -1255,8 +1255,8 @@ public final class ViewRootImpl implements ViewParent, mTranslator.translateRectInScreenToAppWindow(attachedFrame); } mTmpFrames.attachedFrame = attachedFrame; - mTmpFrames.sizeCompatScale = sizeCompatScale[0]; - mInvSizeCompatScale = 1f / sizeCompatScale[0]; + mTmpFrames.compatScale = compatScale[0]; + mInvCompatScale = 1f / compatScale[0]; } catch (RemoteException | RuntimeException e) { mAdded = false; mView = null; @@ -1787,24 +1787,24 @@ public final class ViewRootImpl implements ViewParent, mTranslator.translateRectInScreenToAppWindow(displayFrame); mTranslator.translateRectInScreenToAppWindow(attachedFrame); } - final float sizeCompatScale = frames.sizeCompatScale; + final float compatScale = frames.compatScale; final boolean frameChanged = !mWinFrame.equals(frame); final boolean configChanged = !mLastReportedMergedConfiguration.equals(mergedConfiguration); final boolean attachedFrameChanged = LOCAL_LAYOUT && !Objects.equals(mTmpFrames.attachedFrame, attachedFrame); final boolean displayChanged = mDisplay.getDisplayId() != displayId; final boolean resizeModeChanged = mResizeMode != resizeMode; - final boolean sizeCompatScaleChanged = mTmpFrames.sizeCompatScale != sizeCompatScale; + final boolean compatScaleChanged = mTmpFrames.compatScale != compatScale; if (msg == MSG_RESIZED && !frameChanged && !configChanged && !attachedFrameChanged && !displayChanged && !resizeModeChanged && !forceNextWindowRelayout - && !sizeCompatScaleChanged) { + && !compatScaleChanged) { return; } mPendingDragResizing = resizeMode != RESIZE_MODE_INVALID; mResizeMode = resizeMode; - mTmpFrames.sizeCompatScale = sizeCompatScale; - mInvSizeCompatScale = 1f / sizeCompatScale; + mTmpFrames.compatScale = compatScale; + mInvCompatScale = 1f / compatScale; if (configChanged) { // If configuration changed - notify about that and, maybe, about move to display. @@ -8225,7 +8225,7 @@ public final class ViewRootImpl implements ViewParent, mTranslator.translateInsetsStateInScreenToAppWindow(mTempInsets); mTranslator.translateSourceControlsInScreenToAppWindow(mTempControls); } - mInvSizeCompatScale = 1f / mTmpFrames.sizeCompatScale; + mInvCompatScale = 1f / mTmpFrames.compatScale; CompatibilityInfo.applyOverrideScaleIfNeeded(mPendingMergedConfiguration); mInsetsController.onStateChanged(mTempInsets); mInsetsController.onControlsChanged(mTempControls); diff --git a/core/java/android/window/ClientWindowFrames.java b/core/java/android/window/ClientWindowFrames.java index f274d1a15ba5..0ce076b6eb96 100644 --- a/core/java/android/window/ClientWindowFrames.java +++ b/core/java/android/window/ClientWindowFrames.java @@ -49,7 +49,7 @@ public class ClientWindowFrames implements Parcelable { public boolean isParentFrameClippedByDisplayCutout; - public float sizeCompatScale = 1f; + public float compatScale = 1f; public ClientWindowFrames() { } @@ -62,7 +62,7 @@ public class ClientWindowFrames implements Parcelable { attachedFrame = new Rect(other.attachedFrame); } isParentFrameClippedByDisplayCutout = other.isParentFrameClippedByDisplayCutout; - sizeCompatScale = other.sizeCompatScale; + compatScale = other.compatScale; } private ClientWindowFrames(Parcel in) { @@ -76,7 +76,7 @@ public class ClientWindowFrames implements Parcelable { parentFrame.readFromParcel(in); attachedFrame = in.readTypedObject(Rect.CREATOR); isParentFrameClippedByDisplayCutout = in.readBoolean(); - sizeCompatScale = in.readFloat(); + compatScale = in.readFloat(); } @Override @@ -86,7 +86,7 @@ public class ClientWindowFrames implements Parcelable { parentFrame.writeToParcel(dest, flags); dest.writeTypedObject(attachedFrame, flags); dest.writeBoolean(isParentFrameClippedByDisplayCutout); - dest.writeFloat(sizeCompatScale); + dest.writeFloat(compatScale); } @Override @@ -97,7 +97,7 @@ public class ClientWindowFrames implements Parcelable { + " parentFrame=" + parentFrame.toShortString(sb) + (attachedFrame != null ? " attachedFrame=" + attachedFrame.toShortString() : "") + (isParentFrameClippedByDisplayCutout ? " parentClippedByDisplayCutout" : "") - + (sizeCompatScale != 1f ? " sizeCompatScale=" + sizeCompatScale : "") + "}"; + + (compatScale != 1f ? " sizeCompatScale=" + compatScale : "") + "}"; } @Override diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 2a3946f77847..3d23a33c8bc6 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -7901,8 +7901,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } @Override - float getSizeCompatScale() { - return hasSizeCompatBounds() ? mSizeCompatScale : super.getSizeCompatScale(); + float getCompatScale() { + return hasSizeCompatBounds() ? mSizeCompatScale : super.getCompatScale(); } @Override diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java index 74a236bd862c..2dbccae6dde6 100644 --- a/services/core/java/com/android/server/wm/LetterboxUiController.java +++ b/services/core/java/com/android/server/wm/LetterboxUiController.java @@ -580,9 +580,8 @@ final class LetterboxUiController { // Rounded corners should be displayed above the taskbar. bounds.bottom = Math.min(bounds.bottom, getTaskbarInsetsSource(mainWindow).getFrame().top); - if (mActivityRecord.inSizeCompatMode() - && mActivityRecord.getSizeCompatScale() < 1.0f) { - bounds.scale(1.0f / mActivityRecord.getSizeCompatScale()); + if (mActivityRecord.inSizeCompatMode() && mActivityRecord.getCompatScale() < 1.0f) { + bounds.scale(1.0f / mActivityRecord.getCompatScale()); } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index c56a22ef2bbe..521bce0f9ff1 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -1842,7 +1842,7 @@ public class WindowManagerService extends IWindowManager.Stub // Make this invalid which indicates a null attached frame. outAttachedFrame.set(0, 0, -1, -1); } - outSizeCompatScale[0] = win.getSizeCompatScaleForClient(); + outSizeCompatScale[0] = win.getCompatScaleForClient(); } Binder.restoreCallingIdentity(origId); @@ -8895,7 +8895,7 @@ public class WindowManagerService extends IWindowManager.Stub outInsetsState.set(state, true /* copySources */); if (WindowState.hasCompatScale(attrs, token, overrideScale)) { final float compatScale = token != null && token.hasSizeCompatBounds() - ? token.getSizeCompatScale() * overrideScale + ? token.getCompatScale() * overrideScale : overrideScale; outInsetsState.scale(1f / compatScale); } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 17e64995fe8c..bc7e169ebc22 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -475,7 +475,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // Current transformation being applied. float mGlobalScale = 1f; float mInvGlobalScale = 1f; - float mSizeCompatScale = 1f; + float mCompatScale = 1f; final float mOverrideScale; float mHScale = 1f, mVScale = 1f; float mLastHScale = 1f, mLastVScale = 1f; @@ -1256,21 +1256,21 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP void updateGlobalScale() { if (hasCompatScale()) { - mSizeCompatScale = (mOverrideScale == 1f || mToken.hasSizeCompatBounds()) - ? mToken.getSizeCompatScale() + mCompatScale = (mOverrideScale == 1f || mToken.hasSizeCompatBounds()) + ? mToken.getCompatScale() : 1f; - mGlobalScale = mSizeCompatScale * mOverrideScale; + mGlobalScale = mCompatScale * mOverrideScale; mInvGlobalScale = 1f / mGlobalScale; return; } - mGlobalScale = mInvGlobalScale = mSizeCompatScale = 1f; + mGlobalScale = mInvGlobalScale = mCompatScale = 1f; } - float getSizeCompatScaleForClient() { - // If the size compat scale is because of the size compat bounds, we only scale down its - // coordinates at the server side without letting the client know. - return mToken.hasSizeCompatBounds() ? 1f : mSizeCompatScale; + float getCompatScaleForClient() { + // If this window in the size compat mode. The scaling is fully controlled at the server + // side. The client doesn't need to take it into account. + return mToken.hasSizeCompatBounds() ? 1f : mCompatScale; } /** @@ -3868,7 +3868,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } - outFrames.sizeCompatScale = getSizeCompatScaleForClient(); + outFrames.compatScale = getCompatScaleForClient(); // Note: in the cases where the window is tied to an activity, we should not send a // configuration update when the window has requested to be hidden. Doing so can lead to diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java index 7c481f51dfd0..f2527b622208 100644 --- a/services/core/java/com/android/server/wm/WindowToken.java +++ b/services/core/java/com/android/server/wm/WindowToken.java @@ -258,7 +258,7 @@ class WindowToken extends WindowContainer<WindowState> { * @return The scale for applications running in compatibility mode. Multiply the size in the * application by this scale will be the size in the screen. */ - float getSizeCompatScale() { + float getCompatScale() { return mDisplayContent.mCompatibleScreenScale; } diff --git a/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java index ac3d0f0d3f28..75c5b6e13777 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java @@ -213,7 +213,7 @@ public class DualDisplayAreaGroupPolicyTest extends WindowTestsBase { assertThat(newTaskBounds).isEqualTo(newDagBounds); // Activity config bounds is unchanged, size compat bounds is (860x[860x860/1200=616]) - assertThat(mFirstActivity.getSizeCompatScale()).isLessThan(1f); + assertThat(mFirstActivity.getCompatScale()).isLessThan(1f); assertThat(activityConfigBounds.width()).isEqualTo(activityBounds.width()); assertThat(activityConfigBounds.height()).isEqualTo(activityBounds.height()); assertThat(activitySizeCompatBounds.height()).isEqualTo(newTaskBounds.height()); diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java index e5842b400ba3..e65610f0959b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -90,7 +90,6 @@ import android.provider.DeviceConfig; import android.provider.DeviceConfig.Properties; import android.view.InsetsFrameProvider; import android.view.InsetsSource; -import android.view.InsetsVisibilities; import android.view.WindowManager; import androidx.test.filters.MediumTest; @@ -3209,7 +3208,7 @@ public class SizeCompatTests extends WindowTestsBase { /** Asserts that the size of activity is larger than its parent so it is scaling. */ private void assertScaled() { assertTrue(mActivity.inSizeCompatMode()); - assertNotEquals(1f, mActivity.getSizeCompatScale(), 0.0001f /* delta */); + assertNotEquals(1f, mActivity.getCompatScale(), 0.0001f /* delta */); } /** Asserts that the activity is best fitted in the parent. */ |