diff options
| -rw-r--r-- | core/api/test-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/speech/SpeechRecognizer.java | 49 |
2 files changed, 28 insertions, 22 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 268a9d9f046d..a90a0a4ff28a 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -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); } diff --git a/core/java/android/speech/SpeechRecognizer.java b/core/java/android/speech/SpeechRecognizer.java index 94da93e9a2cf..3cdd8b8d8436 100644 --- a/core/java/android/speech/SpeechRecognizer.java +++ b/core/java/android/speech/SpeechRecognizer.java @@ -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} - * @throws UnsupportedOperationException iff {@link #isOnDeviceRecognitionAvailable(Context)} - * is false * @return a new on-device {@code SpeechRecognizer}. + * @throws UnsupportedOperationException iff {@link #isOnDeviceRecognitionAvailable(Context)} + * is false */ @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); } |