@@ -2538,8 +2538,12 @@ public int relayoutWindow(Session session, IWindow client, int seq,
25382538 if (win == null ) {
25392539 return 0 ;
25402540 }
2541- win .mRequestedWidth = requestedWidth ;
2542- win .mRequestedHeight = requestedHeight ;
2541+ if (win .mRequestedWidth != requestedWidth
2542+ || win .mRequestedHeight != requestedHeight ) {
2543+ win .mLayoutNeeded = true ;
2544+ win .mRequestedWidth = requestedWidth ;
2545+ win .mRequestedHeight = requestedHeight ;
2546+ }
25432547 if (attrs != null && seq == win .mSeq ) {
25442548 win .mSystemUiVisibility = systemUiVisibility ;
25452549 }
@@ -2560,6 +2564,9 @@ public int relayoutWindow(Session session, IWindow client, int seq,
25602564 }
25612565 flagChanges = win .mAttrs .flags ^= attrs .flags ;
25622566 attrChanges = win .mAttrs .copyFrom (attrs );
2567+ if ((attrChanges &WindowManager .LayoutParams .LAYOUT_CHANGED ) != 0 ) {
2568+ win .mLayoutNeeded = true ;
2569+ }
25632570 }
25642571
25652572 if (DEBUG_LAYOUT ) Slog .v (TAG , "Relayout " + win + ": " + win .mAttrs );
@@ -7438,12 +7445,13 @@ private final int performLayoutLockedInner(boolean initial, boolean updateInputW
74387445 // if they want. (We do the normal layout for INVISIBLE
74397446 // windows, since that means "perform layout as normal,
74407447 // just don't display").
7441- if (!gone || !win .mHaveFrame ) {
7448+ if (!gone || !win .mHaveFrame || win . mLayoutNeeded ) {
74427449 if (!win .mLayoutAttached ) {
74437450 if (initial ) {
74447451 //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial");
74457452 win .mContentChanged = false ;
74467453 }
7454+ win .mLayoutNeeded = false ;
74477455 win .prelayout ();
74487456 mPolicy .layoutWindowLw (win , win .mAttrs , null );
74497457 win .mLayoutSeq = seq ;
@@ -7475,11 +7483,12 @@ private final int performLayoutLockedInner(boolean initial, boolean updateInputW
74757483 // windows, since that means "perform layout as normal,
74767484 // just don't display").
74777485 if ((win .mViewVisibility != View .GONE && win .mRelayoutCalled )
7478- || !win .mHaveFrame ) {
7486+ || !win .mHaveFrame || win . mLayoutNeeded ) {
74797487 if (initial ) {
74807488 //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial");
74817489 win .mContentChanged = false ;
74827490 }
7491+ win .mLayoutNeeded = false ;
74837492 win .prelayout ();
74847493 mPolicy .layoutWindowLw (win , win .mAttrs , win .mAttachedWindow );
74857494 win .mLayoutSeq = seq ;
0 commit comments