Merge "Revert "Pass LayoutParams from SCVH to Parent window"" into udc-qpr-dev
This commit is contained in:
@@ -19,7 +19,6 @@ package android.view;
|
||||
import android.content.res.Configuration;
|
||||
import android.graphics.Rect;
|
||||
import android.view.InsetsState;
|
||||
import android.view.ISurfaceControlViewHostParent;
|
||||
import android.window.ISurfaceSyncGroup;
|
||||
|
||||
/**
|
||||
@@ -35,9 +34,4 @@ interface ISurfaceControlViewHost {
|
||||
oneway void onDispatchDetachedFromWindow();
|
||||
oneway void onInsetsChanged(in InsetsState state, in Rect insetFrame);
|
||||
ISurfaceSyncGroup getSurfaceSyncGroup();
|
||||
/**
|
||||
* Attaches the parent interface so the embedded content can communicate back to the parent.
|
||||
* If null is passed in, it will remove the parent interface and no more updates will be sent.
|
||||
*/
|
||||
oneway void attachParentInterface(in @nullable ISurfaceControlViewHostParent parentInterface);
|
||||
}
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
/*
|
||||
** Copyright 2023, 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 android.view.WindowManager;
|
||||
|
||||
/**
|
||||
* API from embedded content in SurfaceControlViewHost to parent containing the embedded.
|
||||
* {@hide}
|
||||
*/
|
||||
oneway interface ISurfaceControlViewHostParent {
|
||||
void updateParams(in WindowManager.LayoutParams[] childAttrs);
|
||||
}
|
||||
@@ -54,7 +54,7 @@ public class SurfaceControlViewHost {
|
||||
private final static String TAG = "SurfaceControlViewHost";
|
||||
private final ViewRootImpl mViewRoot;
|
||||
private final CloseGuard mCloseGuard = CloseGuard.get();
|
||||
private final WindowlessWindowManager mWm;
|
||||
private WindowlessWindowManager mWm;
|
||||
|
||||
private SurfaceControl mSurfaceControl;
|
||||
private IAccessibilityEmbeddedConnection mAccessibilityEmbeddedConnection;
|
||||
@@ -67,7 +67,9 @@ public class SurfaceControlViewHost {
|
||||
return;
|
||||
}
|
||||
mViewRoot.mHandler.post(() -> {
|
||||
mWm.setConfiguration(configuration);
|
||||
if (mWm != null) {
|
||||
mWm.setConfiguration(configuration);
|
||||
}
|
||||
if (mViewRoot != null) {
|
||||
mViewRoot.forceWmRelayout();
|
||||
}
|
||||
@@ -114,11 +116,6 @@ public class SurfaceControlViewHost {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attachParentInterface(@Nullable ISurfaceControlViewHostParent parentInterface) {
|
||||
mViewRoot.mHandler.post(() -> mWm.setParentInterface(parentInterface));
|
||||
}
|
||||
}
|
||||
|
||||
private ISurfaceControlViewHost mRemoteInterface = new ISurfaceControlViewHostImpl();
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package android.view;
|
||||
|
||||
import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
|
||||
import static android.view.WindowManagerPolicyConstants.APPLICATION_MEDIA_OVERLAY_SUBLAYER;
|
||||
import static android.view.WindowManagerPolicyConstants.APPLICATION_MEDIA_SUBLAYER;
|
||||
import static android.view.WindowManagerPolicyConstants.APPLICATION_PANEL_SUBLAYER;
|
||||
@@ -41,7 +40,6 @@ import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Looper;
|
||||
import android.os.RemoteException;
|
||||
import android.os.SystemClock;
|
||||
import android.util.ArraySet;
|
||||
import android.util.AttributeSet;
|
||||
@@ -56,8 +54,6 @@ import com.android.internal.view.SurfaceCallbackHelper;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.function.Consumer;
|
||||
@@ -306,26 +302,6 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
private SurfaceControl mBlastSurfaceControl;
|
||||
private BLASTBufferQueue mBlastBufferQueue;
|
||||
|
||||
private final ConcurrentLinkedQueue<WindowManager.LayoutParams> mEmbeddedWindowParams =
|
||||
new ConcurrentLinkedQueue<>();
|
||||
|
||||
private final ISurfaceControlViewHostParent mSurfaceControlViewHostParent =
|
||||
new ISurfaceControlViewHostParent.Stub() {
|
||||
@Override
|
||||
public void updateParams(WindowManager.LayoutParams[] childAttrs) {
|
||||
mEmbeddedWindowParams.clear();
|
||||
mEmbeddedWindowParams.addAll(Arrays.asList(childAttrs));
|
||||
|
||||
if (isAttachedToWindow()) {
|
||||
runOnUiThread(() -> {
|
||||
if (mParent != null) {
|
||||
mParent.recomputeViewAttributes(SurfaceView.this);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public SurfaceView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
@@ -825,18 +801,9 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
mBlastSurfaceControl = null;
|
||||
}
|
||||
|
||||
if (mSurfacePackage != null) {
|
||||
try {
|
||||
mSurfacePackage.getRemoteInterface().attachParentInterface(null);
|
||||
mEmbeddedWindowParams.clear();
|
||||
} catch (RemoteException e) {
|
||||
Log.d(TAG, "Failed to remove parent interface from SCVH. Likely SCVH is "
|
||||
+ "already dead");
|
||||
}
|
||||
if (releaseSurfacePackage) {
|
||||
mSurfacePackage.release();
|
||||
mSurfacePackage = null;
|
||||
}
|
||||
if (releaseSurfacePackage && mSurfacePackage != null) {
|
||||
mSurfacePackage.release();
|
||||
mSurfacePackage = null;
|
||||
}
|
||||
|
||||
applyTransactionOnVriDraw(transaction);
|
||||
@@ -1887,12 +1854,6 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
applyTransactionOnVriDraw(transaction);
|
||||
}
|
||||
mSurfacePackage = p;
|
||||
try {
|
||||
mSurfacePackage.getRemoteInterface().attachParentInterface(
|
||||
mSurfaceControlViewHostParent);
|
||||
} catch (RemoteException e) {
|
||||
Log.d(TAG, "Failed to attach parent interface to SCVH. Likely SCVH is already dead.");
|
||||
}
|
||||
|
||||
if (isFocused()) {
|
||||
requestEmbeddedFocus(true);
|
||||
@@ -2053,19 +2014,4 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
mBlastBufferQueue.mergeWithNextTransaction(transaction, frameNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void performCollectViewAttributes(AttachInfo attachInfo, int visibility) {
|
||||
super.performCollectViewAttributes(attachInfo, visibility);
|
||||
if (mEmbeddedWindowParams.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (WindowManager.LayoutParams embeddedWindowAttr : mEmbeddedWindowParams) {
|
||||
if ((embeddedWindowAttr.flags & FLAG_KEEP_SCREEN_ON) == FLAG_KEEP_SCREEN_ON) {
|
||||
attachInfo.mKeepScreenOn = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,8 +49,7 @@ public class WindowlessWindowManager implements IWindowSession {
|
||||
|
||||
private class State {
|
||||
SurfaceControl mSurfaceControl;
|
||||
final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
|
||||
final WindowManager.LayoutParams mLastReportedParams = new WindowManager.LayoutParams();
|
||||
WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
|
||||
int mDisplayId;
|
||||
IBinder mInputChannelToken;
|
||||
Region mInputRegion;
|
||||
@@ -95,8 +94,6 @@ public class WindowlessWindowManager implements IWindowSession {
|
||||
private final MergedConfiguration mTmpConfig = new MergedConfiguration();
|
||||
private final WindowlessWindowLayout mLayout = new WindowlessWindowLayout();
|
||||
|
||||
private ISurfaceControlViewHostParent mParentInterface;
|
||||
|
||||
public WindowlessWindowManager(Configuration c, SurfaceControl rootSurface,
|
||||
IBinder hostInputToken) {
|
||||
mRootSurface = rootSurface;
|
||||
@@ -247,7 +244,6 @@ public class WindowlessWindowManager implements IWindowSession {
|
||||
final int res = WindowManagerGlobal.ADD_OKAY | WindowManagerGlobal.ADD_FLAG_APP_VISIBLE |
|
||||
WindowManagerGlobal.ADD_FLAG_USE_BLAST;
|
||||
|
||||
sendLayoutParamsToParent();
|
||||
// Include whether the window is in touch mode.
|
||||
return isInTouchModeInternal(displayId) ? res | WindowManagerGlobal.ADD_FLAG_IN_TOUCH_MODE
|
||||
: res;
|
||||
@@ -429,7 +425,6 @@ public class WindowlessWindowManager implements IWindowSession {
|
||||
outInsetsState.set(mInsetsState);
|
||||
}
|
||||
|
||||
sendLayoutParamsToParent();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -650,45 +645,4 @@ public class WindowlessWindowManager implements IWindowSession {
|
||||
" we shouldn't get here!");
|
||||
return false;
|
||||
}
|
||||
|
||||
void setParentInterface(@Nullable ISurfaceControlViewHostParent parentInterface) {
|
||||
IBinder oldInterface = mParentInterface == null ? null : mParentInterface.asBinder();
|
||||
IBinder newInterface = parentInterface == null ? null : parentInterface.asBinder();
|
||||
// If the parent interface has changed, it needs to clear the last reported params so it
|
||||
// will update the new interface with the params.
|
||||
if (oldInterface != newInterface) {
|
||||
clearLastReportedParams();
|
||||
}
|
||||
mParentInterface = parentInterface;
|
||||
sendLayoutParamsToParent();
|
||||
}
|
||||
|
||||
private void clearLastReportedParams() {
|
||||
WindowManager.LayoutParams emptyParam = new WindowManager.LayoutParams();
|
||||
for (State windowInfo : mStateForWindow.values()) {
|
||||
windowInfo.mLastReportedParams.copyFrom(emptyParam);
|
||||
}
|
||||
}
|
||||
|
||||
private void sendLayoutParamsToParent() {
|
||||
if (mParentInterface == null) {
|
||||
return;
|
||||
}
|
||||
WindowManager.LayoutParams[] params =
|
||||
new WindowManager.LayoutParams[mStateForWindow.size()];
|
||||
int index = 0;
|
||||
boolean hasChanges = false;
|
||||
for (State windowInfo : mStateForWindow.values()) {
|
||||
int changes = windowInfo.mLastReportedParams.copyFrom(windowInfo.mParams);
|
||||
hasChanges |= (changes != 0);
|
||||
params[index++] = windowInfo.mParams;
|
||||
}
|
||||
|
||||
if (hasChanges) {
|
||||
try {
|
||||
mParentInterface.updateParams(params);
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user