OSDN Git Service

Fix for setting TTS language to recently downloaded one
authorPrzemyslaw Szczepaniak <pszczepaniak@google.com>
Mon, 13 Aug 2012 15:56:02 +0000 (16:56 +0100)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Tue, 14 Aug 2012 15:29:05 +0000 (08:29 -0700)
If user added new voice pack, then set it as a default language,
went level back and went to TTS settings again, it ended in crash.

This is because first updateVoiceDetails uses old voice data details
that settings retreived long time ago.

locales preference is hidden until TTs engine returns list of locales.

Change-Id: I33a81ff259c69adb4c051ee693b6c41b93f302d0

res/xml/tts_engine_settings.xml
src/com/android/settings/tts/TtsEngineSettingsFragment.java

index 03414e8..176bdbc 100644 (file)
         android:key="tts_default_lang"
         android:title="@string/tts_default_lang_title"
         android:summary="@string/tts_default_lang_summary"
-        android:persistent="false" />
+        android:persistent="false"
+        android:order="100" />
 
     <Preference
         android:key="tts_engine_settings"
         android:persistent="false"
-        android:title="@string/tts_engine_settings_title" />
+        android:title="@string/tts_engine_settings_title"
+        android:order="200" />
 
     <Preference
         android:key="tts_install_data"
         android:persistent="false"
         android:title="@string/tts_install_data_title"
-        android:summary="@string/tts_install_data_summary" />
+        android:summary="@string/tts_install_data_summary"
+        android:order="300" />
 </PreferenceScreen>
index 267b8e1..d8e32aa 100644 (file)
@@ -104,7 +104,8 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
         mInstallVoicesPreference.setOnPreferenceClickListener(this);
         // Remove this preference unless voices are indeed available to install.
         root.removePreference(mInstallVoicesPreference);
-
+        // Remove this preference unless locales are indeed available.
+        root.removePreference(mLocalePreference);
 
         root.setTitle(getEngineLabel());
         root.setKey(getEngineName());
@@ -121,8 +122,6 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
 
         mVoiceDataDetails = getArguments().getParcelable(TtsEnginePreference.FRAGMENT_ARGS_VOICES);
 
-        updateVoiceDetails();
-
         mTts = new TextToSpeech(getActivity().getApplicationContext(), mTtsInitListener,
                 getEngineName());
 
@@ -169,9 +168,8 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
 
         if (available == null){
             Log.e(TAG, "TTS data check failed (available == null).");
-            final CharSequence[] empty = new CharSequence[0];
-            mLocalePreference.setEntries(empty);
-            mLocalePreference.setEntryValues(empty);
+            mLocalePreference.setEnabled(false);
+            getPreferenceScreen().removePreference(mLocalePreference);
             return;
         }
 
@@ -183,11 +181,12 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
         }
 
         if (available.size() > 0) {
+            mLocalePreference.setEnabled(true);
+            getPreferenceScreen().addPreference(mLocalePreference);
             updateDefaultLocalePref(available);
         } else {
-            final CharSequence[] empty = new CharSequence[0];
-            mLocalePreference.setEntries(empty);
-            mLocalePreference.setEntryValues(empty);
+            mLocalePreference.setEnabled(false);
+            getPreferenceScreen().removePreference(mLocalePreference);
         }
     }