Merge "Remove WindowlessWindowLayout"
diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java
index c9eee6a..3efbb75 100644
--- a/core/java/android/view/SurfaceControlViewHost.java
+++ b/core/java/android/view/SurfaceControlViewHost.java
@@ -292,7 +292,7 @@
public SurfaceControlViewHost(@NonNull Context c, @NonNull Display d,
@NonNull WindowlessWindowManager wwm) {
mWm = wwm;
- mViewRoot = new ViewRootImpl(c, d, mWm, new WindowlessWindowLayout());
+ mViewRoot = new ViewRootImpl(c, d, mWm);
addConfigCallback(c, d);
WindowManagerGlobal.getInstance().addWindowlessRoot(mViewRoot);
@@ -322,7 +322,7 @@
mWm = new WindowlessWindowManager(context.getResources().getConfiguration(),
mSurfaceControl, hostToken);
- mViewRoot = new ViewRootImpl(context, display, mWm, new WindowlessWindowLayout());
+ mViewRoot = new ViewRootImpl(context, display, mWm);
addConfigCallback(context, display);
WindowManagerGlobal.getInstance().addWindowlessRoot(mViewRoot);
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index e2608cd..3502c34 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -921,14 +921,13 @@
private String mTag = TAG;
public ViewRootImpl(Context context, Display display) {
- this(context, display, WindowManagerGlobal.getWindowSession(), new WindowLayout());
+ this(context, display, WindowManagerGlobal.getWindowSession());
}
- public ViewRootImpl(@UiContext Context context, Display display, IWindowSession session,
- WindowLayout windowLayout) {
+ public ViewRootImpl(@UiContext Context context, Display display, IWindowSession session) {
mContext = context;
mWindowSession = session;
- mWindowLayout = windowLayout;
+ mWindowLayout = new WindowLayout();
mDisplay = display;
mBasePackageName = context.getBasePackageName();
mThread = Thread.currentThread();
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index 4a9dc5b..acc0c0b 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -388,8 +388,7 @@
if (windowlessSession == null) {
root = new ViewRootImpl(view.getContext(), display);
} else {
- root = new ViewRootImpl(view.getContext(), display,
- windowlessSession, new WindowlessWindowLayout());
+ root = new ViewRootImpl(view.getContext(), display, windowlessSession);
}
view.setLayoutParams(wparams);
diff --git a/core/java/android/view/WindowlessWindowLayout.java b/core/java/android/view/WindowlessWindowLayout.java
deleted file mode 100644
index 6fb01f2..0000000
--- a/core/java/android/view/WindowlessWindowLayout.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.view;
-
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
-
-import android.app.WindowConfiguration.WindowingMode;
-import android.graphics.Rect;
-import android.view.WindowInsets.Type.InsetsType;
-import android.window.ClientWindowFrames;
-
-// TODO(b/262891212) use the real WindowLayout and remove WindowlessWindowLayout
-
-/**
- * Computes window frames for the windowless window.
- *
- * @hide
- */
-public class WindowlessWindowLayout extends WindowLayout {
-
- @Override
- public void computeFrames(WindowManager.LayoutParams attrs, InsetsState state,
- Rect displayCutoutSafe, Rect windowBounds, @WindowingMode int windowingMode,
- int requestedWidth, int requestedHeight, @InsetsType int requestedVisibleTypes,
- float compatScale, ClientWindowFrames frames) {
- if (frames.attachedFrame == null) {
- frames.frame.set(0, 0, attrs.width, attrs.height);
- frames.parentFrame.set(frames.frame);
- frames.displayFrame.set(frames.frame);
- return;
- }
-
- final int height = calculateLength(attrs.height, requestedHeight,
- frames.attachedFrame.height());
- final int width = calculateLength(attrs.width, requestedWidth,
- frames.attachedFrame.width());
- Gravity.apply(attrs.gravity, width, height, frames.attachedFrame,
- (int) (attrs.x + attrs.horizontalMargin),
- (int) (attrs.y + attrs.verticalMargin),
- frames.frame);
- frames.displayFrame.set(frames.frame);
- frames.parentFrame.set(frames.attachedFrame);
- }
-
- private static int calculateLength(int attrLength, int requestedLength, int parentLength) {
- if (attrLength == MATCH_PARENT) {
- return parentLength;
- }
- if (attrLength == WRAP_CONTENT) {
- return requestedLength;
- }
- return attrLength;
- }
-}
diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java
index 021193e..4ddd485 100644
--- a/core/java/android/view/WindowlessWindowManager.java
+++ b/core/java/android/view/WindowlessWindowManager.java
@@ -94,7 +94,10 @@
private InsetsState mInsetsState;
private final ClientWindowFrames mTmpFrames = new ClientWindowFrames();
private final MergedConfiguration mTmpConfig = new MergedConfiguration();
- private final WindowlessWindowLayout mLayout = new WindowlessWindowLayout();
+ private final InsetsState mTmpInsetsState = new InsetsState();
+ private final Rect mTmpDisplayCutoutSafe = new Rect();
+ private final Rect mTmpWindowBounds = new Rect();
+ private final WindowLayout mLayout = new WindowLayout();
public WindowlessWindowManager(Configuration c, SurfaceControl rootSurface,
IBinder hostInputToken) {
@@ -346,22 +349,27 @@
}
WindowManager.LayoutParams attrs = state.mParams;
- ClientWindowFrames frames = new ClientWindowFrames();
- frames.attachedFrame = state.mAttachedFrame;
+ mTmpFrames.attachedFrame = state.mAttachedFrame;
- mLayout.computeFrames(attrs, null, null, null, WindowConfiguration.WINDOWING_MODE_UNDEFINED,
- requestedWidth, requestedHeight, 0, 0,
- frames);
-
- state.mFrame.set(frames.frame);
- if (outFrames != null) {
- outFrames.frame.set(frames.frame);
- outFrames.parentFrame.set(frames.parentFrame);
- outFrames.displayFrame.set(frames.displayFrame);
+ if (state.mAttachedFrame == null) {
+ mTmpWindowBounds.set(0, 0, requestedWidth, requestedHeight);
+ } else {
+ mTmpWindowBounds.set(state.mAttachedFrame);
}
- t.setPosition(leash, frames.frame.left, frames.frame.top);
- t.setWindowCrop(leash, frames.frame.width(), frames.frame.height());
+ mLayout.computeFrames(attrs, mTmpInsetsState, mTmpDisplayCutoutSafe, mTmpWindowBounds,
+ WindowConfiguration.WINDOWING_MODE_UNDEFINED, requestedWidth, requestedHeight, 0,
+ 1f, mTmpFrames);
+
+ state.mFrame.set(mTmpFrames.frame);
+ if (outFrames != null) {
+ outFrames.frame.set(mTmpFrames.frame);
+ outFrames.parentFrame.set(mTmpFrames.parentFrame);
+ outFrames.displayFrame.set(mTmpFrames.displayFrame);
+ }
+
+ t.setPosition(leash, mTmpFrames.frame.left, mTmpFrames.frame.top);
+ t.setWindowCrop(leash, mTmpFrames.frame.width(), mTmpFrames.frame.height());
if (viewFlags == View.VISIBLE) {
// TODO(b/262892794) ViewRootImpl modifies the app's rendering SurfaceControl