From eb1cb927adf4b10296dfd9cdb975514d85a1116a Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 27 Apr 2016 20:37:45 -0700 Subject: [PATCH] Clean up updating bounds after config/display info change We always update the display info before handling the configuration change. Thus, we remove this weird interleaving asynchronous beast of code and handle rotation and density in updateBoundsAfterConfigChange and everything else in updateDisplayInfo. Sending an asynchronous message to resize the stack only causes race condition and issues. Change-Id: Ifa86f62e816917822a8c1d42d13d4bf1ad9bc5bf Fixes: 28316517 Bug: 28184044 --- .../java/com/android/server/wm/TaskStack.java | 35 ++++--------------- 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 6f8207e23c5b7..7c1d2d715a5b4 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -110,11 +110,6 @@ public class TaskStack implements DimLayer.DimLayerUser, /** Detach this stack from its display when animation completes. */ boolean mDeferDetach; - // Display rotation as of the last time the display information was updated for this stack. - private int mLastUpdateDisplayInfoRotation = -1; - // Display rotation as of the last time the configuration was updated for this stack. - private int mLastConfigChangedRotation = -1; - // Whether the stack and all its tasks is currently being drag-resized private boolean mDragResizing; @@ -371,36 +366,27 @@ public class TaskStack implements DimLayer.DimLayerUser, final int newDensity = mDisplayContent.getDisplayInfo().logicalDensityDpi; if (mRotation == newRotation && mDensity == newDensity) { setBounds(mTmpRect2); - } else { - mLastUpdateDisplayInfoRotation = newRotation; - updateBoundsAfterConfigChange(true); } + + // If the rotation or density didn't match, we'll update it in onConfigurationChanged. } boolean onConfigurationChanged() { - mLastConfigChangedRotation = getDisplayInfo().rotation; - return updateBoundsAfterConfigChange(false); + return updateBoundsAfterConfigChange(); } - boolean updateBoundsAfterConfigChange(boolean scheduleResize) { + private boolean updateBoundsAfterConfigChange() { if (mFullscreen) { // Bounds will already be set correctly when display info is updated in the case of // fullscreen. return false; } - if (mLastConfigChangedRotation != mLastUpdateDisplayInfoRotation) { - // We wait for the rotation values after configuration change and display info. update - // to be equal before updating the bounds due to rotation change otherwise things might - // get out of alignment... - return false; - } - final int newRotation = getDisplayInfo().rotation; final int newDensity = getDisplayInfo().logicalDensityDpi; if (mRotation == newRotation && mDensity == newDensity) { - // Nothing to do here if the rotation didn't change + // Nothing to do here as we already update the state in updateDisplayInfo. return false; } @@ -416,16 +402,7 @@ public class TaskStack implements DimLayer.DimLayerUser, } } - if (scheduleResize) { - // Post message to inform activity manager of the bounds change simulating - // a one-way call. We do this to prevent a deadlock between window manager - // lock and activity manager lock been held. - mService.mH.obtainMessage(RESIZE_STACK, mStackId, - 0 /*allowResizeInDockedMode*/, mTmpRect2).sendToTarget(); - } else { - mBoundsAfterRotation.set(mTmpRect2); - } - + mBoundsAfterRotation.set(mTmpRect2); return true; }