diff options
| -rw-r--r-- | core/java/android/view/SurfaceControlViewHost.java | 4 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 7 | ||||
| -rw-r--r-- | core/java/android/view/WindowManagerGlobal.java | 3 | ||||
| -rw-r--r-- | core/java/android/view/WindowlessWindowLayout.java | 69 | ||||
| -rw-r--r-- | core/java/android/view/WindowlessWindowManager.java | 32 |
5 files changed, 26 insertions, 89 deletions
diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java index c9eee6a5c9f8..3efbb75f281e 100644 --- a/core/java/android/view/SurfaceControlViewHost.java +++ b/core/java/android/view/SurfaceControlViewHost.java @@ -292,7 +292,7 @@ public class SurfaceControlViewHost { 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 @@ public class SurfaceControlViewHost { 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 e2608cd9d96e..3502c34091a2 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -921,14 +921,13 @@ public final class ViewRootImpl implements ViewParent, 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 4a9dc5b14a71..acc0c0bad1f8 100644 --- a/core/java/android/view/WindowManagerGlobal.java +++ b/core/java/android/view/WindowManagerGlobal.java @@ -388,8 +388,7 @@ public final class WindowManagerGlobal { 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 6fb01f2a7823..000000000000 --- 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 021193e8d918..4ddd4858785e 100644 --- a/core/java/android/view/WindowlessWindowManager.java +++ b/core/java/android/view/WindowlessWindowManager.java @@ -94,7 +94,10 @@ public class WindowlessWindowManager implements IWindowSession { 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 @@ public class WindowlessWindowManager implements IWindowSession { } 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); + if (state.mAttachedFrame == null) { + mTmpWindowBounds.set(0, 0, requestedWidth, requestedHeight); + } else { + mTmpWindowBounds.set(state.mAttachedFrame); + } + + mLayout.computeFrames(attrs, mTmpInsetsState, mTmpDisplayCutoutSafe, mTmpWindowBounds, + WindowConfiguration.WINDOWING_MODE_UNDEFINED, requestedWidth, requestedHeight, 0, + 1f, mTmpFrames); - state.mFrame.set(frames.frame); + state.mFrame.set(mTmpFrames.frame); if (outFrames != null) { - outFrames.frame.set(frames.frame); - outFrames.parentFrame.set(frames.parentFrame); - outFrames.displayFrame.set(frames.displayFrame); + outFrames.frame.set(mTmpFrames.frame); + outFrames.parentFrame.set(mTmpFrames.parentFrame); + outFrames.displayFrame.set(mTmpFrames.displayFrame); } - t.setPosition(leash, frames.frame.left, frames.frame.top); - t.setWindowCrop(leash, frames.frame.width(), frames.frame.height()); + 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 |