package com.integralblue.callerid; import com.google.inject.Inject; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.speech.tts.TextToSpeech; import roboguice.activity.RoboPreferenceActivity; public class PreferencesActivity extends RoboPreferenceActivity implements OnSharedPreferenceChangeListener { final static int CHECK_TTS_DATA = 0; @Inject SharedPreferences sharedPreferences; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if("tts_enabled".equals(key) && sharedPreferences.getBoolean("tts_enabled", true)){ //make sure the TTS data has been installed Intent checkIntent = new Intent(); checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(checkIntent, CHECK_TTS_DATA); } } @Override protected void onActivityResult( int requestCode, int resultCode, Intent data) { if (requestCode == CHECK_TTS_DATA) { if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { // no problem - all is good } else { // missing data, install it Intent installIntent = new Intent(); installIntent.setAction( TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); startActivity(installIntent); //since TTS isn't available, set the preference back to disabled Editor editor = sharedPreferences.edit(); editor.putBoolean("tts_enabled", false); editor.commit(); } } } }