Loading src/com/android/settings/VoiceInputOutputSettings.java +50 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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) { Loading Loading
src/com/android/settings/VoiceInputOutputSettings.java +50 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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) { Loading