diff options
author | Narayan Kamath <narayan@google.com> | 2011-10-05 12:26:31 +0100 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2011-10-05 13:03:41 +0100 |
commit | e247cb8299219ea47192e5b0c4b0d2ce46d07d5b (patch) | |
tree | d788537c1c4f1b0115847a74bbdfe59e575d592a /src/com/android/settings/VoiceInputOutputSettings.java | |
parent | b965e1ccd78980390be89f95ad0fe38ed81e7657 (diff) | |
download | packages_apps_settings-e247cb8299219ea47192e5b0c4b0d2ce46d07d5b.zip packages_apps_settings-e247cb8299219ea47192e5b0c4b0d2ce46d07d5b.tar.gz packages_apps_settings-e247cb8299219ea47192e5b0c4b0d2ce46d07d5b.tar.bz2 |
Don't hide TTS settings if no recognizer is found.
bug:5412210
Change-Id: I6fdfda7f5f7bcd22acda2fd2b55e0d76f0fab1cd
Diffstat (limited to 'src/com/android/settings/VoiceInputOutputSettings.java')
-rw-r--r-- | src/com/android/settings/VoiceInputOutputSettings.java | 64 |
1 files changed, 50 insertions, 14 deletions
diff --git a/src/com/android/settings/VoiceInputOutputSettings.java b/src/com/android/settings/VoiceInputOutputSettings.java index 9e3add4..81e624f 100644 --- a/src/com/android/settings/VoiceInputOutputSettings.java +++ b/src/com/android/settings/VoiceInputOutputSettings.java @@ -33,6 +33,7 @@ import android.preference.PreferenceScreen; import android.preference.Preference.OnPreferenceChangeListener; import android.provider.Settings; import android.speech.RecognitionService; +import android.speech.tts.TtsEngines; import android.util.AttributeSet; import android.util.Log; import android.util.Xml; @@ -54,43 +55,65 @@ public class VoiceInputOutputSettings implements OnPreferenceChangeListener { private static final String KEY_VOICE_CATEGORY = "voice_category"; private static final String KEY_RECOGNIZER = "recognizer"; private static final String KEY_RECOGNIZER_SETTINGS = "recognizer_settings"; - + private static final String KEY_TTS_SETTINGS = "tts_settings"; + private PreferenceGroup mParent; private PreferenceCategory mVoiceCategory; private ListPreference mRecognizerPref; + private Preference mRecognizerSettingsPref; + private Preference mTtsSettingsPref; private PreferenceScreen mSettingsPref; - private SettingsPreferenceFragment mFragment; + private final SettingsPreferenceFragment mFragment; + private final TtsEngines mTtsEngines; private HashMap<String, ResolveInfo> mAvailableRecognizersMap; public VoiceInputOutputSettings(SettingsPreferenceFragment fragment) { mFragment = fragment; + mTtsEngines = new TtsEngines(fragment.getPreferenceScreen().getContext()); } public void onCreate() { - mParent = (PreferenceGroup) mFragment.getPreferenceScreen(); + mParent = mFragment.getPreferenceScreen(); mVoiceCategory = (PreferenceCategory) mParent.findPreference(KEY_VOICE_CATEGORY); mRecognizerPref = (ListPreference) mVoiceCategory.findPreference(KEY_RECOGNIZER); + mRecognizerSettingsPref = mVoiceCategory.findPreference(KEY_RECOGNIZER_SETTINGS); + mTtsSettingsPref = mVoiceCategory.findPreference(KEY_TTS_SETTINGS); mRecognizerPref.setOnPreferenceChangeListener(this); mSettingsPref = (PreferenceScreen) mVoiceCategory.findPreference(KEY_RECOGNIZER_SETTINGS); mAvailableRecognizersMap = new HashMap<String, ResolveInfo>(); - populateOrRemoveRecognizerPreference(); + populateOrRemovePreferences(); } - private void populateOrRemoveRecognizerPreference() { + private void populateOrRemovePreferences() { + boolean hasRecognizerPrefs = populateOrRemoveRecognizerPrefs(); + boolean hasTtsPrefs = populateOrRemoveTtsPrefs(); + if (!hasRecognizerPrefs && !hasTtsPrefs) { + // There were no TTS settings and no recognizer settings, + // so it should be safe to hide the preference category + // entirely. + mFragment.getPreferenceScreen().removePreference(mVoiceCategory); + } + } + + private boolean populateOrRemoveRecognizerPrefs() { List<ResolveInfo> availableRecognitionServices = mFragment.getPackageManager().queryIntentServices( - new Intent(RecognitionService.SERVICE_INTERFACE), PackageManager.GET_META_DATA); + new Intent(RecognitionService.SERVICE_INTERFACE), + PackageManager.GET_META_DATA); int numAvailable = availableRecognitionServices.size(); - + if (numAvailable == 0) { - // No recognizer available - remove all related preferences. - mFragment.getPreferenceScreen().removePreference(mVoiceCategory); - } else if (numAvailable == 1) { + mVoiceCategory.removePreference(mRecognizerPref); + mVoiceCategory.removePreference(mRecognizerSettingsPref); + return false; + } + + if (numAvailable == 1) { // Only one recognizer available, so don't show the list of choices, but do // set up the link to settings for the available recognizer. mVoiceCategory.removePreference(mRecognizerPref); @@ -98,11 +121,11 @@ public class VoiceInputOutputSettings implements OnPreferenceChangeListener { // But first set up the available recognizers map with just the one recognizer. ResolveInfo resolveInfo = availableRecognitionServices.get(0); String recognizerComponent = - new ComponentName(resolveInfo.serviceInfo.packageName, - resolveInfo.serviceInfo.name).flattenToShortString(); - + new ComponentName(resolveInfo.serviceInfo.packageName, + resolveInfo.serviceInfo.name).flattenToShortString(); + mAvailableRecognizersMap.put(recognizerComponent, resolveInfo); - + String currentSetting = Settings.Secure.getString( mFragment.getContentResolver(), Settings.Secure.VOICE_RECOGNITION_SERVICE); updateSettingsLink(currentSetting); @@ -110,6 +133,19 @@ public class VoiceInputOutputSettings implements OnPreferenceChangeListener { // Multiple recognizers available, so show the full list of choices. populateRecognizerPreference(availableRecognitionServices); } + + // In this case, there was at least one available recognizer so + // we populated the settings. + return true; + } + + private boolean populateOrRemoveTtsPrefs() { + if (mTtsEngines.getEngines().isEmpty()) { + mVoiceCategory.removePreference(mTtsSettingsPref); + return false; + } + + return true; } private void populateRecognizerPreference(List<ResolveInfo> recognizers) { |