Don't hide TTS settings if no recognizer is found.

bug:5412210
Change-Id: I6fdfda7f5f7bcd22acda2fd2b55e0d76f0fab1cd
This commit is contained in:
Narayan Kamath
2011-10-05 12:26:31 +01:00
parent b965e1ccd7
commit e247cb8299

View File

@@ -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);
@@ -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) {