Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9bb75d36 authored by Charles Chen's avatar Charles Chen Committed by Android (Google) Code Review
Browse files

Merge "Adding plugin specific settings to TTS settings + changing the UI to be...

Merge "Adding plugin specific settings to TTS settings + changing the UI to be more like the IME settings."
parents 47ebb789 0a0eb5f7
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -23,12 +23,6 @@
                android:title="@string/tts_play_example_title" 
                android:summary="@string/tts_play_example_summary" />

        <Preference
                android:key="tts_install_data"
                android:persistent="false"
                android:title="@string/tts_install_data_title" 
                android:summary="@string/tts_install_data_summary" />

        <CheckBoxPreference
            android:key="toggle_use_default_tts_settings"
            android:title="@string/use_default_tts_settings_title"
@@ -43,6 +37,12 @@
                android:summary="@string/tts_default_synth_summary"
                android:persistent="false" />

            <ListPreference
                android:key="tts_install_data"
                android:persistent="false"
                android:title="@string/tts_install_data_title" 
                android:summary="@string/tts_install_data_summary" />

            <ListPreference
                android:key="tts_default_rate"
                android:title="@string/tts_default_rate_title"
@@ -61,5 +61,8 @@

        </PreferenceCategory>

        <PreferenceCategory android:key="tts_engines_section"
                android:title="@string/tts_engines_section" />


</PreferenceScreen>
+129 −14
Original line number Diff line number Diff line
@@ -23,7 +23,9 @@ import static android.provider.Settings.Secure.TTS_DEFAULT_COUNTRY;
import static android.provider.Settings.Secure.TTS_DEFAULT_VARIANT;
import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH;

import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
@@ -31,7 +33,10 @@ import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.preference.CheckBoxPreference;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
@@ -49,6 +54,7 @@ public class TextToSpeechSettings extends PreferenceActivity implements

    private static final String TAG = "TextToSpeechSettings";

    private static final String SYSTEM_TTS = "com.svox.pico";
    private static final String KEY_TTS_PLAY_EXAMPLE = "tts_play_example";
    private static final String KEY_TTS_INSTALL_DATA = "tts_install_data";
    private static final String KEY_TTS_USE_DEFAULT = "toggle_use_default_tts_settings";
@@ -57,6 +63,10 @@ public class TextToSpeechSettings extends PreferenceActivity implements
    private static final String KEY_TTS_DEFAULT_COUNTRY = "tts_default_country";
    private static final String KEY_TTS_DEFAULT_VARIANT = "tts_default_variant";
    private static final String KEY_TTS_DEFAULT_SYNTH = "tts_default_synth";

    private static final String KEY_PLUGIN_ENABLED_PREFIX = "ENABLED_";
    private static final String KEY_PLUGIN_SETTINGS_PREFIX = "SETTINGS_";

    // TODO move default Locale values to TextToSpeech.Engine
    private static final String DEFAULT_LANG_VAL = "eng";
    private static final String DEFAULT_COUNTRY_VAL = "USA";
@@ -102,6 +112,8 @@ public class TextToSpeechSettings extends PreferenceActivity implements

        addPreferencesFromResource(R.xml.tts_settings);

        addEngineSpecificSettings();

        mDemoStrings = getResources().getStringArray(R.array.tts_demo_strings);

        setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
