Revert "Clarify geometry management for SurfaceView"
This reverts commit 78a45f2bd8794d7a85e7443820862d466edf2324.
Change-Id: I782f688f52a85df84d9facef2fbf88c28f4a7082
diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl
index 3fc70cc..1be2f95 100644
--- a/core/java/android/view/IWindowSession.aidl
+++ b/core/java/android/view/IWindowSession.aidl
@@ -101,24 +101,16 @@
* for the parent window appears. This allows for synchronizing movement of a child
* to repainting the contents of the parent.
*
- * "width" and "height" correspond to the width and height members of
- * WindowManager.LayoutParams in the {@link #relayout relayout()} case.
- * This may differ from the surface buffer size in the
- * case of {@link LayoutParams#FLAG_SCALED} and {@link #relayout relayout()}
- * must be used with requestedWidth/height if this must be changed.
- *
* @param window The window being modified. Must be attached to a parent window
* or this call will fail.
* @param x The new x position
* @param y The new y position
- * @param width The new width
- * @param height The new height
* @param deferTransactionUntilFrame Frame number from our parent (attached) to
* defer this action until.
* @param outFrame Rect in which is placed the new position/size on screen.
*/
- void repositionChild(IWindow childWindow, int left, int top, int right, int bottom,
- long deferTransactionUntilFrame, out Rect outFrame);
+ void repositionChild(IWindow childWindow, int x, int y, long deferTransactionUntilFrame,
+ out Rect outFrame);
/**
* If a call to relayout() asked to have the surface destroy deferred,
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 9843822..dddea21 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -157,10 +157,10 @@
long mLastLockTime = 0;
boolean mVisible = false;
- int mWindowSpaceLeft = -1;
- int mWindowSpaceTop = -1;
- int mWindowSpaceWidth = -1;
- int mWindowSpaceHeight = -1;
+ int mLeft = -1;
+ int mTop = -1;
+ int mWidth = -1;
+ int mHeight = -1;
int mFormat = -1;
final Rect mSurfaceFrame = new Rect();
int mLastSurfaceWidth = -1, mLastSurfaceHeight = -1;
@@ -445,33 +445,32 @@
getLocationInWindow(mLocation);
final boolean creating = mWindow == null;
final boolean formatChanged = mFormat != mRequestedFormat;
- final boolean sizeChanged = mWindowSpaceWidth != myWidth || mWindowSpaceHeight != myHeight;
+ final boolean sizeChanged = mWidth != myWidth || mHeight != myHeight;
final boolean visibleChanged = mVisible != mRequestedVisible;
- final boolean layoutSizeChanged = getWidth() != mLayout.width
- || getHeight() != mLayout.height;
- final boolean positionChanged = mWindowSpaceLeft != mLocation[0] || mWindowSpaceTop != mLocation[1];
+ final boolean layoutSizeChanged = getWidth() != mLayout.width || getHeight() != mLayout.height;
+ final boolean positionChanged = mLeft != mLocation[0] || mTop != mLocation[1];
if (force || creating || formatChanged || sizeChanged || visibleChanged
- || mUpdateWindowNeeded || mReportDrawNeeded || redrawNeeded) {
+ || mUpdateWindowNeeded || mReportDrawNeeded || redrawNeeded || layoutSizeChanged) {
if (DEBUG) Log.i(TAG, "Changes: creating=" + creating
+ " format=" + formatChanged + " size=" + sizeChanged
+ " visible=" + visibleChanged
- + " left=" + (mWindowSpaceLeft != mLocation[0])
- + " top=" + (mWindowSpaceTop != mLocation[1]));
+ + " left=" + (mLeft != mLocation[0])
+ + " top=" + (mTop != mLocation[1]));
try {
final boolean visible = mVisible = mRequestedVisible;
- mWindowSpaceLeft = mLocation[0];
- mWindowSpaceTop = mLocation[1];
- mWindowSpaceWidth = myWidth;
- mWindowSpaceHeight = myHeight;
+ mLeft = mLocation[0];
+ mTop = mLocation[1];
+ mWidth = myWidth;
+ mHeight = myHeight;
mFormat = mRequestedFormat;
// Scaling/Translate window's layout here because mLayout is not used elsewhere.
// Places the window relative
- mLayout.x = mWindowSpaceLeft;
- mLayout.y = mWindowSpaceTop;
+ mLayout.x = mLeft;
+ mLayout.y = mTop;
mLayout.width = getWidth();
mLayout.height = getHeight();
if (mTranslator != null) {
@@ -486,14 +485,6 @@
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
;
- if (!creating && !force && !mUpdateWindowNeeded) {
- mLayout.privateFlags |=
- WindowManager.LayoutParams.PRIVATE_FLAG_PRESERVE_GEOMETRY;
- } else {
- mLayout.privateFlags &=
- ~WindowManager.LayoutParams.PRIVATE_FLAG_PRESERVE_GEOMETRY;
- }
-
if (!getContext().getResources().getCompatibilityInfo().supportsScreen()) {
mLayout.privateFlags |=
WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
@@ -525,7 +516,7 @@
if (DEBUG) Log.i(TAG, "Cur surface: " + mSurface);
relayoutResult = mSession.relayout(
- mWindow, mWindow.mSeq, mLayout, mWindowSpaceWidth, mWindowSpaceHeight,
+ mWindow, mWindow.mSeq, mLayout, mWidth, mHeight,
visible ? VISIBLE : GONE,
WindowManagerGlobal.RELAYOUT_DEFER_SURFACE_DESTROY,
mWinFrame, mOverscanInsets, mContentInsets,
@@ -630,19 +621,11 @@
TAG, "Layout: x=" + mLayout.x + " y=" + mLayout.y +
" w=" + mLayout.width + " h=" + mLayout.height +
", frame=" + mSurfaceFrame);
- } else if (positionChanged || layoutSizeChanged) { // Only the position has changed
- mWindowSpaceLeft = mLocation[0];
- mWindowSpaceTop = mLocation[1];
- // For our size changed check, we keep mLayout.width and mLayout.height
- // in view local space.
- mLocation[0] = mLayout.width = getWidth();
- mLocation[1] = mLayout.height = getHeight();
-
- transformFromViewToWindowSpace(mLocation);
-
+ } else if (positionChanged) { // Only the position has changed
+ mLeft = mLocation[0];
+ mTop = mLocation[1];
try {
- mSession.repositionChild(mWindow, mWindowSpaceLeft, mWindowSpaceTop,
- mLocation[0], mLocation[1],
+ mSession.repositionChild(mWindow, mLeft, mTop,
viewRoot != null ? viewRoot.getNextFrameNumber() : -1,
mWinFrame);
} catch (RemoteException ex) {
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index d029912..c2af9f7 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -18500,27 +18500,19 @@
*
* @param location an array of two integers in which to hold the coordinates
*/
- public void getLocationInWindow(@Size(2) int[] outWindowSpace) {
- outWindowSpace[0] = 0;
- outWindowSpace[1] = 0;
-
- transformFromViewToWindowSpace(outWindowSpace);
- }
-
- void transformFromViewToWindowSpace(@Size(2) int[] inOutLocation) {
- if (inOutLocation == null || inOutLocation.length < 2) {
- throw new IllegalArgumentException("inOutLocation must be an array of two integers");
+ public void getLocationInWindow(@Size(2) int[] location) {
+ if (location == null || location.length < 2) {
+ throw new IllegalArgumentException("location must be an array of two integers");
}
if (mAttachInfo == null) {
// When the view is not attached to a window, this method does not make sense
- inOutLocation[0] = inOutLocation[1] = 0;
+ location[0] = location[1] = 0;
return;
}
- float position[] = mAttachInfo.mTmpTransformLocation;
- position[0] = inOutLocation[0];
- position[1] = inOutLocation[1];
+ float[] position = mAttachInfo.mTmpTransformLocation;
+ position[0] = position[1] = 0.0f;
if (!hasIdentityMatrix()) {
getMatrix().mapPoints(position);
@@ -18552,8 +18544,8 @@
position[1] -= vr.mCurScrollY;
}
- inOutLocation[0] = (int) (position[0] + 0.5f);
- inOutLocation[1] = (int) (position[1] + 0.5f);
+ location[0] = (int) (position[0] + 0.5f);
+ location[1] = (int) (position[1] + 0.5f);
}
/**
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index c434aac..92e473d 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -1136,16 +1136,6 @@
public static final int PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT = 0x00001000;
/**
- * Flag indicating that the x, y, width, and height members should be
- * ignored (and thus their previous value preserved). For example
- * because they are being managed externally through repositionChild.
- *
- * {@hide}
- */
- public static final int PRIVATE_FLAG_PRESERVE_GEOMETRY = 0x00002000;
-
-
- /**
* Control flags that are private to the platform.
* @hide
*/
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index 1caeca0..c47c377 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -188,10 +188,9 @@
}
@Override
- public void repositionChild(IWindow window, int left, int top, int right, int bottom,
- long deferTransactionUntilFrame, Rect outFrame) {
- mService.repositionChild(this, window, left, top, right, bottom,
- deferTransactionUntilFrame, outFrame);
+ public void repositionChild(IWindow window, int x, int y, long deferTransactionUntilFrame,
+ Rect outFrame) {
+ mService.repositionChild(this, window, x, y, deferTransactionUntilFrame, outFrame);
}
public int relayout(IWindow window, int seq, WindowManager.LayoutParams attrs,
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index ec35778..3da6dee 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2485,8 +2485,7 @@
}
void repositionChild(Session session, IWindow client,
- int top, int left, int right, int bottom,
- long deferTransactionUntilFrame, Rect outFrame) {
+ int x, int y, long deferTransactionUntilFrame, Rect outFrame) {
Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "repositionChild");
long origId = Binder.clearCallingIdentity();
@@ -2502,10 +2501,8 @@
+ "attached to a parent win=" + win);
}
- win.mFrame.left = left;
- win.mFrame.top = top;
- win.mFrame.right = right;
- win.mFrame.bottom = bottom;
+ win.mFrame.left = x;
+ win.mFrame.top = y;
win.mWinAnimator.computeShownFrameLocked();
@@ -2578,15 +2575,6 @@
throw new IllegalArgumentException(
"Window type can not be changed after the window is added.");
}
-
- // Odd choice but less odd than embedding in copyFrom()
- if ((attrs.flags & WindowManager.LayoutParams.PRIVATE_FLAG_PRESERVE_GEOMETRY) != 0) {
- attrs.x = win.mAttrs.x;
- attrs.y = win.mAttrs.y;
- attrs.width = win.mAttrs.width;
- attrs.height = win.mAttrs.height;
- }
-
flagChanges = win.mAttrs.flags ^= attrs.flags;
attrChanges = win.mAttrs.copyFrom(attrs);
if ((attrChanges & (WindowManager.LayoutParams.LAYOUT_CHANGED