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

Commit 32eef6b5 authored by Robert Carr's avatar Robert Carr Committed by Jackal Guo
Browse files

Ensure we clear magnification specs on non-magnifiable containers.

It seems it's possible the IME container could be magnified before an IME
is added. Once the IME is added we will view this as non-magnifiable and then
never un-do the magnification.

Bug: 137691821
Test: Manual
Change-Id: I39b43367ac500a5c6c330b5ae3a451345fa5aec4
Merged-In: I39b43367ac500a5c6c330b5ae3a451345fa5aec4
parent 967232ee
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -4807,7 +4807,11 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
        // Re-parent IME's SurfaceControl when MagnificationSpec changed.
        updateImeParent();

        if (spec.scale != 1.0) {
            applyMagnificationSpec(getPendingTransaction(), spec);
        } else {
            clearMagnificationSpec(getPendingTransaction());
        }
        getPendingTransaction().apply();
    }

+14 −0
Original line number Diff line number Diff line
@@ -137,6 +137,8 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
     */
    private boolean mCommittedReparentToAnimationLeash;

    private MagnificationSpec mLastMagnificationSpec;

    WindowContainer(WindowManagerService wms) {
        mWmService = wms;
        mPendingTransaction = wms.mTransactionFactory.make();
@@ -1186,6 +1188,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
        if (shouldMagnify()) {
            t.setMatrix(mSurfaceControl, spec.scale, 0, 0, spec.scale)
                    .setPosition(mSurfaceControl, spec.offsetX, spec.offsetY);
            mLastMagnificationSpec = spec;
        } else {
            for (int i = 0; i < mChildren.size(); i++) {
                mChildren.get(i).applyMagnificationSpec(t, spec);
@@ -1193,6 +1196,17 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
        }
    }

    void clearMagnificationSpec(Transaction t) {
        if (mLastMagnificationSpec != null) {
            t.setMatrix(mSurfaceControl, 1, 0, 0, 1)
                .setPosition(mSurfaceControl, 0, 0);
        }
        mLastMagnificationSpec = null;
        for (int i = 0; i < mChildren.size(); i++) {
            mChildren.get(i).clearMagnificationSpec(t);
        }
    }

    void prepareSurfaces() {
        // If a leash has been set when the transaction was committed, then the leash reparent has
        // been committed.