Merge "Don't change geometry in relayout if preserve geometry is requested" into nyc-dev
This commit is contained in:
@@ -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);
|
||||
|
||||
/*
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user