From 6b7bb004b16488e23349a6ca213abe5c799f2b20 Mon Sep 17 00:00:00 2001 From: Kaarel Kaljurand Date: Sat, 2 Mar 2024 21:02:07 +0100 Subject: [PATCH] Recreate SpeechRecognizer every time the mic button is pressed (fixes #115) + Update dependencies --- .../android/speak/ServiceLanguageChooser.java | 22 +++++++++---------- .../android/speak/view/SpeechInputView.java | 2 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/ee/ioc/phon/android/speak/ServiceLanguageChooser.java b/app/src/main/java/ee/ioc/phon/android/speak/ServiceLanguageChooser.java index 52d715c4..b927a0ed 100644 --- a/app/src/main/java/ee/ioc/phon/android/speak/ServiceLanguageChooser.java +++ b/app/src/main/java/ee/ioc/phon/android/speak/ServiceLanguageChooser.java @@ -33,7 +33,6 @@ public class ServiceLanguageChooser { private final String mAppId; private final int mKeyCurrentCombo; private int mIndex; - private SpeechRecognizer mSpeechRecognizer; private Intent mIntent; private String mLanguage = null; private ComponentName mRecognizerComponentName = null; @@ -87,9 +86,16 @@ public ServiceLanguageChooser(Context context, SharedPreferences prefs, int keys update(); } - + /** + * If the stored recognizer component name does not refer to an existing service on the device then we use + * the default service. This can happen if services get removed or renamed. + * TODO: improve + */ public SpeechRecognizer getSpeechRecognizer() { - return mSpeechRecognizer; + if (mRecognizerComponentName == null || !IntentUtils.isRecognitionAvailable(mContext, mRecognizerComponentName)) { + return SpeechRecognizer.createSpeechRecognizer(mContext); + } + return SpeechRecognizer.createSpeechRecognizer(mContext, mRecognizerComponentName); } public int size() { @@ -139,10 +145,12 @@ public String getCombo() { return mCombosAsList.get(mIndex); } + // TODO: can return null, but some callers expect non-null public String getLanguage() { return mLanguage; } + // TODO: can return null, but some callers expect non-null public ComponentName getService() { return mRecognizerComponentName; } @@ -156,14 +164,6 @@ private void update() { language = splits[1]; } - // If the stored combo name does not refer to an existing service on the device then we use - // the default service. This can happen if services get removed or renamed. - if (mRecognizerComponentName == null || !IntentUtils.isRecognitionAvailable(mContext, mRecognizerComponentName)) { - mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(mContext); - } else { - mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(mContext, mRecognizerComponentName); - } - // TODO: support other actions mIntent = Utils.getRecognizerIntent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH, mCallerInfo, language); mLanguage = language; diff --git a/app/src/main/java/ee/ioc/phon/android/speak/view/SpeechInputView.java b/app/src/main/java/ee/ioc/phon/android/speak/view/SpeechInputView.java index 9d2da83f..98fea200 100644 --- a/app/src/main/java/ee/ioc/phon/android/speak/view/SpeechInputView.java +++ b/app/src/main/java/ee/ioc/phon/android/speak/view/SpeechInputView.java @@ -757,7 +757,7 @@ private void showMessageArrow(int numOfChars, String dash) { } private static String selectFirstResult(List results) { - if (results == null || results.size() < 1) { + if (results == null || results.isEmpty()) { return null; } return results.get(0); diff --git a/build.gradle b/build.gradle index 3c4a06c8..be38c77e 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.2.2' + classpath 'com.android.tools.build:gradle:8.3.0' classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 662d07ba..e1fca08e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip