Merge "Don't change geometry in relayout if preserve geometry is requested" into nyc-dev

This commit is contained in:
Chong Zhang
2016-03-22 18:05:31 +00:00
committed by Android (Google) Code Review
5 changed files with 26 additions and 11 deletions

View File

@@ -112,15 +112,18 @@ interface IWindowSession {
*
* @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 left The new left position
* @param top The new top position
* @param right The new right position
* @param bottom The new bottom position
* @param requestedWidth The new requested width
* @param requestedHeight The new requested 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,
int requestedWidth, int requestedHeight,
long deferTransactionUntilFrame, out Rect outFrame);
/*

View File

@@ -665,7 +665,9 @@ public class SurfaceView extends View {
"postion = [%d, %d, %d, %d]", mWindowSpaceLeft, mWindowSpaceTop,
mLocation[0], mLocation[1]));
mSession.repositionChild(mWindow, mWindowSpaceLeft, mWindowSpaceTop,
mLocation[0], mLocation[1], -1, mWinFrame);
mLocation[0], mLocation[1],
mWindowSpaceWidth, mWindowSpaceHeight,
-1, mWinFrame);
} catch (RemoteException ex) {
Log.e(TAG, "Exception from relayout", ex);
}
@@ -700,7 +702,9 @@ public class SurfaceView extends View {
right, bottom));
}
// Just using mRTLastReportedPosition as a dummy rect here
session.repositionChild(window, left, top, right, bottom, frameNumber,
session.repositionChild(window, left, top, right, bottom,
mWindowSpaceWidth, mWindowSpaceHeight,
frameNumber,
mRTLastReportedPosition);
// Now overwrite mRTLastReportedPosition with our values
mRTLastReportedPosition.set(left, top, right, bottom);

View File

@@ -195,8 +195,10 @@ final class Session extends IWindowSession.Stub
@Override
public void repositionChild(IWindow window, int left, int top, int right, int bottom,
long deferTransactionUntilFrame, Rect outFrame) {
int requestedWidth, int requestedHeight,
long deferTransactionUntilFrame, Rect outFrame) {
mService.repositionChild(this, window, left, top, right, bottom,
requestedWidth, requestedHeight,
deferTransactionUntilFrame, outFrame);
}

View File

@@ -2522,6 +2522,7 @@ public class WindowManagerService extends IWindowManager.Stub
void repositionChild(Session session, IWindow client,
int left, int top, int right, int bottom,
int requestedWidth, int requestedHeight,
long deferTransactionUntilFrame, Rect outFrame) {
Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "repositionChild");
long origId = Binder.clearCallingIdentity();
@@ -2537,6 +2538,7 @@ public class WindowManagerService extends IWindowManager.Stub
"repositionChild called but window is not"
+ "attached to a parent win=" + win);
}
win.setRequestedSize(requestedWidth, requestedHeight);
win.mAttrs.x = left;
win.mAttrs.y = top;
@@ -2593,7 +2595,8 @@ public class WindowManagerService extends IWindowManager.Stub
== PackageManager.PERMISSION_GRANTED;
long origId = Binder.clearCallingIdentity();
final boolean preserveGeometry = (attrs != null) && (attrs.privateFlags &
WindowManager.LayoutParams.PRIVATE_FLAG_PRESERVE_GEOMETRY) != 0;
synchronized(mWindowMap) {
WindowState win = windowForClientLocked(session, client, false);
if (win == null) {
@@ -2601,7 +2604,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
WindowStateAnimator winAnimator = win.mWinAnimator;
if (viewVisibility != View.GONE) {
if (!preserveGeometry && viewVisibility != View.GONE) {
win.setRequestedSize(requestedWidth, requestedHeight);
}
@@ -2650,7 +2653,9 @@ public class WindowManagerService extends IWindowManager.Stub
if ((attrChanges & WindowManager.LayoutParams.ALPHA_CHANGED) != 0) {
winAnimator.mAlpha = attrs.alpha;
}
win.setWindowScale(requestedWidth, requestedHeight);
if (!preserveGeometry) {
win.setWindowScale(win.mRequestedWidth, win.mRequestedHeight);
}
boolean imMayMove = (flagChanges & (FLAG_ALT_FOCUSABLE_IM | FLAG_NOT_FOCUSABLE)) != 0;
final boolean isDefaultDisplay = win.isDefaultDisplay();

View File

@@ -96,7 +96,8 @@ public final class BridgeWindowSession implements IWindowSession {
}
@Override
public void repositionChild(IWindow childWindow, int x, int y, int width, int height,
public void repositionChild(IWindow window, int left, int top, int right, int bottom,
int requestedWidth, int requestedHeight,
long deferTransactionUntilFrame, Rect outFrame) {
// pass for now.
return;