Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ddcfc905 authored by Vladimir Komsiyski's avatar Vladimir Komsiyski
Browse files

VDM IME 1/n: isVirtualDeviceOnly attribute

 - Add a feature flag
 - Add a isVirtualDeviceOnly InputMethod attribute to hide custom
   VD IME components from settings. Such components should not be
   visible to users.

Bug: 287269288
Test: atest InputMethodInfoTest
Change-Id: I80422f9002d5c412dfd556966203759d90236db8
parent 59d4fd4a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -417,6 +417,7 @@ package android {
    field public static final int allowClearUserDataOnFailedRestore = 16844288; // 0x1010600
    field public static final int gameSessionService = 16844373; // 0x1010655
    field public static final int hotwordDetectionService = 16844326; // 0x1010626
    field @FlaggedApi("android.companion.virtual.flags.vdm_custom_ime") public static final int isVirtualDeviceOnly;
    field public static final int isVrOnly = 16844152; // 0x1010578
    field public static final int minExtensionVersion = 16844305; // 0x1010611
    field public static final int playHomeTransitionSound = 16844358; // 0x1010646
@@ -17288,6 +17289,10 @@ package android.view.displayhash {
package android.view.inputmethod {
  public final class InputMethodInfo implements android.os.Parcelable {
    method @FlaggedApi("android.companion.virtual.flags.vdm_custom_ime") public boolean isVirtualDeviceOnly();
  }
  public final class InputMethodManager {
    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public android.view.inputmethod.InputMethodInfo getCurrentInputMethodInfoAsUser(@NonNull android.os.UserHandle);
  }
+7 −0
Original line number Diff line number Diff line
@@ -38,6 +38,13 @@ flag {
  bug: "300905478"
}

flag {
  name: "vdm_custom_ime"
  namespace: "virtual_devices"
  description: "Enable custom IME API"
  bug: "287269288"
}

flag {
  name: "vdm_custom_home"
  namespace: "virtual_devices"
+37 −7
Original line number Diff line number Diff line
@@ -16,9 +16,11 @@

package android.view.inputmethod;

import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
@@ -112,6 +114,11 @@ public final class InputMethodInfo implements Parcelable {
     */
    final boolean mIsVrOnly;

    /**
     * IME only supports virtual devices.
     */
    final boolean mIsVirtualDeviceOnly;

    /**
     * The unique string Id to identify the input method.  This is generated
     * from the input method component.
@@ -239,6 +246,7 @@ public final class InputMethodInfo implements Parcelable {
        String settingsActivityComponent = null;
        String stylusHandwritingSettingsActivity = null;
        boolean isVrOnly;
        boolean isVirtualDeviceOnly;
        int isDefaultResId = 0;

        XmlResourceParser parser = null;
@@ -277,6 +285,8 @@ public final class InputMethodInfo implements Parcelable {
            }

            isVrOnly = sa.getBoolean(com.android.internal.R.styleable.InputMethod_isVrOnly, false);
            isVirtualDeviceOnly = sa.getBoolean(
                    com.android.internal.R.styleable.InputMethod_isVirtualDeviceOnly, false);
            isDefaultResId = sa.getResourceId(
                    com.android.internal.R.styleable.InputMethod_isDefault, 0);
            supportsSwitchingToNextInputMethod = sa.getBoolean(
@@ -382,6 +392,7 @@ public final class InputMethodInfo implements Parcelable {
        mSuppressesSpellChecker = suppressesSpellChecker;
        mShowInInputMethodPicker = showInInputMethodPicker;
        mIsVrOnly = isVrOnly;
        mIsVirtualDeviceOnly = isVirtualDeviceOnly;
    }

    /**
@@ -399,6 +410,7 @@ public final class InputMethodInfo implements Parcelable {
        mSuppressesSpellChecker = source.mSuppressesSpellChecker;
        mShowInInputMethodPicker = source.mShowInInputMethodPicker;
        mIsVrOnly = source.mIsVrOnly;
        mIsVirtualDeviceOnly = source.mIsVirtualDeviceOnly;
        mService = source.mService;
        mSubtypes = source.mSubtypes;
        mHandledConfigChanges = source.mHandledConfigChanges;
@@ -418,6 +430,7 @@ public final class InputMethodInfo implements Parcelable {
        mSuppressesSpellChecker = source.readBoolean();
        mShowInInputMethodPicker = source.readBoolean();
        mIsVrOnly = source.readBoolean();
        mIsVirtualDeviceOnly = source.readBoolean();
        mService = ResolveInfo.CREATOR.createFromParcel(source);
        mSubtypes = new InputMethodSubtypeArray(source);
        mHandledConfigChanges = source.readInt();
@@ -435,7 +448,8 @@ public final class InputMethodInfo implements Parcelable {
                settingsActivity, null /* subtypes */, 0 /* isDefaultResId */,
                false /* forceDefault */, true /* supportsSwitchingToNextInputMethod */,
                false /* inlineSuggestionsEnabled */, false /* isVrOnly */,
                0 /* handledConfigChanges */, false /* supportsStylusHandwriting */,
                false /* isVirtualDeviceOnly */, 0 /* handledConfigChanges */,
                false /* supportsStylusHandwriting */,
                null /* stylusHandwritingSettingsActivityAttr */,
                false /* inlineSuggestionsEnabled */);
    }
@@ -453,8 +467,9 @@ public final class InputMethodInfo implements Parcelable {
                settingsActivity, null /* subtypes */, 0 /* isDefaultResId */,
                false /* forceDefault */, true /* supportsSwitchingToNextInputMethod */,
                false /* inlineSuggestionsEnabled */, false /* isVrOnly */,
                0 /* handledConfigChanges */, supportStylusHandwriting,
                stylusHandwritingSettingsActivityAttr, false /* inlineSuggestionsEnabled */);
                false /* isVirtualDeviceOnly */, 0 /* handledConfigChanges */,
                supportStylusHandwriting, stylusHandwritingSettingsActivityAttr,
                false /* inlineSuggestionsEnabled */);
    }

    /**
@@ -468,7 +483,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 */,
                false /* isVirtualDeviceOnly */, handledConfigChanges,
                false /* supportsStylusHandwriting */,
                null /* stylusHandwritingSettingsActivityAttr */,
                false /* inlineSuggestionsEnabled */);
@@ -483,7 +499,7 @@ 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 */, false /* isVirtualDeviceOnly */, 0 /* handledconfigChanges */,
                false /* supportsStylusHandwriting */,
                null /* stylusHandwritingSettingsActivityAttr */,
                false /* inlineSuggestionsEnabled */);
@@ -498,6 +514,7 @@ public final class InputMethodInfo implements Parcelable {
            boolean supportsSwitchingToNextInputMethod, boolean isVrOnly) {
        this(ri, isAuxIme, settingsActivity, subtypes, isDefaultResId, forceDefault,
                supportsSwitchingToNextInputMethod, false /* inlineSuggestionsEnabled */, isVrOnly,
                false /* isVirtualDeviceOnly */,
                0 /* handledConfigChanges */, false /* supportsStylusHandwriting */,
                null /* stylusHandwritingSettingsActivityAttr */,
                false /* inlineSuggestionsEnabled */);
@@ -510,8 +527,8 @@ public final class InputMethodInfo implements Parcelable {
    public InputMethodInfo(ResolveInfo ri, boolean isAuxIme, String settingsActivity,
            List<InputMethodSubtype> subtypes, int isDefaultResId, boolean forceDefault,
            boolean supportsSwitchingToNextInputMethod, boolean inlineSuggestionsEnabled,
            boolean isVrOnly, int handledConfigChanges, boolean supportsStylusHandwriting,
            String stylusHandwritingSettingsActivityAttr,
            boolean isVrOnly, boolean isVirtualDeviceOnly, int handledConfigChanges,
            boolean supportsStylusHandwriting, String stylusHandwritingSettingsActivityAttr,
            boolean supportsInlineSuggestionsWithTouchExploration) {
        final ServiceInfo si = ri.serviceInfo;
        mService = ri;
@@ -528,6 +545,7 @@ public final class InputMethodInfo implements Parcelable {
        mSuppressesSpellChecker = false;
        mShowInInputMethodPicker = true;
        mIsVrOnly = isVrOnly;
        mIsVirtualDeviceOnly = isVirtualDeviceOnly;
        mHandledConfigChanges = handledConfigChanges;
        mSupportsStylusHandwriting = supportsStylusHandwriting;
        mStylusHandwritingSettingsActivityAttr = stylusHandwritingSettingsActivityAttr;
@@ -634,6 +652,16 @@ public final class InputMethodInfo implements Parcelable {
        return mIsVrOnly;
    }

    /**
     * Returns true if IME supports only virtual devices.
     * @hide
     */
    @FlaggedApi(android.companion.virtual.flags.Flags.FLAG_VDM_CUSTOM_IME)
    @SystemApi
    public boolean isVirtualDeviceOnly() {
        return mIsVirtualDeviceOnly;
    }

    /**
     * Return the count of the subtypes of Input Method.
     */
@@ -732,6 +760,7 @@ public final class InputMethodInfo implements Parcelable {
        pw.println(prefix + "mId=" + mId
                + " mSettingsActivityName=" + mSettingsActivityName
                + " mIsVrOnly=" + mIsVrOnly
                + " mIsVirtualDeviceOnly=" + mIsVirtualDeviceOnly
                + " mSupportsSwitchingToNextInputMethod=" + mSupportsSwitchingToNextInputMethod
                + " mInlineSuggestionsEnabled=" + mInlineSuggestionsEnabled
                + " mSupportsInlineSuggestionsWithTouchExploration="
@@ -851,6 +880,7 @@ public final class InputMethodInfo implements Parcelable {
        dest.writeBoolean(mSuppressesSpellChecker);
        dest.writeBoolean(mShowInInputMethodPicker);
        dest.writeBoolean(mIsVrOnly);
        dest.writeBoolean(mIsVirtualDeviceOnly);
        mService.writeToParcel(dest, flags);
        mSubtypes.writeToParcel(dest);
        dest.writeInt(mHandledConfigChanges);
+4 −0
Original line number Diff line number Diff line
@@ -3854,6 +3854,10 @@
        <!-- Specifies if an IME can only be used while a device is in VR mode or on a dedicated
             device -->
        <attr name="isVrOnly" format="boolean"/>
        <!-- Specifies if an IME can only be used on a display created by a virtual device.
             @hide @SystemApi
             @FlaggedApi("android.companion.virtual.flags.vdm_custom_ime") -->
        <attr name="isVirtualDeviceOnly" format="boolean"/>
        <attr name="__removed2" format="boolean" />
        <!-- Specifies whether the IME supports showing inline suggestions. -->
        <attr name="supportsInlineSuggestions" format="boolean" />
+3 −0
Original line number Diff line number Diff line
@@ -112,6 +112,9 @@
  <staging-public-group type="attr" first-id="0x01bd0000">
    <!-- @FlaggedApi("android.content.res.default_locale") -->
    <public name="defaultLocale"/>
    <!-- @FlaggedApi("android.companion.virtual.flags.vdm_custom_ime")
         @hide @SystemApi -->
    <public name="isVirtualDeviceOnly"/>
  </staging-public-group>

  <staging-public-group type="id" first-id="0x01bc0000">
Loading