06/10: fixes #1018 [Settings] Make reading profiles
This is an automated email from the git hooks/post-receive script. New commit to branch devel in repository say-my-texts. See http://git.chorem.org/say-my-texts.git commit d20a60af263f0955c164872399ec040e642f9bdf Author: Kevin Morin <morin@codelutin.com> Date: Mon Apr 28 20:06:47 2014 +0000 fixes #1018 [Settings] Make reading profiles --- res/values-fr/arrays.xml | 11 +++ res/values-fr/strings.xml | 2 +- res/values/arrays.xml | 18 +++++ res/values/preference_keys.xml | 2 +- res/values/strings.xml | 2 +- res/xml/preferences.xml | 9 ++- .../android/saymytexts/SayMyTextService.java | 82 ++++++++++++++++++---- .../saymytexts/SayMyTextsWidgetProvider.java | 42 +++++------ .../android/saymytexts/SettingsActivity.java | 35 ++++++--- 9 files changed, 154 insertions(+), 49 deletions(-) diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml new file mode 100644 index 0000000..da4a5db --- /dev/null +++ b/res/values-fr/arrays.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + <string-array name="preferences_reading_profile_entries"> + <item>Toujours</item> + <item>Quand un casque ou un appareil bluetooth est connecté</item> + <item>Quand un casque est connecté</item> + <item>Jamais</item> + </string-array> + +</resources> \ No newline at end of file diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 6ecfea7..6bb82b6 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -7,7 +7,7 @@ <!-- Preferences --> <string name="preferences_settings_label">Paramètres</string> - <string name="preference_enable_reading_label">Lecture des SMS</string> + <string name="preference_reading_profile_label">Lecture des SMS</string> <string name="preference_enable_interaction_label">Intéraction (appel ou réponse)</string> <string name="preference_enable_heisendroid_mode_label">Mode Heisendroid</string> <string name="preference_test_sms_label">Tester en m\'envoyant un SMS</string> diff --git a/res/values/arrays.xml b/res/values/arrays.xml new file mode 100644 index 0000000..d851bcc --- /dev/null +++ b/res/values/arrays.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + <string-array name="preferences_reading_profile_values"> + <item>always</item> + <item>anyDeviceConnected</item> + <item>wiredDeviceConnected</item> + <item>never</item> + </string-array> + + <string-array name="preferences_reading_profile_entries"> + <item>Always</item> + <item>When a headset, headphone or bluetooth device is connected</item> + <item>When a headset, headphone is connected</item> + <item>Never</item> + </string-array> + +</resources> \ No newline at end of file diff --git a/res/values/preference_keys.xml b/res/values/preference_keys.xml index b10ea17..379b53c 100644 --- a/res/values/preference_keys.xml +++ b/res/values/preference_keys.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <resources> - <string name="preference_enable_reading_key">enable_reading</string> + <string name="preference_reading_profile_key">reading_profile</string> <string name="preference_enable_interaction_key">enable_interaction</string> <string name="preference_enable_heisendroid_mode_key">enable_heisendroid_mode</string> <string name="preference_test_sms_key">test_sms</string> diff --git a/res/values/strings.xml b/res/values/strings.xml index ffdde79..0410b73 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7,7 +7,7 @@ <!-- Preferences --> <string name="preferences_settings_label">Settings</string> - <string name="preference_enable_reading_label">SMS reading</string> + <string name="preference_reading_profile_label">SMS reading</string> <string name="preference_enable_interaction_label">Interaction (call or answer)</string> <string name="preference_enable_heisendroid_mode_label">Heisendroid mode</string> <string name="preference_test_sms_label">Test by sending an SMS to myself</string> diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 1c6e89a..d3bad81 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -4,9 +4,12 @@ <PreferenceCategory android:title="@string/preferences_settings_label"> - <SwitchPreference android:key="@string/preference_enable_reading_key" - android:title="@string/preference_enable_reading_label" - android:defaultValue="true" /> + <ListPreference android:key="@string/preference_reading_profile_key" + android:title="@string/preference_reading_profile_label" + android:entries="@array/preferences_reading_profile_entries" + android:entryValues="@array/preferences_reading_profile_values" + android:defaultValue="anyDeviceConnected"/> + <SwitchPreference android:key="@string/preference_enable_interaction_key" android:title="@string/preference_enable_interaction_label" diff --git a/src/org/chorem/android/saymytexts/SayMyTextService.java b/src/org/chorem/android/saymytexts/SayMyTextService.java index aceb047..acca74a 100644 --- a/src/org/chorem/android/saymytexts/SayMyTextService.java +++ b/src/org/chorem/android/saymytexts/SayMyTextService.java @@ -87,9 +87,12 @@ public class SayMyTextService extends Service implements TextToSpeech.OnInitList /** null if the texttospeech is not initialized */ protected Boolean canSpeak = null; - // true if music was playing when the firts message in queue arrived + // true if music was playing when the first message in queue arrived protected boolean musicWasActive; + // true if the speaker was on when the first message in queue arrived + protected boolean speakerWasOn; + protected TextToSpeech textToSpeech; /** texts to read, received before the textospeech is ready or while a call is in progress */ @@ -177,8 +180,9 @@ public class SayMyTextService extends Service implements TextToSpeech.OnInitList int result = super.onStartCommand(intent, flags, startId); SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); - String readingEnabledKey = getString(R.string.preference_enable_reading_key); - boolean readingEnabled = sharedPref.getBoolean(readingEnabledKey, true); + String[] readingProfileValues = getResources().getStringArray(R.array.preferences_reading_profile_values); + String readingProfileKey = getString(R.string.preference_reading_profile_key); + String readingProfile = sharedPref.getString(readingProfileKey, readingProfileValues[0]); if (intent != null) { String action = intent.getAction(); @@ -247,15 +251,40 @@ public class SayMyTextService extends Service implements TextToSpeech.OnInitList break; default: - // if the user enabled the reading and - // if the headset is plugged, or if there is a bluetooth device connected - if (readingEnabled && (audioManager.isWiredHeadsetOn() || !bluetoothDevices.isEmpty())) { - musicWasActive = audioManager.isMusicActive(); - if (musicWasActive) { - audioManager.setStreamMute(AudioManager.STREAM_MUSIC, true); + boolean readingEnabled; + if (readingProfileValues[0].equals(readingProfile)) { + //TODO set speaker on + readingEnabled = true; + + } else if (readingProfileValues[1].equals(readingProfile)) { + readingEnabled = audioManager.isWiredHeadsetOn() || !bluetoothDevices.isEmpty(); + + } else if (readingProfileValues[2].equals(readingProfile)) { + readingEnabled = audioManager.isWiredHeadsetOn(); + + } else { + readingEnabled = false; + } + + if (readingEnabled) { + if (!Boolean.FALSE.equals(canSpeak)) { + musicWasActive = audioManager.isMusicActive(); + speakerWasOn = audioManager.isSpeakerphoneOn(); + + if (musicWasActive) { + audioManager.setStreamMute(AudioManager.STREAM_MUSIC, musicWasActive); + } + + if (readingProfileValues[0].equals(readingProfile) + && !audioManager.isWiredHeadsetOn() && bluetoothDevices.isEmpty()) { + audioManager.setMode(AudioManager.MODE_IN_CALL); + audioManager.setSpeakerphoneOn(true); + } } + if (Boolean.TRUE.equals(canSpeak)) { requestReading(sms); + } else { awaitingTexts.add(sms); } @@ -297,11 +326,12 @@ public class SayMyTextService extends Service implements TextToSpeech.OnInitList } else { if (!bluetoothDevices.isEmpty()) { audioManager.stopBluetoothSco(); - audioManager.setMode(AudioManager.MODE_NORMAL); } if (musicWasActive) { audioManager.setStreamMute(AudioManager.STREAM_MUSIC, false); } + audioManager.setSpeakerphoneOn(speakerWasOn); + audioManager.setMode(AudioManager.MODE_NORMAL); } } } @@ -356,7 +386,23 @@ public class SayMyTextService extends Service implements TextToSpeech.OnInitList String heisendroidModeEnabledKey = getString(R.string.preference_enable_heisendroid_mode_key); boolean heisendroidModeEnabled = sharedPref.getBoolean(heisendroidModeEnabledKey, true); -// waiting = true; + + textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() { + @Override + public void onStart(String utteranceId) { + } + + @Override + public void onError(String utteranceId) { + Log.e(TAG, "Error speaking: " + utteranceId); + } + + @Override + public void onDone(String utteranceId) { + Log.d(TAG, "done"); + setCanSpeak(true); + } + }); HashMap<String, String> params = new HashMap<>(); params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_VOICE_CALL)); @@ -364,6 +410,9 @@ public class SayMyTextService extends Service implements TextToSpeech.OnInitList // params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, BT_UTTERANCE_ID); // } + String interactionPrefKey = getString(R.string.preference_enable_interaction_key); + boolean interaction = sharedPref.getBoolean(interactionPrefKey, true); + if (heisendroidModeEnabled) { textToSpeech.setLanguage(Locale.US); textToSpeech.setSpeechRate(0.3f); @@ -371,6 +420,9 @@ public class SayMyTextService extends Service implements TextToSpeech.OnInitList textToSpeech.speak("Say my text.", TextToSpeech.QUEUE_ADD, params); } + if (!interaction && !heisendroidModeEnabled) { + params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, OTHER_UTTERANCE_ID); + } textToSpeech.setLanguage(Locale.getDefault()); textToSpeech.setSpeechRate(1f); textToSpeech.setPitch(1f); @@ -378,17 +430,17 @@ public class SayMyTextService extends Service implements TextToSpeech.OnInitList textToSpeech.speak(text, TextToSpeech.QUEUE_ADD, params); if (heisendroidModeEnabled) { + if (interaction) { + params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, OTHER_UTTERANCE_ID); + } textToSpeech.setLanguage(Locale.US); textToSpeech.setSpeechRate(0.3f); textToSpeech.setPitch(0.1f); textToSpeech.speak("You're goddamn right.", TextToSpeech.QUEUE_ADD, params); } - String interactionPrefKey = getString(R.string.preference_enable_interaction_key); - if (sharedPref.getBoolean(interactionPrefKey, true)) { + if (interaction) { askForActionAfterReading(sms, btConnected, 1); - } else { - setCanSpeak(true); } } diff --git a/src/org/chorem/android/saymytexts/SayMyTextsWidgetProvider.java b/src/org/chorem/android/saymytexts/SayMyTextsWidgetProvider.java index b5e6cfd..16bd523 100644 --- a/src/org/chorem/android/saymytexts/SayMyTextsWidgetProvider.java +++ b/src/org/chorem/android/saymytexts/SayMyTextsWidgetProvider.java @@ -62,15 +62,16 @@ public class SayMyTextsWidgetProvider extends AppWidgetProvider { RemoteViews views = updateButtonState(context); views.setOnClickPendingIntent(R.id.say_my_texts_widget, pendingIntent); + //TODO PreferenceManager.getDefaultSharedPreferences(context) .registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - String enableReadingKey = context.getString(R.string.preference_enable_reading_key); - if (key.equals(enableReadingKey)) { - RemoteViews views = updateButtonState(context); - appWidgetManager.updateAppWidget(appWidgetId, views); - } +// String enableReadingKey = context.getString(R.string.preference_enable_reading_key); +// if (key.equals(enableReadingKey)) { +// RemoteViews views = updateButtonState(context); +// appWidgetManager.updateAppWidget(appWidgetId, views); +// } } }); @@ -85,25 +86,26 @@ public class SayMyTextsWidgetProvider extends AppWidgetProvider { Log.d(TAG, "on receive " + intent.getAction()); if (CLICK_ACTION.equals(intent.getAction())) { SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); - String key = context.getString(R.string.preference_enable_reading_key); - boolean enabled = sharedPref.getBoolean(key, true); - Log.d(TAG, "enabled " + enabled); - sharedPref.edit().putBoolean(key, !enabled).commit(); +// String key = context.getString(R.string.preference_enable_reading_key); +// boolean enabled = sharedPref.getBoolean(key, true); +// Log.d(TAG, "enabled " + enabled); +// sharedPref.edit().putBoolean(key, !enabled).commit(); } } protected RemoteViews updateButtonState(Context context) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); - String key = context.getString(R.string.preference_enable_reading_key); - - boolean enabled = sharedPreferences.getBoolean(key, true); - int drawableId = enabled ? - android.R.drawable.button_onoff_indicator_on : - android.R.drawable.button_onoff_indicator_off; - - RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.say_my_texts_widget); - views.setImageViewResource(R.id.say_my_texts_widget_onoff_icon, drawableId); - - return views; +// String key = context.getString(R.string.preference_enable_reading_key); +// +// boolean enabled = sharedPreferences.getBoolean(key, true); +// int drawableId = enabled ? +// android.R.drawable.button_onoff_indicator_on : +// android.R.drawable.button_onoff_indicator_off; +// +// RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.say_my_texts_widget); +// views.setImageViewResource(R.id.say_my_texts_widget_onoff_icon, drawableId); + +// return views; + return null; } } diff --git a/src/org/chorem/android/saymytexts/SettingsActivity.java b/src/org/chorem/android/saymytexts/SettingsActivity.java index 2a0f1c8..aeaf63f 100644 --- a/src/org/chorem/android/saymytexts/SettingsActivity.java +++ b/src/org/chorem/android/saymytexts/SettingsActivity.java @@ -34,6 +34,7 @@ import android.database.Cursor; import android.media.AudioManager; import android.net.Uri; import android.os.Bundle; +import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; @@ -89,7 +90,8 @@ public class SettingsActivity extends Activity { } } - public static class SettingsFragment extends PreferenceFragment { + public static class SettingsFragment extends PreferenceFragment + implements SharedPreferences.OnSharedPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { @@ -128,15 +130,32 @@ public class SettingsActivity extends Activity { SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity()); - String key = getString(R.string.preference_enable_reading_key); - SwitchPreference enableReadingPref = (SwitchPreference) getPreferenceScreen().findPreference(key); - boolean enabled = sharedPref.getBoolean(key, enableReadingPref.isChecked()); - enableReadingPref.setChecked(enabled); + String key = getString(R.string.preference_reading_profile_key); + ListPreference preference = (ListPreference) findPreference(key); + CharSequence summary = preference.getEntry(); + preference.setSummary(summary); + + key = getString(R.string.preference_enable_interaction_key); + SwitchPreference switchPreference = (SwitchPreference) findPreference(key); + boolean enabled = sharedPref.getBoolean(key, switchPreference.isChecked()); + switchPreference.setChecked(enabled); key = getString(R.string.preference_enable_heisendroid_mode_key); - enableReadingPref = (SwitchPreference) getPreferenceScreen().findPreference(key); - enabled = sharedPref.getBoolean(key, enableReadingPref.isChecked()); - enableReadingPref.setChecked(enabled); + switchPreference = (SwitchPreference) findPreference(key); + enabled = sharedPref.getBoolean(key, switchPreference.isChecked()); + switchPreference.setChecked(enabled); + + sharedPref.registerOnSharedPreferenceChangeListener(this); + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + + if (getString(R.string.preference_reading_profile_key).equals(key)) { + ListPreference preference = (ListPreference) findPreference(key); + CharSequence summary = preference.getEntry(); + preference.setSummary(summary); + } } protected void addWebsitePreferenceClickListener(int keyId) { -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm