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

Commit 4dd83975 authored by Craig Mautner's avatar Craig Mautner Committed by Android Git Automerger
Browse files

am d14fa78d: am 0af894d2: Merge "Update DimLayer sizes on rotation." into klp-modular-dev

* commit 'd14fa78d':
  Update DimLayer sizes on rotation.
parents 396b9e79 d14fa78d
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -127,6 +127,11 @@ public class DimLayer {

    void setBounds(Rect bounds) {
        mBounds.set(bounds);
        if (isDimming() && !mLastBounds.equals(bounds)) {
            // Clearing mAlpha forces show to redisplay with new size. 
            mAlpha = 0;
            show();
        }
    }

    /**
+5 −13
Original line number Diff line number Diff line
@@ -170,22 +170,13 @@ class DisplayContent {
    }

    void updateDisplayInfo() {
        // Save old size.
        int oldWidth = mDisplayInfo.logicalWidth;
        int oldHeight = mDisplayInfo.logicalHeight;
        mDisplay.getDisplayInfo(mDisplayInfo);

        for (int i = mStacks.size() - 1; i >= 0; --i) {
            final TaskStack stack = mStacks.get(i);
            if (!stack.isFullscreen()) {
                stack.resizeBounds(oldWidth, oldHeight, mDisplayInfo.logicalWidth,
                        mDisplayInfo.logicalHeight);
            }
            mStacks.get(i).updateDisplayInfo();
        }
    }

    void getLogicalDisplayRect(Rect out) {
        updateDisplayInfo();
        // Uses same calculation as in LogicalDisplay#configureDisplayInTransactionLocked.
        final int orientation = mDisplayInfo.rotation;
        boolean rotated = (orientation == Surface.ROTATION_90
@@ -291,11 +282,12 @@ class DisplayContent {
    }

    boolean isDimming() {
        boolean result = false;
        for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
            result |= mStacks.get(stackNdx).isDimming();
            if (mStacks.get(stackNdx).isDimming()) {
                return true;
            }
        return result;
        }
        return false;
    }

    void stopDimmingIfNeeded() {
+26 −30
Original line number Diff line number Diff line
@@ -47,12 +47,17 @@ public class TaskStack {
     * mTaskHistory in the ActivityStack with the same mStackId */
    private final ArrayList<Task> mTasks = new ArrayList<Task>();

    /** Content limits relative to the DisplayContent this sits in. Empty indicates fullscreen,
     * Nonempty is size of this TaskStack but is also used to scale if DisplayContent changes. */
    Rect mBounds = new Rect();
    /** For comparison with DisplayContent bounds. */
    private Rect mTmpRect = new Rect();

    /** Content limits relative to the DisplayContent this sits in. */
    private Rect mBounds = new Rect();

    /** Whether mBounds is fullscreen */
    private boolean mFullscreen = true;

    /** Used to support {@link android.view.WindowManager.LayoutParams#FLAG_DIM_BEHIND} */
    DimLayer mDimLayer;
    private DimLayer mDimLayer;

    /** The particular window with FLAG_DIM_BEHIND set. If null, hide mDimLayer. */
    WindowStateAnimator mDimWinAnimator;
@@ -86,7 +91,7 @@ public class TaskStack {
        return mTasks;
    }

    private void resizeWindows() {
    void resizeWindows() {
        final boolean underStatusBar = mBounds.top == 0;

        final ArrayList<WindowState> resizingWindows = mService.mResizingWindows;
@@ -108,7 +113,13 @@ public class TaskStack {
    }

    boolean setBounds(Rect bounds) {
        if (mBounds.equals(bounds)) {
        boolean oldFullscreen = mFullscreen;
        if (mDisplayContent != null) {
            mDisplayContent.getLogicalDisplayRect(mTmpRect);
            mFullscreen = mTmpRect.equals(bounds);
        }

        if (mBounds.equals(bounds) && oldFullscreen == mFullscreen) {
            return false;
        }

@@ -116,25 +127,22 @@ public class TaskStack {
        mAnimationBackgroundSurface.setBounds(bounds);
        mBounds.set(bounds);

        resizeWindows();
        return true;
    }

    void getBounds(Rect out) {
        if (mDisplayContent != null) {
            if (mBounds.isEmpty()) {
                mDisplayContent.getLogicalDisplayRect(out);
            } else {
        out.set(mBounds);
    }
            out.intersect(mDisplayContent.mContentRect);
        } else {
            out.set(mBounds);

    void updateDisplayInfo() {
        if (mFullscreen && mDisplayContent != null) {
            mDisplayContent.getLogicalDisplayRect(mTmpRect);
            setBounds(mTmpRect);
        }
    }

    boolean isFullscreen() {
        return mBounds.isEmpty();
        return mFullscreen;
    }

    boolean isAnimating() {
@@ -152,19 +160,6 @@ public class TaskStack {
        return false;
    }

    void resizeBounds(float oldWidth, float oldHeight, float newWidth, float newHeight) {
        if (oldWidth == newWidth && oldHeight == newHeight) {
            return;
        }
        float widthScale = newWidth / oldWidth;
        float heightScale = newHeight / oldHeight;
        mBounds.left = (int)(mBounds.left * widthScale + 0.5);
        mBounds.top = (int)(mBounds.top * heightScale + 0.5);
        mBounds.right = (int)(mBounds.right * widthScale + 0.5);
        mBounds.bottom = (int)(mBounds.bottom * heightScale + 0.5);
        resizeWindows();
    }

    /**
     * Put a Task in this stack. Used for adding and moving.
     * @param task The task to add.
@@ -233,6 +228,7 @@ public class TaskStack {
        mDisplayContent = displayContent;
        mDimLayer = new DimLayer(mService, this, displayContent);
        mAnimationBackgroundSurface = new DimLayer(mService, this, displayContent);
        updateDisplayInfo();
    }

    void detachDisplay() {
+2 −0
Original line number Diff line number Diff line
@@ -4990,6 +4990,7 @@ public class WindowManagerService extends IWindowManager.Stub
                        + " not found.");
            }
            if (stack.setBounds(bounds)) {
                stack.resizeWindows();
                stack.getDisplayContent().layoutNeeded = true;
                performLayoutAndPlaceSurfacesLocked();
            }
@@ -9961,6 +9962,7 @@ public class WindowManagerService extends IWindowManager.Stub
            }

            // TODO(multidisplay): rotation on main screen only.
            displayContent.updateDisplayInfo();
            screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent,
                    mFxSession, inTransaction, mPolicy.isDefaultOrientationForced());
            mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation);