Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb1cb927 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

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
parent cd13d33e
Loading
Loading
Loading
Loading
+6 −29
Original line number Diff line number Diff line
@@ -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);
        }

        return true;
    }