Merge "Use the layout frame to decide whether to do a server sync" into tm-qpr-dev
This commit is contained in:
@@ -78,7 +78,6 @@ import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
|
|||||||
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
|
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
|
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
|
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
|
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL;
|
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
|
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
|
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
|
||||||
@@ -712,6 +711,7 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
|
|
||||||
// These are accessed by multiple threads.
|
// These are accessed by multiple threads.
|
||||||
final Rect mWinFrame; // frame given by window manager.
|
final Rect mWinFrame; // frame given by window manager.
|
||||||
|
private final Rect mLastLayoutFrame;
|
||||||
Rect mOverrideInsetsFrame;
|
Rect mOverrideInsetsFrame;
|
||||||
|
|
||||||
final Rect mPendingBackDropFrame = new Rect();
|
final Rect mPendingBackDropFrame = new Rect();
|
||||||
@@ -932,6 +932,7 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
mHeight = -1;
|
mHeight = -1;
|
||||||
mDirty = new Rect();
|
mDirty = new Rect();
|
||||||
mWinFrame = new Rect();
|
mWinFrame = new Rect();
|
||||||
|
mLastLayoutFrame = new Rect();
|
||||||
mWindow = new W(this);
|
mWindow = new W(this);
|
||||||
mLeashToken = new Binder();
|
mLeashToken = new Binder();
|
||||||
mTargetSdkVersion = context.getApplicationInfo().targetSdkVersion;
|
mTargetSdkVersion = context.getApplicationInfo().targetSdkVersion;
|
||||||
@@ -1303,7 +1304,7 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
UNSPECIFIED_LENGTH, UNSPECIFIED_LENGTH,
|
UNSPECIFIED_LENGTH, UNSPECIFIED_LENGTH,
|
||||||
mInsetsController.getRequestedVisibilities(), 1f /* compactScale */,
|
mInsetsController.getRequestedVisibilities(), 1f /* compactScale */,
|
||||||
mTmpFrames);
|
mTmpFrames);
|
||||||
setFrame(mTmpFrames.frame);
|
setFrame(mTmpFrames.frame, true /* withinRelayout */);
|
||||||
registerBackCallbackOnWindow();
|
registerBackCallbackOnWindow();
|
||||||
if (!WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled(mContext)) {
|
if (!WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled(mContext)) {
|
||||||
// For apps requesting legacy back behavior, we add a compat callback that
|
// For apps requesting legacy back behavior, we add a compat callback that
|
||||||
@@ -1824,7 +1825,7 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
onMovedToDisplay(displayId, mLastConfigurationFromResources);
|
onMovedToDisplay(displayId, mLastConfigurationFromResources);
|
||||||
}
|
}
|
||||||
|
|
||||||
setFrame(frame);
|
setFrame(frame, false /* withinRelayout */);
|
||||||
mTmpFrames.displayFrame.set(displayFrame);
|
mTmpFrames.displayFrame.set(displayFrame);
|
||||||
if (mTmpFrames.attachedFrame != null && attachedFrame != null) {
|
if (mTmpFrames.attachedFrame != null && attachedFrame != null) {
|
||||||
mTmpFrames.attachedFrame.set(attachedFrame);
|
mTmpFrames.attachedFrame.set(attachedFrame);
|
||||||
@@ -5740,7 +5741,7 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
mTmpFrames.frame.right = l + w;
|
mTmpFrames.frame.right = l + w;
|
||||||
mTmpFrames.frame.top = t;
|
mTmpFrames.frame.top = t;
|
||||||
mTmpFrames.frame.bottom = t + h;
|
mTmpFrames.frame.bottom = t + h;
|
||||||
setFrame(mTmpFrames.frame);
|
setFrame(mTmpFrames.frame, false /* withinRelayout */);
|
||||||
maybeHandleWindowMove(mWinFrame);
|
maybeHandleWindowMove(mWinFrame);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -8210,7 +8211,7 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
// If the position and the size of the frame are both changed, it will trigger a BLAST
|
// If the position and the size of the frame are both changed, it will trigger a BLAST
|
||||||
// sync, and we still need to call relayout to obtain the syncSeqId. Otherwise, we just
|
// sync, and we still need to call relayout to obtain the syncSeqId. Otherwise, we just
|
||||||
// need to send attributes via relayoutAsync.
|
// need to send attributes via relayoutAsync.
|
||||||
final Rect oldFrame = mWinFrame;
|
final Rect oldFrame = mLastLayoutFrame;
|
||||||
final Rect newFrame = mTmpFrames.frame;
|
final Rect newFrame = mTmpFrames.frame;
|
||||||
final boolean positionChanged =
|
final boolean positionChanged =
|
||||||
newFrame.top != oldFrame.top || newFrame.left != oldFrame.left;
|
newFrame.top != oldFrame.top || newFrame.left != oldFrame.left;
|
||||||
@@ -8340,7 +8341,7 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
params.restore();
|
params.restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
setFrame(mTmpFrames.frame);
|
setFrame(mTmpFrames.frame, true /* withinRelayout */);
|
||||||
return relayoutResult;
|
return relayoutResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8375,8 +8376,18 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
mIsSurfaceOpaque = opaque;
|
mIsSurfaceOpaque = opaque;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setFrame(Rect frame) {
|
/**
|
||||||
|
* Set the mWinFrame of this window.
|
||||||
|
* @param frame the new frame of this window.
|
||||||
|
* @param withinRelayout {@code true} if this setting is within the relayout, or is the initial
|
||||||
|
* setting. That will make sure in the relayout process, we always compare
|
||||||
|
* the window frame with the last processed window frame.
|
||||||
|
*/
|
||||||
|
private void setFrame(Rect frame, boolean withinRelayout) {
|
||||||
mWinFrame.set(frame);
|
mWinFrame.set(frame);
|
||||||
|
if (withinRelayout) {
|
||||||
|
mLastLayoutFrame.set(frame);
|
||||||
|
}
|
||||||
|
|
||||||
final WindowConfiguration winConfig = getCompatWindowConfiguration();
|
final WindowConfiguration winConfig = getCompatWindowConfiguration();
|
||||||
mPendingBackDropFrame.set(mPendingDragResizing && !winConfig.useWindowFrameForBackdrop()
|
mPendingBackDropFrame.set(mPendingDragResizing && !winConfig.useWindowFrameForBackdrop()
|
||||||
|
|||||||
Reference in New Issue
Block a user