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

Commit e136320e authored by Ming-Shin Lu's avatar Ming-Shin Lu
Browse files

Attempt to fix updateImeParent transaction synchronized issue

As DC#assignChildLayers is now use getSyncTransaction() to merge layers
transaction. In case updateImeParent() using getPendingTransaction() to
reparent/assignRelativeLayer for IME container that may not sync with
the layer computation, uses getSyncTransaction() in updateImeParent()
to ensure all the layer assignments can apply in the same transaction.

Bug: 204242389
Test: manual as issue steps with enabling shell transiion
Change-Id: I1c5eaa1d68a7e9e313fdbf23ed77c9cbef1f1d16
parent 7c18413e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -4165,10 +4165,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        final SurfaceControl newParent = computeImeParent();
        if (newParent != null && newParent != mInputMethodSurfaceParent) {
            mInputMethodSurfaceParent = newParent;
            getPendingTransaction().reparent(mImeWindowsContainer.mSurfaceControl, newParent);
            getSyncTransaction().reparent(mImeWindowsContainer.mSurfaceControl, newParent);
            // When surface parent is removed, the relative layer will also be removed. We need to
            // do a force update to make sure there is a layer set for the new parent.
            assignRelativeLayerForIme(getPendingTransaction(), true /* forceUpdate */);
            assignRelativeLayerForIme(getSyncTransaction(), true /* forceUpdate */);
            scheduleAnimation();
        }
    }