Rework the Voice variant preference to show a dialog with Category and Variant lists.

The original variant list UI resulted in a long, complex list that
was difficult to navigate. This change splits up that list into
more manageable groups.
This commit is contained in:
Reece H. Dunn
2013-09-06 13:10:35 +01:00
parent 596aa025cd
commit c7a1556101
8 changed files with 423 additions and 96 deletions
@@ -97,7 +97,19 @@ public class TtsSettingsActivity extends PreferenceActivity {
}
}
private static Preference createSpeakPunctuationPreference(Context context, SpeechSynthesis engine, int titleRes) {
private static Preference createVoiceVariantPreference(Context context, VoiceSettings settings, int titleRes) {
final String title = context.getString(titleRes);
final VoiceVariantPreference pref = new VoiceVariantPreference(context);
pref.setTitle(title);
pref.setDialogTitle(title);
pref.setOnPreferenceChangeListener(mOnPreferenceChanged);
pref.setPersistent(true);
pref.setVoiceVariant(settings.getVoiceVariant());
return pref;
}
private static Preference createSpeakPunctuationPreference(Context context, VoiceSettings settings, int titleRes) {
final String title = context.getString(titleRes);
final SpeakPunctuationPreference pref = new SpeakPunctuationPreference(context);
@@ -105,7 +117,7 @@ public class TtsSettingsActivity extends PreferenceActivity {
pref.setDialogTitle(title);
pref.setOnPreferenceChangeListener(mOnPreferenceChanged);
pref.setPersistent(true);
pref.setVoiceSettings(new VoiceSettings(PreferenceManager.getDefaultSharedPreferences(context), engine));
pref.setVoiceSettings(settings);
return pref;
}
@@ -153,31 +165,11 @@ public class TtsSettingsActivity extends PreferenceActivity {
* summary with the current entry value.
*/
private static void createPreferences(Context context, PreferenceGroup group) {
if (group == null) {
return;
}
final int count = group.getPreferenceCount();
for (int i = 0; i < count; i++) {
final Preference preference = group.getPreference(i);
if (preference instanceof PreferenceGroup) {
createPreferences(null, (PreferenceGroup) preference);
} else if (preference instanceof ListPreference) {
preference.setOnPreferenceChangeListener(mOnPreferenceChanged);
}
}
if (context == null) {
return;
}
// Bind eSpeak parameters to preference settings:
SpeechSynthesis engine = new SpeechSynthesis(context, null);
VoiceSettings settings = new VoiceSettings(PreferenceManager.getDefaultSharedPreferences(context), engine);
group.addPreference(createSpeakPunctuationPreference(context, engine, R.string.espeak_speak_punctuation));
group.addPreference(createVoiceVariantPreference(context, settings, R.string.espeak_variant));
group.addPreference(createSpeakPunctuationPreference(context, settings, R.string.espeak_speak_punctuation));
group.addPreference(createSeekBarPreference(context, engine.Rate, "espeak_rate", R.string.setting_default_rate));
group.addPreference(createSeekBarPreference(context, engine.Pitch, "espeak_pitch", R.string.setting_default_pitch));
group.addPreference(createSeekBarPreference(context, engine.PitchRange, "espeak_pitch_range", R.string.espeak_pitch_range));