diff options
| -rw-r--r-- | core/java/android/view/inputmethod/InlineSuggestion.java | 22 | ||||
| -rw-r--r-- | core/java/android/widget/inline/InlineContentView.java | 4 |
2 files changed, 24 insertions, 2 deletions
diff --git a/core/java/android/view/inputmethod/InlineSuggestion.java b/core/java/android/view/inputmethod/InlineSuggestion.java index e4ac5889a3c0..b8893cee834d 100644 --- a/core/java/android/view/inputmethod/InlineSuggestion.java +++ b/core/java/android/view/inputmethod/InlineSuggestion.java @@ -317,8 +317,24 @@ public final class InlineSuggestion implements Parcelable { */ @MainThread private void handleOnSurfacePackage(SurfaceControlViewHost.SurfacePackage surfacePackage) { + if (surfacePackage == null) { + return; + } + if (mSurfacePackage != null || mSurfacePackageConsumer == null) { + // The surface package is not consumed, release it immediately. + surfacePackage.release(); + try { + mInlineContentProvider.onSurfacePackageReleased(); + } catch (RemoteException e) { + Slog.w(TAG, "Error calling onSurfacePackageReleased(): " + e); + } + return; + } mSurfacePackage = surfacePackage; - if (mSurfacePackage != null && mSurfacePackageConsumer != null) { + if (mSurfacePackage == null) { + return; + } + if (mSurfacePackageConsumer != null) { mSurfacePackageConsumer.accept(mSurfacePackage); mSurfacePackageConsumer = null; } @@ -334,6 +350,10 @@ public final class InlineSuggestion implements Parcelable { } mSurfacePackage = null; } + // Clear the pending surface package consumer, if any. This can happen if the IME + // attaches the view to window and then quickly detaches it from the window, before + // the surface package requested upon attaching to window was returned. + mSurfacePackageConsumer = null; } @MainThread diff --git a/core/java/android/widget/inline/InlineContentView.java b/core/java/android/widget/inline/InlineContentView.java index 8657e828a3f6..6a85de5ca757 100644 --- a/core/java/android/widget/inline/InlineContentView.java +++ b/core/java/android/widget/inline/InlineContentView.java @@ -197,7 +197,9 @@ public class InlineContentView extends ViewGroup { mSurfacePackageUpdater.getSurfacePackage( sp -> { if (DEBUG) Log.v(TAG, "Received new SurfacePackage"); - mSurfaceView.setChildSurfacePackage(sp); + if (getViewRootImpl() != null) { + mSurfaceView.setChildSurfacePackage(sp); + } }); } } |