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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user