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

Commit a5ad9c48 authored by Andrea Ambu's avatar Andrea Ambu Committed by Automerger Merge Worker
Browse files

Merge "speech: Add lenient SpeechRecognizer instantiation" into sc-dev am: cc204c7e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15107812

Change-Id: Iadd8899064cd390854f248efa21ea26a5aeb7502
parents 2a7bad4d cc204c7e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2396,6 +2396,7 @@ package android.service.watchdog {
package android.speech {

  public class SpeechRecognizer {
    method @MainThread @NonNull public static android.speech.SpeechRecognizer createOnDeviceTestingSpeechRecognizer(@NonNull android.content.Context);
    method @RequiresPermission(android.Manifest.permission.MANAGE_SPEECH_RECOGNITION) public void setTemporaryOnDeviceRecognizer(@Nullable android.content.ComponentName);
  }

+27 −22
Original line number Diff line number Diff line
@@ -260,23 +260,7 @@ public class SpeechRecognizer {
        ComponentName componentName =
                ComponentName.unflattenFromString(
                        context.getString(R.string.config_defaultOnDeviceSpeechRecognitionService));
        if (componentName == null) {
            return false;
        }

        List<ResolveInfo> resolveInfos =
                context.getPackageManager().queryIntentServices(
                        new Intent(RecognitionService.SERVICE_INTERFACE), 0);
        if (resolveInfos == null) {
            return false;
        }

        for (ResolveInfo ri : resolveInfos) {
            if (ri.serviceInfo != null && componentName.equals(ri.serviceInfo.getComponentName())) {
                return true;
            }
        }
        return false;
        return componentName != null;
    }

    /**
@@ -354,20 +338,41 @@ public class SpeechRecognizer {
     * notifications will be received.
     *
     * @param context in which to create {@code SpeechRecognizer}
     * @return a new on-device {@code SpeechRecognizer}.
     * @throws UnsupportedOperationException iff {@link #isOnDeviceRecognitionAvailable(Context)}
     *                                       is false
     * @return a new on-device {@code SpeechRecognizer}.
     */
    @NonNull
    @MainThread
    public static SpeechRecognizer createOnDeviceSpeechRecognizer(@NonNull final Context context) {
        if (!isOnDeviceRecognitionAvailable(context)) {
            throw new UnsupportedOperationException("On-device recognition is not available");
        }
        return lenientlyCreateOnDeviceSpeechRecognizer(context);
    }

    /**
     * Helper method to create on-device SpeechRecognizer in tests even when the device does not
     * support on-device speech recognition.
     *
     * @hide
     */
    @TestApi
    @NonNull
    @MainThread
    public static SpeechRecognizer createOnDeviceTestingSpeechRecognizer(
            @NonNull final Context context) {
        return lenientlyCreateOnDeviceSpeechRecognizer(context);
    }

    @NonNull
    @MainThread
    private static SpeechRecognizer lenientlyCreateOnDeviceSpeechRecognizer(
            @NonNull final Context context) {
        if (context == null) {
            throw new IllegalArgumentException("Context cannot be null");
        }
        checkIsCalledFromMainThread();
        if (!isOnDeviceRecognitionAvailable(context)) {
            throw new UnsupportedOperationException("On-device recognition is not available");
        }
        return new SpeechRecognizer(context, /* onDevice */ true);
    }