*
* @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);
/*
"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);
}
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);
@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);
}
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();
"repositionChild called but window is not"
+ "attached to a parent win=" + win);
}
+ win.setRequestedSize(requestedWidth, requestedHeight);
win.mAttrs.x = left;
win.mAttrs.y = top;
== 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) {
}
WindowStateAnimator winAnimator = win.mWinAnimator;
- if (viewVisibility != View.GONE) {
+ if (!preserveGeometry && viewVisibility != View.GONE) {
win.setRequestedSize(requestedWidth, requestedHeight);
}
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();
}
@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;