diff --git a/core/java/android/view/inputmethod/InputConnectionWrapper.java b/core/java/android/view/inputmethod/InputConnectionWrapper.java index 8f270f5c5eeb6..62f3c909dd4fe 100644 --- a/core/java/android/view/inputmethod/InputConnectionWrapper.java +++ b/core/java/android/view/inputmethod/InputConnectionWrapper.java @@ -412,4 +412,32 @@ public class InputConnectionWrapper implements InputConnection { public boolean setImeConsumesInput(boolean imeConsumesInput) { return mTarget.setImeConsumesInput(imeConsumesInput); } + + /** + * Called by the system when it needs to take a snapshot of multiple text-related data in an + * atomic manner. + * + *
Editor authors: Supporting this method is strongly encouraged. Atomically + * taken {@link TextSnapshot} is going to be really helpful for the system when optimizing IPCs + * in a safe and deterministic manner. Return {@code null} if an atomically taken + * {@link TextSnapshot} is unavailable. The system continues supporting such a scenario + * gracefully.
+ * + *IME authors: Currently IMEs cannot call this method directly and always + * receive {@code null} as the result.
+ * + *Beware that there is a bug that this method was not overridden in + * {@link InputConnectionWrapper}, which ended up always returning {@code null} when gets + * called even if the wrapped {@link InputConnection} implements this method. The bug was + * fixed in {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE}.
+ * + * @return {@code null} if {@link TextSnapshot} is unavailable and/or this API is called from + * IMEs. Beware the bug in older devices mentioned above. + * @throws NullPointerException if the target is {@code null}. + */ + @Nullable + @Override + public TextSnapshot takeSnapshot() { + return mTarget.takeSnapshot(); + } }