@@ -2543,8 +2543,12 @@ public int relayoutWindow(Session session, IWindow client, int seq,
25432543 if (win == null ) {
25442544 return 0 ;
25452545 }
2546- win .mRequestedWidth = requestedWidth ;
2547- win .mRequestedHeight = requestedHeight ;
2546+ if (win .mRequestedWidth != requestedWidth
2547+ || win .mRequestedHeight != requestedHeight ) {
2548+ win .mLayoutNeeded = true ;
2549+ win .mRequestedWidth = requestedWidth ;
2550+ win .mRequestedHeight = requestedHeight ;
2551+ }
25482552 if (attrs != null && seq == win .mSeq ) {
25492553 win .mSystemUiVisibility = systemUiVisibility ;
25502554 }
@@ -2565,6 +2569,9 @@ public int relayoutWindow(Session session, IWindow client, int seq,
25652569 }
25662570 flagChanges = win .mAttrs .flags ^= attrs .flags ;
25672571 attrChanges = win .mAttrs .copyFrom (attrs );
2572+ if ((attrChanges &WindowManager .LayoutParams .LAYOUT_CHANGED ) != 0 ) {
2573+ win .mLayoutNeeded = true ;
2574+ }
25682575 }
25692576
25702577 if (DEBUG_LAYOUT ) Slog .v (TAG , "Relayout " + win + ": " + win .mAttrs );
@@ -7460,12 +7467,13 @@ private final int performLayoutLockedInner(boolean initial, boolean updateInputW
74607467 // if they want. (We do the normal layout for INVISIBLE
74617468 // windows, since that means "perform layout as normal,
74627469 // just don't display").
7463- if (!gone || !win .mHaveFrame ) {
7470+ if (!gone || !win .mHaveFrame || win . mLayoutNeeded ) {
74647471 if (!win .mLayoutAttached ) {
74657472 if (initial ) {
74667473 //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial");
74677474 win .mContentChanged = false ;
74687475 }
7476+ win .mLayoutNeeded = false ;
74697477 win .prelayout ();
74707478 mPolicy .layoutWindowLw (win , win .mAttrs , null );
74717479 win .mLayoutSeq = seq ;
@@ -7497,11 +7505,12 @@ private final int performLayoutLockedInner(boolean initial, boolean updateInputW
74977505 // windows, since that means "perform layout as normal,
74987506 // just don't display").
74997507 if ((win .mViewVisibility != View .GONE && win .mRelayoutCalled )
7500- || !win .mHaveFrame ) {
7508+ || !win .mHaveFrame || win . mLayoutNeeded ) {
75017509 if (initial ) {
75027510 //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial");
75037511 win .mContentChanged = false ;
75047512 }
7513+ win .mLayoutNeeded = false ;
75057514 win .prelayout ();
75067515 mPolicy .layoutWindowLw (win , win .mAttrs , win .mAttachedWindow );
75077516 win .mLayoutSeq = seq ;
0 commit comments