From 6307641de309913fc30d762f7335af29a27fb988 Mon Sep 17 00:00:00 2001 From: Taran Singh Date: Mon, 15 Nov 2021 20:44:10 +0000 Subject: [PATCH] Scribe in IMF: Handwriting support API 1/N Introduce new API for declaring Scribe support in IMEs. CTS-Coverage-Bug: 210917621 Bug: 203086136 Change-Id: Ie012d865d58e6d41fe6ab6de479dd6ed86e6106c --- core/api/current.txt | 2 ++ .../view/inputmethod/InputMethodInfo.java | 34 +++++++++++++++---- core/res/res/values/attrs.xml | 3 ++ core/res/res/values/public.xml | 1 + .../InputMethodBindingController.java | 5 +++ 5 files changed, 39 insertions(+), 6 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index 623bff39a9bc3..3b843d4c7d7ee 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -1420,6 +1420,7 @@ package android { field public static final int supportsMultipleDisplays = 16844182; // 0x1010596 field public static final int supportsPictureInPicture = 16844023; // 0x10104f7 field public static final int supportsRtl = 16843695; // 0x10103af + field public static final int supportsStylusHandwriting; field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb field public static final int supportsUploading = 16843419; // 0x101029b field public static final int suppressesSpellChecker = 16844355; // 0x1010643 @@ -52832,6 +52833,7 @@ package android.view.inputmethod { method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); method public CharSequence loadLabel(android.content.pm.PackageManager); method public boolean shouldShowInInputMethodPicker(); + method public boolean supportsStylusHandwriting(); method public boolean suppressesSpellChecker(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; diff --git a/core/java/android/view/inputmethod/InputMethodInfo.java b/core/java/android/view/inputmethod/InputMethodInfo.java index 96198c64fa565..7e6e6fd236548 100644 --- a/core/java/android/view/inputmethod/InputMethodInfo.java +++ b/core/java/android/view/inputmethod/InputMethodInfo.java @@ -140,6 +140,12 @@ public final class InputMethodInfo implements Parcelable { */ private final int mHandledConfigChanges; + /** + * The flag whether this IME supports Handwriting using stylus input. + */ + private final boolean mSupportsStylusHandwriting; + + /** * @param service the {@link ResolveInfo} corresponds in which the IME is implemented. * @return a unique ID to be returned by {@link #getId()}. We have used @@ -234,6 +240,8 @@ public final class InputMethodInfo implements Parcelable { com.android.internal.R.styleable.InputMethod_showInInputMethodPicker, true); mHandledConfigChanges = sa.getInt( com.android.internal.R.styleable.InputMethod_configChanges, 0); + mSupportsStylusHandwriting = sa.getBoolean( + com.android.internal.R.styleable.InputMethod_supportsStylusHandwriting, false); sa.recycle(); final int depth = parser.getDepth(); @@ -323,6 +331,7 @@ public final class InputMethodInfo implements Parcelable { mService = ResolveInfo.CREATOR.createFromParcel(source); mSubtypes = new InputMethodSubtypeArray(source); mHandledConfigChanges = source.readInt(); + mSupportsStylusHandwriting = source.readBoolean(); mForceDefault = false; } @@ -335,7 +344,7 @@ public final class InputMethodInfo implements Parcelable { settingsActivity, null /* subtypes */, 0 /* isDefaultResId */, false /* forceDefault */, true /* supportsSwitchingToNextInputMethod */, false /* inlineSuggestionsEnabled */, false /* isVrOnly */, - 0 /* handledConfigChanges */); + 0 /* handledConfigChanges */, false /* supportsStylusHandwriting */); } /** @@ -349,7 +358,8 @@ public final class InputMethodInfo implements Parcelable { this(buildFakeResolveInfo(packageName, className, label), false /* isAuxIme */, settingsActivity, null /* subtypes */, 0 /* isDefaultResId */, false /* forceDefault */, true /* supportsSwitchingToNextInputMethod */, - false /* inlineSuggestionsEnabled */, false /* isVrOnly */, handledConfigChanges); + false /* inlineSuggestionsEnabled */, false /* isVrOnly */, handledConfigChanges, + false /* supportsStylusHandwriting */); } /** @@ -361,7 +371,8 @@ public final class InputMethodInfo implements Parcelable { boolean forceDefault) { this(ri, isAuxIme, settingsActivity, subtypes, isDefaultResId, forceDefault, true /* supportsSwitchingToNextInputMethod */, false /* inlineSuggestionsEnabled */, - false /* isVrOnly */, 0 /* handledconfigChanges */); + false /* isVrOnly */, 0 /* handledconfigChanges */, + false /* supportsStylusHandwriting */); } /** @@ -373,7 +384,7 @@ public final class InputMethodInfo implements Parcelable { boolean supportsSwitchingToNextInputMethod, boolean isVrOnly) { this(ri, isAuxIme, settingsActivity, subtypes, isDefaultResId, forceDefault, supportsSwitchingToNextInputMethod, false /* inlineSuggestionsEnabled */, isVrOnly, - 0 /* handledConfigChanges */); + 0 /* handledConfigChanges */, false /* supportsStylusHandwriting */); } /** @@ -383,7 +394,7 @@ public final class InputMethodInfo implements Parcelable { public InputMethodInfo(ResolveInfo ri, boolean isAuxIme, String settingsActivity, List subtypes, int isDefaultResId, boolean forceDefault, boolean supportsSwitchingToNextInputMethod, boolean inlineSuggestionsEnabled, - boolean isVrOnly, int handledConfigChanges) { + boolean isVrOnly, int handledConfigChanges, boolean supportsStylusHandwriting) { final ServiceInfo si = ri.serviceInfo; mService = ri; mId = new ComponentName(si.packageName, si.name).flattenToShortString(); @@ -398,6 +409,7 @@ public final class InputMethodInfo implements Parcelable { mShowInInputMethodPicker = true; mIsVrOnly = isVrOnly; mHandledConfigChanges = handledConfigChanges; + mSupportsStylusHandwriting = supportsStylusHandwriting; } private static ResolveInfo buildFakeResolveInfo(String packageName, String className, @@ -556,6 +568,14 @@ public final class InputMethodInfo implements Parcelable { return mHandledConfigChanges; } + /** + * Returns if IME supports handwriting using stylus input. + * @attr ref android.R.styleable#InputMethod_supportsStylusHandwriting + */ + public boolean supportsStylusHandwriting() { + return mSupportsStylusHandwriting; + } + public void dump(Printer pw, String prefix) { pw.println(prefix + "mId=" + mId + " mSettingsActivityName=" + mSettingsActivityName @@ -563,7 +583,8 @@ public final class InputMethodInfo implements Parcelable { + " mSupportsSwitchingToNextInputMethod=" + mSupportsSwitchingToNextInputMethod + " mInlineSuggestionsEnabled=" + mInlineSuggestionsEnabled + " mSuppressesSpellChecker=" + mSuppressesSpellChecker - + " mShowInInputMethodPicker=" + mShowInInputMethodPicker); + + " mShowInInputMethodPicker=" + mShowInInputMethodPicker + + " mSupportsStylusHandwriting=" + mSupportsStylusHandwriting); pw.println(prefix + "mIsDefaultResId=0x" + Integer.toHexString(mIsDefaultResId)); pw.println(prefix + "Service:"); @@ -667,6 +688,7 @@ public final class InputMethodInfo implements Parcelable { mService.writeToParcel(dest, flags); mSubtypes.writeToParcel(dest); dest.writeInt(mHandledConfigChanges); + dest.writeBoolean(mSupportsStylusHandwriting); } /** diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 60766459f1cb3..8aa92018aa7c0 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -3638,6 +3638,9 @@ to re-retrieve all resources (including view layouts, drawables, etc) to correctly handle any configuration change.--> + + +