@@ -133,6 +145,55 @@ public class TextToSpeechSettings extends PreferenceActivity implements
    }


    private void addEngineSpecificSettings() {
        PreferenceGroup enginesCategory = (PreferenceGroup) findPreference("tts_engines_section");
        Intent intent = new Intent("android.intent.action.START_TTS_ENGINE");
        ResolveInfo[] enginesArray = new ResolveInfo[0];
        PackageManager pm = getPackageManager();
        enginesArray = pm.queryIntentActivities(intent, 0).toArray(enginesArray);
        for (int i = 0; i < enginesArray.length; i++) {
            String prefKey = "";
            final String pluginPackageName = enginesArray[i].activityInfo.packageName;
            if (!enginesArray[i].activityInfo.packageName.equals(SYSTEM_TTS)) {
                CheckBoxPreference chkbxPref = new CheckBoxPreference(this);
                prefKey = KEY_PLUGIN_ENABLED_PREFIX + pluginPackageName;
                chkbxPref.setKey(prefKey);
                chkbxPref.setTitle(enginesArray[i].loadLabel(pm));
                enginesCategory.addPreference(chkbxPref);
            }
            if (pluginHasSettings(pluginPackageName)) {
                Preference pref = new Preference(this);
                prefKey = KEY_PLUGIN_SETTINGS_PREFIX + pluginPackageName;
                pref.setKey(prefKey);
                pref.setTitle(enginesArray[i].loadLabel(pm));
                CharSequence settingsLabel = getResources().getString(
                        R.string.tts_engine_name_settings, enginesArray[i].loadLabel(pm));
                pref.setSummary(settingsLabel);
                pref.setOnPreferenceClickListener(new OnPreferenceClickListener(){
                            public boolean onPreferenceClick(Preference preference){
                                Intent i = new Intent();
                                i.setClassName(pluginPackageName,
                                        pluginPackageName + ".EngineSettings");
                                startActivity(i);
                                return true;
                            }
                        });
                enginesCategory.addPreference(pref);
            }
        }
    }

    private boolean pluginHasSettings(String pluginPackageName) {
        PackageManager pm = getPackageManager();
        Intent i = new Intent();
        i.setClassName(pluginPackageName, pluginPackageName + ".EngineSettings");
        if (pm.resolveActivity(i, PackageManager.MATCH_DEFAULT_ONLY) != null){
            return true;
        }
        return false;
    }


    private void initClickers() {
        mPlayExample = findPreference(KEY_TTS_PLAY_EXAMPLE);
        mPlayExample.setOnPreferenceClickListener(this);
@@ -436,6 +497,46 @@ public class TextToSpeechSettings extends PreferenceActivity implements
        return false;
    }

    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        if (Utils.isMonkeyRunning()) {
            return false;
        }

        if (preference instanceof CheckBoxPreference) {
            final CheckBoxPreference chkPref = (CheckBoxPreference) preference;
            if (!chkPref.getKey().equals(KEY_TTS_USE_DEFAULT)){
                if (chkPref.isChecked()) {
                    chkPref.setChecked(false);
                    AlertDialog d = (new AlertDialog.Builder(this))
                            .setTitle(android.R.string.dialog_alert_title)
                            .setIcon(android.R.drawable.ic_dialog_alert)
                            .setMessage(getString(R.string.tts_engine_security_warning,
                                    chkPref.getTitle()))
                            .setCancelable(true)
                            .setPositiveButton(android.R.string.ok,
                                    new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                            chkPref.setChecked(true);
                                            loadEngines();
                                        }
                            })
                            .setNegativeButton(android.R.string.cancel,
                                    new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                        }
                            })
                            .create();
                    d.show();
                } else {
                    loadEngines();
                }
                return true;
            }
        }
        return false;
    }


    private void updateWidgetState() {
        mPlayExample.setEnabled(mEnableDemo);
@@ -543,19 +644,33 @@ public class TextToSpeechSettings extends PreferenceActivity implements
    private void loadEngines() {
        ListPreference enginesPref = (ListPreference) findPreference(KEY_TTS_DEFAULT_SYNTH);

        // TODO (clchen): Try to see if it is possible to be more efficient here
        // and not search for plugins again.
        Intent intent = new Intent("android.intent.action.START_TTS_ENGINE");

        ResolveInfo[] enginesArray = new ResolveInfo[0];
        PackageManager pm = getPackageManager();
        enginesArray = pm.queryIntentActivities(intent, 0).toArray(enginesArray);
    CharSequence entries[] = new CharSequence[enginesArray.length];
    CharSequence values[] = new CharSequence[enginesArray.length];
        ArrayList<CharSequence> entries = new ArrayList<CharSequence>();
        ArrayList<CharSequence> values = new ArrayList<CharSequence>();
        for (int i = 0; i < enginesArray.length; i++) {
      entries[i] = enginesArray[i].loadLabel(pm);
      values[i] = enginesArray[i].activityInfo.packageName;
            if (enginesArray[i].activityInfo.packageName.equals(SYSTEM_TTS)) {
                entries.add(enginesArray[i].loadLabel(pm));
                values.add(enginesArray[i].activityInfo.packageName);
            } else {
                CheckBoxPreference pref = (CheckBoxPreference) findPreference(
                        KEY_PLUGIN_ENABLED_PREFIX + enginesArray[i].activityInfo.packageName);
                if ((pref != null) && pref.isChecked()){
                    entries.add(enginesArray[i].loadLabel(pm));
                    values.add(enginesArray[i].activityInfo.packageName);
                }
            }
        }
    enginesPref.setEntries(entries);
    enginesPref.setEntryValues(values);

        CharSequence entriesArray[] = new CharSequence[entries.size()];
        CharSequence valuesArray[] = new CharSequence[values.size()];

        enginesPref.setEntries(entries.toArray(entriesArray));
        enginesPref.setEntryValues(values.toArray(valuesArray));
    }

}