Loading core/java/android/view/SurfaceControlViewHost.java +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading core/java/android/view/ViewRootImpl.java +3 −4 Original line number Diff line number Diff line Loading @@ -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(); Loading core/java/android/view/WindowManagerGlobal.java +1 −2 Original line number Diff line number Diff line Loading @@ -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); Loading core/java/android/view/WindowlessWindowLayout.javadeleted 100644 → 0 +0 −69 Original line number Diff line number Diff line /* * 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; } } core/java/android/view/WindowlessWindowManager.java +20 −12 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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 Loading Loading
core/java/android/view/SurfaceControlViewHost.java +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading
core/java/android/view/ViewRootImpl.java +3 −4 Original line number Diff line number Diff line Loading @@ -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(); Loading
core/java/android/view/WindowManagerGlobal.java +1 −2 Original line number Diff line number Diff line Loading @@ -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); Loading
core/java/android/view/WindowlessWindowLayout.javadeleted 100644 → 0 +0 −69 Original line number Diff line number Diff line /* * 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; } }
core/java/android/view/WindowlessWindowManager.java +20 −12 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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 Loading