Adding checks for null to TextToSpeechSettings to handle cases
where the plugin fails to return properly from CheckVoiceData
and GetSampleString.
diff --git a/src/com/android/settings/TextToSpeechSettings.java b/src/com/android/settings/TextToSpeechSettings.java
index 3c55d10..2182894 100644
--- a/src/com/android/settings/TextToSpeechSettings.java
+++ b/src/com/android/settings/TextToSpeechSettings.java
@@ -289,12 +289,27 @@
*/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_DATA_INTEGRITY_CHECK) {
+ if (data == null){
+ // The CHECK_TTS_DATA activity for the plugin did not run properly;
+ // disable the preview and install controls and return.
+ mEnableDemo = false;
+ mVoicesMissing = false;
+ updateWidgetState();
+ return;
+ }
// TODO (clchen): Add these extras to TextToSpeech.Engine
ArrayList<String> available =
data.getStringArrayListExtra("TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES");
ArrayList<String> unavailable =
data.getStringArrayListExtra("TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES");
-
+ if ((available == null) || (unavailable == null)){
+ // The CHECK_TTS_DATA activity for the plugin did not run properly;
+ // disable the preview and install controls and return.
+ mEnableDemo = false;
+ mVoicesMissing = false;
+ updateWidgetState();
+ return;
+ }
if (available.size() > 0){
if (mTts == null) {
mTts = new TextToSpeech(this, this);
@@ -335,8 +350,18 @@
updateWidgetState();
} else if (requestCode == GET_SAMPLE_TEXT) {
if (resultCode == TextToSpeech.LANG_AVAILABLE) {
+ if (data == null){
+ // The GET_SAMPLE_TEXT activity for the plugin did not run properly;
+ // return without doing anything.
+ return;
+ }
if (mTts != null) {
- String sample = data.getExtras().getString("sampleText");
+ String sample = data.getStringExtra("sampleText");
+ if (sample == null){
+ // The GET_SAMPLE_TEXT activity for the plugin did not run properly;
+ // return without doing anything.
+ return;
+ }
mTts.speak(sample, TextToSpeech.QUEUE_FLUSH, null);
}
} else {