Update controls after addToDisplay/relayout before dispatching insets
A window might request to control insets before it is added to WM and
expect the first dispatched WindowInsets as requested.
The first insets state returned from addToDisplay or relayout might be
not expected if the window just become thecontrol target in the
function.
With this CL, WM can return controls from addToDisplay and relayout, so
that the client can apply controls immediately, and update controlled
insets sources before dispatching the insets to the view hierarchy. This
enaures the insets dispatched are up-to-date.
Fix: 150756571
Test: atest WindowInsetsControllerTests RelayoutPerfTest
WindowAddRemovePerfTest
Change-Id: Ib78c24beb7af5a54ad78935c3ddb260ef9645212
This commit is contained in:
@@ -30,6 +30,7 @@ import android.util.MergedConfiguration;
|
||||
import android.view.DisplayCutout;
|
||||
import android.view.IWindow;
|
||||
import android.view.IWindowSession;
|
||||
import android.view.InsetsSourceControl;
|
||||
import android.view.InsetsState;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.View;
|
||||
@@ -120,6 +121,7 @@ public class RelayoutPerfTest extends WindowManagerPerfTestBase {
|
||||
new DisplayCutout.ParcelableWrapper(DisplayCutout.NO_CUTOUT);
|
||||
final MergedConfiguration mOutMergedConfiguration = new MergedConfiguration();
|
||||
final InsetsState mOutInsetsState = new InsetsState();
|
||||
final InsetsSourceControl[] mOutControls = new InsetsSourceControl[0];
|
||||
final IWindow mWindow;
|
||||
final View mView;
|
||||
final WindowManager.LayoutParams mParams;
|
||||
@@ -152,7 +154,7 @@ public class RelayoutPerfTest extends WindowManagerPerfTestBase {
|
||||
mViewVisibility.getAsInt(), mFlags, mFrameNumber, mOutFrame,
|
||||
mOutContentInsets, mOutVisibleInsets, mOutStableInsets,
|
||||
mOutBackDropFrame, mOutDisplayCutout, mOutMergedConfiguration,
|
||||
mOutSurfaceControl, mOutInsetsState, mOutSurfaceSize,
|
||||
mOutSurfaceControl, mOutInsetsState, mOutControls, mOutSurfaceSize,
|
||||
mOutBlastSurfaceControl);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.view.Display;
|
||||
import android.view.DisplayCutout;
|
||||
import android.view.IWindowSession;
|
||||
import android.view.InputChannel;
|
||||
import android.view.InsetsSourceControl;
|
||||
import android.view.InsetsState;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
@@ -91,6 +92,7 @@ public class WindowAddRemovePerfTest extends WindowManagerPerfTestBase
|
||||
final DisplayCutout.ParcelableWrapper mOutDisplayCutout =
|
||||
new DisplayCutout.ParcelableWrapper();
|
||||
final InsetsState mOutInsetsState = new InsetsState();
|
||||
final InsetsSourceControl[] mOutControls = new InsetsSourceControl[0];
|
||||
|
||||
TestWindow() {
|
||||
mLayoutParams.setTitle(TestWindow.class.getName());
|
||||
@@ -109,7 +111,7 @@ public class WindowAddRemovePerfTest extends WindowManagerPerfTestBase
|
||||
long startTime = SystemClock.elapsedRealtimeNanos();
|
||||
session.addToDisplay(this, mSeq, mLayoutParams, View.VISIBLE,
|
||||
Display.DEFAULT_DISPLAY, mOutFrame, mOutContentInsets, mOutStableInsets,
|
||||
mOutDisplayCutout, inputChannel, mOutInsetsState);
|
||||
mOutDisplayCutout, inputChannel, mOutInsetsState, mOutControls);
|
||||
final long elapsedTimeNsOfAdd = SystemClock.elapsedRealtimeNanos() - startTime;
|
||||
state.addExtraResult("add", elapsedTimeNsOfAdd);
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ import android.view.InputChannel;
|
||||
import android.view.InputDevice;
|
||||
import android.view.InputEvent;
|
||||
import android.view.InputEventReceiver;
|
||||
import android.view.InsetsSourceControl;
|
||||
import android.view.InsetsState;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.SurfaceControl;
|
||||
@@ -190,6 +191,7 @@ public abstract class WallpaperService extends Service {
|
||||
new DisplayCutout.ParcelableWrapper();
|
||||
DisplayCutout mDispatchedDisplayCutout = DisplayCutout.NO_CUTOUT;
|
||||
final InsetsState mInsetsState = new InsetsState();
|
||||
final InsetsSourceControl[] mTempControls = new InsetsSourceControl[0];
|
||||
final MergedConfiguration mMergedConfiguration = new MergedConfiguration();
|
||||
private final Point mSurfaceSize = new Point();
|
||||
|
||||
@@ -878,7 +880,7 @@ public abstract class WallpaperService extends Service {
|
||||
if (mSession.addToDisplay(mWindow, mWindow.mSeq, mLayout, View.VISIBLE,
|
||||
mDisplay.getDisplayId(), mWinFrame, mContentInsets, mStableInsets,
|
||||
mDisplayCutout, inputChannel,
|
||||
mInsetsState) < 0) {
|
||||
mInsetsState, mTempControls) < 0) {
|
||||
Log.w(TAG, "Failed to add window while updating wallpaper surface.");
|
||||
return;
|
||||
}
|
||||
@@ -903,7 +905,7 @@ public abstract class WallpaperService extends Service {
|
||||
View.VISIBLE, 0, -1, mWinFrame, mContentInsets,
|
||||
mVisibleInsets, mStableInsets, mBackdropFrame,
|
||||
mDisplayCutout, mMergedConfiguration, mSurfaceControl,
|
||||
mInsetsState, mSurfaceSize, mTmpSurfaceControl);
|
||||
mInsetsState, mTempControls, mSurfaceSize, mTmpSurfaceControl);
|
||||
if (mSurfaceControl.isValid()) {
|
||||
mSurfaceHolder.mSurface.copyFrom(mSurfaceControl);
|
||||
mSurfaceControl.release();
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.view.IWindow;
|
||||
import android.view.IWindowId;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.WindowManager;
|
||||
import android.view.InsetsSourceControl;
|
||||
import android.view.InsetsState;
|
||||
import android.view.Surface;
|
||||
import android.view.SurfaceControl;
|
||||
@@ -46,7 +47,7 @@ interface IWindowSession {
|
||||
in int viewVisibility, in int layerStackId, out Rect outFrame,
|
||||
out Rect outContentInsets, out Rect outStableInsets,
|
||||
out DisplayCutout.ParcelableWrapper displayCutout, out InputChannel outInputChannel,
|
||||
out InsetsState insetsState);
|
||||
out InsetsState insetsState, out InsetsSourceControl[] activeControls);
|
||||
int addToDisplayWithoutInputChannel(IWindow window, int seq, in WindowManager.LayoutParams attrs,
|
||||
in int viewVisibility, in int layerStackId, out Rect outContentInsets,
|
||||
out Rect outStableInsets, out InsetsState insetsState);
|
||||
@@ -106,8 +107,8 @@ interface IWindowSession {
|
||||
out Rect outBackdropFrame,
|
||||
out DisplayCutout.ParcelableWrapper displayCutout,
|
||||
out MergedConfiguration outMergedConfiguration, out SurfaceControl outSurfaceControl,
|
||||
out InsetsState insetsState, out Point outSurfaceSize,
|
||||
out SurfaceControl outBlastSurfaceControl);
|
||||
out InsetsState insetsState, out InsetsSourceControl[] activeControls,
|
||||
out Point outSurfaceSize, out SurfaceControl outBlastSurfaceControl);
|
||||
|
||||
/*
|
||||
* Notify the window manager that an application is relaunching and
|
||||
|
||||
@@ -21,6 +21,7 @@ import static android.view.Display.INVALID_DISPLAY;
|
||||
import static android.view.InputDevice.SOURCE_CLASS_NONE;
|
||||
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
|
||||
import static android.view.InsetsState.ITYPE_STATUS_BAR;
|
||||
import static android.view.InsetsState.LAST_TYPE;
|
||||
import static android.view.View.PFLAG_DRAW_ANIMATION;
|
||||
import static android.view.View.SYSTEM_UI_FLAG_FULLSCREEN;
|
||||
import static android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
|
||||
@@ -558,7 +559,8 @@ public final class ViewRootImpl implements ViewParent,
|
||||
final DisplayCutout.ParcelableWrapper mPendingDisplayCutout =
|
||||
new DisplayCutout.ParcelableWrapper(DisplayCutout.NO_CUTOUT);
|
||||
boolean mPendingAlwaysConsumeSystemBars;
|
||||
private InsetsState mTempInsets = new InsetsState();
|
||||
private final InsetsState mTempInsets = new InsetsState();
|
||||
private final InsetsSourceControl[] mTempControls = new InsetsSourceControl[LAST_TYPE + 1];
|
||||
final ViewTreeObserver.InternalInsetsInfo mLastGivenInsets
|
||||
= new ViewTreeObserver.InternalInsetsInfo();
|
||||
|
||||
@@ -995,7 +997,7 @@ public final class ViewRootImpl implements ViewParent,
|
||||
getHostVisibility(), mDisplay.getDisplayId(), mTmpFrame,
|
||||
mAttachInfo.mContentInsets, mAttachInfo.mStableInsets,
|
||||
mAttachInfo.mDisplayCutout, inputChannel,
|
||||
mTempInsets);
|
||||
mTempInsets, mTempControls);
|
||||
setFrame(mTmpFrame);
|
||||
} catch (RemoteException e) {
|
||||
mAdded = false;
|
||||
@@ -1020,6 +1022,7 @@ public final class ViewRootImpl implements ViewParent,
|
||||
(res & WindowManagerGlobal.ADD_FLAG_ALWAYS_CONSUME_SYSTEM_BARS) != 0;
|
||||
mPendingAlwaysConsumeSystemBars = mAttachInfo.mAlwaysConsumeSystemBars;
|
||||
mInsetsController.onStateChanged(mTempInsets);
|
||||
mInsetsController.onControlsChanged(mTempControls);
|
||||
if (DEBUG_LAYOUT) Log.v(mTag, "Added window " + mWindow);
|
||||
if (res < WindowManagerGlobal.ADD_OKAY) {
|
||||
mAttachInfo.mRootView = null;
|
||||
@@ -7348,7 +7351,7 @@ public final class ViewRootImpl implements ViewParent,
|
||||
insetsPending ? WindowManagerGlobal.RELAYOUT_INSETS_PENDING : 0, frameNumber,
|
||||
mTmpFrame, mTmpRect, mTmpRect, mTmpRect, mPendingBackDropFrame,
|
||||
mPendingDisplayCutout, mPendingMergedConfiguration, mSurfaceControl, mTempInsets,
|
||||
mSurfaceSize, mBlastSurfaceControl);
|
||||
mTempControls, mSurfaceSize, mBlastSurfaceControl);
|
||||
if (mSurfaceControl.isValid()) {
|
||||
if (!mUseBLASTAdapter) {
|
||||
mSurface.copyFrom(mSurfaceControl);
|
||||
@@ -7378,6 +7381,7 @@ public final class ViewRootImpl implements ViewParent,
|
||||
}
|
||||
setFrame(mTmpFrame);
|
||||
mInsetsController.onStateChanged(mTempInsets);
|
||||
mInsetsController.onControlsChanged(mTempControls);
|
||||
return relayoutResult;
|
||||
}
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ public class WindowlessWindowManager implements IWindowSession {
|
||||
int viewVisibility, int displayId, Rect outFrame, Rect outContentInsets,
|
||||
Rect outStableInsets,
|
||||
DisplayCutout.ParcelableWrapper outDisplayCutout, InputChannel outInputChannel,
|
||||
InsetsState outInsetsState) {
|
||||
InsetsState outInsetsState, InsetsSourceControl[] outActiveControls) {
|
||||
final SurfaceControl.Builder b = new SurfaceControl.Builder(mSurfaceSession)
|
||||
.setParent(mRootSurface)
|
||||
.setFormat(attrs.format)
|
||||
@@ -179,7 +179,8 @@ public class WindowlessWindowManager implements IWindowSession {
|
||||
Rect outStableInsets, Rect outBackdropFrame,
|
||||
DisplayCutout.ParcelableWrapper cutout, MergedConfiguration mergedConfiguration,
|
||||
SurfaceControl outSurfaceControl, InsetsState outInsetsState,
|
||||
Point outSurfaceSize, SurfaceControl outBLASTSurfaceControl) {
|
||||
InsetsSourceControl[] outActiveControls, Point outSurfaceSize,
|
||||
SurfaceControl outBLASTSurfaceControl) {
|
||||
final State state;
|
||||
synchronized (this) {
|
||||
state = mStateForWindow.get(window.asBinder());
|
||||
|
||||
@@ -256,12 +256,13 @@ public class SystemWindows {
|
||||
Rect outVisibleInsets, Rect outStableInsets,
|
||||
DisplayCutout.ParcelableWrapper cutout, MergedConfiguration mergedConfiguration,
|
||||
SurfaceControl outSurfaceControl, InsetsState outInsetsState,
|
||||
Point outSurfaceSize, SurfaceControl outBLASTSurfaceControl) {
|
||||
InsetsSourceControl[] outActiveControls, Point outSurfaceSize,
|
||||
SurfaceControl outBLASTSurfaceControl) {
|
||||
int res = super.relayout(window, seq, attrs, requestedWidth, requestedHeight,
|
||||
viewVisibility, flags, frameNumber, outFrame, outOverscanInsets,
|
||||
outContentInsets, outVisibleInsets, outStableInsets,
|
||||
cutout, mergedConfiguration, outSurfaceControl, outInsetsState,
|
||||
outSurfaceSize, outBLASTSurfaceControl);
|
||||
outActiveControls, outSurfaceSize, outBLASTSurfaceControl);
|
||||
if (res != 0) {
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ import android.view.IWindowId;
|
||||
import android.view.IWindowSession;
|
||||
import android.view.IWindowSessionCallback;
|
||||
import android.view.InputChannel;
|
||||
import android.view.InsetsSourceControl;
|
||||
import android.view.InsetsState;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.SurfaceSession;
|
||||
@@ -158,10 +159,10 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
|
||||
int viewVisibility, int displayId, Rect outFrame, Rect outContentInsets,
|
||||
Rect outStableInsets,
|
||||
DisplayCutout.ParcelableWrapper outDisplayCutout, InputChannel outInputChannel,
|
||||
InsetsState outInsetsState) {
|
||||
InsetsState outInsetsState, InsetsSourceControl[] outActiveControls) {
|
||||
return mService.addWindow(this, window, seq, attrs, viewVisibility, displayId, outFrame,
|
||||
outContentInsets, outStableInsets, outDisplayCutout, outInputChannel,
|
||||
outInsetsState);
|
||||
outInsetsState, outActiveControls);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -171,7 +172,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
|
||||
return mService.addWindow(this, window, seq, attrs, viewVisibility, displayId,
|
||||
new Rect() /* outFrame */, outContentInsets, outStableInsets,
|
||||
new DisplayCutout.ParcelableWrapper() /* cutout */, null /* outInputChannel */,
|
||||
outInsetsState);
|
||||
outInsetsState, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -191,7 +192,8 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
|
||||
Rect outStableInsets, Rect outBackdropFrame,
|
||||
DisplayCutout.ParcelableWrapper cutout, MergedConfiguration mergedConfiguration,
|
||||
SurfaceControl outSurfaceControl, InsetsState outInsetsState,
|
||||
Point outSurfaceSize, SurfaceControl outBLASTSurfaceControl) {
|
||||
InsetsSourceControl[] outActiveControls, Point outSurfaceSize,
|
||||
SurfaceControl outBLASTSurfaceControl) {
|
||||
if (false) Slog.d(TAG_WM, ">>>>>> ENTERED relayout from "
|
||||
+ Binder.getCallingPid());
|
||||
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, mRelayoutTag);
|
||||
@@ -199,8 +201,8 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
|
||||
requestedWidth, requestedHeight, viewFlags, flags, frameNumber,
|
||||
outFrame, outContentInsets, outVisibleInsets,
|
||||
outStableInsets, outBackdropFrame, cutout,
|
||||
mergedConfiguration, outSurfaceControl, outInsetsState, outSurfaceSize,
|
||||
outBLASTSurfaceControl);
|
||||
mergedConfiguration, outSurfaceControl, outInsetsState, outActiveControls,
|
||||
outSurfaceSize, outBLASTSurfaceControl);
|
||||
Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
|
||||
if (false) Slog.d(TAG_WM, "<<<<<< EXITING relayout to "
|
||||
+ Binder.getCallingPid());
|
||||
|
||||
@@ -68,6 +68,7 @@ import android.util.MergedConfiguration;
|
||||
import android.util.Slog;
|
||||
import android.view.DisplayCutout;
|
||||
import android.view.IWindowSession;
|
||||
import android.view.InsetsSourceControl;
|
||||
import android.view.InsetsState;
|
||||
import android.view.Surface;
|
||||
import android.view.SurfaceControl;
|
||||
@@ -164,6 +165,7 @@ class TaskSnapshotSurface implements StartingSurface {
|
||||
final Rect tmpContentInsets = new Rect();
|
||||
final Rect tmpStableInsets = new Rect();
|
||||
final InsetsState mTmpInsetsState = new InsetsState();
|
||||
final InsetsSourceControl[] mTempControls = new InsetsSourceControl[0];
|
||||
final MergedConfiguration tmpMergedConfiguration = new MergedConfiguration();
|
||||
final TaskDescription taskDescription = new TaskDescription();
|
||||
taskDescription.setBackgroundColor(WHITE);
|
||||
@@ -231,8 +233,8 @@ class TaskSnapshotSurface implements StartingSurface {
|
||||
}
|
||||
try {
|
||||
final int res = session.addToDisplay(window, window.mSeq, layoutParams,
|
||||
View.GONE, activity.getDisplayContent().getDisplayId(), tmpFrame, tmpRect, tmpRect,
|
||||
tmpCutout, null, mTmpInsetsState);
|
||||
View.GONE, activity.getDisplayContent().getDisplayId(), tmpFrame, tmpRect,
|
||||
tmpRect, tmpCutout, null, mTmpInsetsState, mTempControls);
|
||||
if (res < 0) {
|
||||
Slog.w(TAG, "Failed to add snapshot starting window res=" + res);
|
||||
return null;
|
||||
@@ -249,7 +251,7 @@ class TaskSnapshotSurface implements StartingSurface {
|
||||
session.relayout(window, window.mSeq, layoutParams, -1, -1, View.VISIBLE, 0, -1,
|
||||
tmpFrame, tmpContentInsets, tmpRect, tmpStableInsets, tmpRect,
|
||||
tmpCutout, tmpMergedConfiguration, surfaceControl, mTmpInsetsState,
|
||||
sTmpSurfaceSize, sTmpSurfaceControl);
|
||||
mTempControls, sTmpSurfaceSize, sTmpSurfaceControl);
|
||||
} catch (RemoteException e) {
|
||||
// Local call.
|
||||
}
|
||||
|
||||
@@ -227,6 +227,7 @@ import android.view.InputChannel;
|
||||
import android.view.InputDevice;
|
||||
import android.view.InputEvent;
|
||||
import android.view.InputWindowHandle;
|
||||
import android.view.InsetsSourceControl;
|
||||
import android.view.InsetsState;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MagnificationSpec;
|
||||
@@ -1356,7 +1357,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
LayoutParams attrs, int viewVisibility, int displayId, Rect outFrame,
|
||||
Rect outContentInsets, Rect outStableInsets,
|
||||
DisplayCutout.ParcelableWrapper outDisplayCutout, InputChannel outInputChannel,
|
||||
InsetsState outInsetsState) {
|
||||
InsetsState outInsetsState, InsetsSourceControl[] outActiveControls) {
|
||||
int[] appOp = new int[1];
|
||||
final boolean isRoundedCornerOverlay = (attrs.privateFlags
|
||||
& PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY) != 0;
|
||||
@@ -1643,8 +1644,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
outStableInsets, outDisplayCutout)) {
|
||||
res |= WindowManagerGlobal.ADD_FLAG_ALWAYS_CONSUME_SYSTEM_BARS;
|
||||
}
|
||||
outInsetsState.set(win.getInsetsState(),
|
||||
win.mClient instanceof IWindow.Stub /* copySource */);
|
||||
outInsetsState.set(win.getInsetsState(), win.isClientLocal());
|
||||
|
||||
if (mInTouchMode) {
|
||||
res |= WindowManagerGlobal.ADD_FLAG_IN_TOUCH_MODE;
|
||||
@@ -1678,6 +1678,8 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
}
|
||||
displayContent.getInputMonitor().updateInputWindowsLw(false /*force*/);
|
||||
|
||||
getInsetsSourceControls(win, outActiveControls);
|
||||
|
||||
ProtoLog.v(WM_DEBUG_ADD_REMOVE, "addWindow: New client %s"
|
||||
+ ": window=%s Callers=%s", client.asBinder(), win, Debug.getCallers(5));
|
||||
|
||||
@@ -2080,7 +2082,8 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
Rect outVisibleInsets, Rect outStableInsets, Rect outBackdropFrame,
|
||||
DisplayCutout.ParcelableWrapper outCutout, MergedConfiguration mergedConfiguration,
|
||||
SurfaceControl outSurfaceControl, InsetsState outInsetsState,
|
||||
Point outSurfaceSize, SurfaceControl outBLASTSurfaceControl) {
|
||||
InsetsSourceControl[] outActiveControls, Point outSurfaceSize,
|
||||
SurfaceControl outBLASTSurfaceControl) {
|
||||
int result = 0;
|
||||
boolean configChanged;
|
||||
final int pid = Binder.getCallingPid();
|
||||
@@ -2375,8 +2378,8 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
outStableInsets);
|
||||
outCutout.set(win.getWmDisplayCutout().getDisplayCutout());
|
||||
outBackdropFrame.set(win.getBackdropFrame(win.getFrameLw()));
|
||||
outInsetsState.set(win.getInsetsState(),
|
||||
win.mClient instanceof IWindow.Stub /* copySource */);
|
||||
outInsetsState.set(win.getInsetsState(), win.isClientLocal());
|
||||
getInsetsSourceControls(win, outActiveControls);
|
||||
if (DEBUG) {
|
||||
Slog.v(TAG_WM, "Relayout given client " + client.asBinder()
|
||||
+ ", requestedWidth=" + requestedWidth
|
||||
@@ -2413,6 +2416,21 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
return result;
|
||||
}
|
||||
|
||||
private void getInsetsSourceControls(WindowState win, InsetsSourceControl[] outControls) {
|
||||
if (outControls != null) {
|
||||
final InsetsSourceControl[] controls =
|
||||
win.getDisplayContent().getInsetsStateController().getControlsForDispatch(win);
|
||||
Arrays.fill(outControls, null);
|
||||
if (controls != null) {
|
||||
final int length = Math.min(controls.length, outControls.length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
outControls[i] = win.isClientLocal()
|
||||
? new InsetsSourceControl(controls[i]) : controls[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean tryStartExitingAnimation(WindowState win, WindowStateAnimator winAnimator,
|
||||
boolean focusMayChange) {
|
||||
// Try starting an animation; if there isn't one, we
|
||||
|
||||
@@ -3477,6 +3477,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
|
||||
}
|
||||
|
||||
boolean isClientLocal() {
|
||||
return mClient instanceof IWindow.Stub;
|
||||
}
|
||||
|
||||
void updateLocationInParentDisplayIfNeeded() {
|
||||
final int embeddedDisplayContentsSize = mEmbeddedDisplayContents.size();
|
||||
// If there is any embedded display which is re-parented to this window, we need to
|
||||
|
||||
Reference in New Issue
Block a user