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
This commit is contained in:
Ming-Shin Lu
2021-11-08 23:52:42 +08:00
parent 7c18413e34
commit e136320e8b

View File

@@ -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();
}
}