Author: kmorin Date: 2014-05-01 19:28:26 +0200 (Thu, 01 May 2014) New Revision: 47 Url: http://forge.chorem.org/projects/say-my-texts/repository/revisions/47 Log: improve preferences + add max number of attempts in the preferences Modified: trunk/res/values-fr/strings.xml trunk/res/values/preference_keys.xml trunk/res/values/strings.xml trunk/res/xml/preferences.xml trunk/src/org/chorem/android/saymytexts/SayMyTextService.java trunk/src/org/chorem/android/saymytexts/SettingsActivity.java Modified: trunk/res/values/preference_keys.xml =================================================================== --- trunk/res/values/preference_keys.xml 2014-04-28 20:06:47 UTC (rev 46) +++ trunk/res/values/preference_keys.xml 2014-05-01 17:28:26 UTC (rev 47) @@ -3,6 +3,7 @@ <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_voice_recognizer_max_attempt_number_key">preference_voice_recognizer_max_attempt_number</string> <string name="preference_test_sms_key">test_sms</string> <string name="preference_version_key">version</string> <string name="preference_documentation_key">documentation</string> Modified: trunk/res/values/strings.xml =================================================================== --- trunk/res/values/strings.xml 2014-04-28 20:06:47 UTC (rev 46) +++ trunk/res/values/strings.xml 2014-05-01 17:28:26 UTC (rev 47) @@ -9,6 +9,7 @@ <string name="preferences_settings_label">Settings</string> <string name="preference_reading_profile_label">SMS reading</string> <string name="preference_enable_interaction_label">Interaction (call or answer)</string> + <string name="preference_voice_recognizer_max_attempt_number_label">Maximum attempt number</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> <string name="test_sms_content">Heisendroïd</string> @@ -30,13 +31,13 @@ <string name="crash_dialog_ok_toast">Thank you !</string> <!-- actions --> - <string name="ask_next_action">What would you like to do? Call, answer or quit?</string> + <string name="ask_next_action">What would you like to do? Call, answer or nothing?</string> <string name="dictate_sms">Dictate your answer</string> <string name="send_sms_confirmation">You dictated: %s. Would you like to confirm, modify ou cancel?</string> <string name="call_action">call</string> <string name="answer_action">answer</string> - <string name="quit_action">quit</string> + <string name="quit_action">nothing</string> <string name="confirm_action">confirm</string> <string name="modifiy_action">modify</string> Modified: trunk/res/values-fr/strings.xml =================================================================== --- trunk/res/values-fr/strings.xml 2014-04-28 20:06:47 UTC (rev 46) +++ trunk/res/values-fr/strings.xml 2014-05-01 17:28:26 UTC (rev 47) @@ -9,6 +9,7 @@ <string name="preferences_settings_label">Paramètres</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_voice_recognizer_max_attempt_number_label">Nombre maximum d\'essais</string> <string name="preference_enable_heisendroid_mode_label">Mode Heisendroid</string> <string name="preference_test_sms_label">Tester en m\'envoyant un SMS</string> <string name="test_sms_content">Heisendroïd</string> @@ -29,13 +30,13 @@ <string name="crash_dialog_ok_toast">Merci !</string> <!-- actions --> - <string name="ask_next_action">Que voulez-vous faire ? Appeler, répondre ou quitter ?</string> + <string name="ask_next_action">Que voulez-vous faire ? Appeler, répondre ou rien ?</string> <string name="dictate_sms">Dictez votre réponse</string> <string name="send_sms_confirmation">Vous avez dicté : %s. Voulez-vous confirmer, corriger ou annuler ?</string> <string name="call_action">appeler</string> <string name="answer_action">répondre</string> - <string name="quit_action">quitter</string> + <string name="quit_action">rien</string> <string name="confirm_action">confirmer</string> <string name="modifiy_action">corriger</string> Modified: trunk/res/xml/preferences.xml =================================================================== --- trunk/res/xml/preferences.xml 2014-04-28 20:06:47 UTC (rev 46) +++ trunk/res/xml/preferences.xml 2014-05-01 17:28:26 UTC (rev 47) @@ -10,14 +10,18 @@ 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" android:defaultValue="true" /> + <EditTextPreference android:key="@string/preference_voice_recognizer_max_attempt_number_key" + android:title="@string/preference_voice_recognizer_max_attempt_number_label" + android:defaultValue="3" + android:numeric="integer"/> + <SwitchPreference android:key="@string/preference_enable_heisendroid_mode_key" android:title="@string/preference_enable_heisendroid_mode_label" - android:defaultValue="false" /> + android:defaultValue="false"/> <Preference android:key="@string/preference_test_sms_key" android:title="@string/preference_test_sms_label" Modified: trunk/src/org/chorem/android/saymytexts/SayMyTextService.java =================================================================== --- trunk/src/org/chorem/android/saymytexts/SayMyTextService.java 2014-04-28 20:06:47 UTC (rev 46) +++ trunk/src/org/chorem/android/saymytexts/SayMyTextService.java 2014-05-01 17:28:26 UTC (rev 47) @@ -54,7 +54,7 @@ * @author Kevin Morin (Code Lutin) * @since 1.0 */ -public class SayMyTextService extends Service implements TextToSpeech.OnInitListener { +public class SayMyTextService extends Service implements TextToSpeech.OnInitListener, SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "SayMyTextService"; @@ -82,6 +82,14 @@ protected static final String ASK_NEXT_ACTION_UTTERANCE_ID = "askNextActionUtteranceId"; protected static final String OTHER_UTTERANCE_ID = "oherUtteranceId"; + protected int maxAttemptNumber; + + protected String readingProfile; + + protected boolean heisendroidModeEnabled; + + protected boolean interactionEnabled; + protected AudioManager audioManager; /** null if the texttospeech is not initialized */ @@ -133,6 +141,27 @@ intentFilter = new IntentFilter(DictateSmsBroadcastReceiver.ACTION_DICTATE_SMS); registerReceiver(new DictateSmsBroadcastReceiver(), intentFilter); + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); + String key = getString(R.string.preference_voice_recognizer_max_attempt_number_key); + String maxAttemptValue = sharedPref.getString(key, null); + try { + maxAttemptNumber = Integer.parseInt(maxAttemptValue); + } catch (NumberFormatException e) { + maxAttemptNumber = 3; + } + + String[] readingProfileValues = getResources().getStringArray(R.array.preferences_reading_profile_values); + String readingProfileKey = getString(R.string.preference_reading_profile_key); + readingProfile = sharedPref.getString(readingProfileKey, readingProfileValues[0]); + + String heisendroidModeEnabledKey = getString(R.string.preference_enable_heisendroid_mode_key); + heisendroidModeEnabled = sharedPref.getBoolean(heisendroidModeEnabledKey, true); + + String interactionPrefKey = getString(R.string.preference_enable_interaction_key); + interactionEnabled = sharedPref.getBoolean(interactionPrefKey, true); + + sharedPref.registerOnSharedPreferenceChangeListener(this); + //// Get the default adapter // final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // @@ -179,11 +208,6 @@ public int onStartCommand(Intent intent, int flags, int startId) { int result = super.onStartCommand(intent, flags, startId); - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); - 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(); Log.d(TAG, "action " + action); @@ -211,39 +235,13 @@ break; case ACTION_DICTATE_SMS: -// if (bluetoothDevices.isEmpty()) { - dictateSMS(sms, attemptNumber + 1); -// } else { -// requestBluetoothSpeakingActivation(new Function<Void, Void>() { -// @Override -// public Void apply(Void input) { -// dictateSMS(sms); -// return null; -// } -// }); -// } + dictateSMS(sms, attemptNumber + 1); break; case ACTION_CONFIRM_SMS_SENDING: // if a message has just been dictated final String dictatedMessage = intent.getStringExtra(INTENT_EXTRA_DICTATED_MESSAGE); -// if (!bluetoothDevices.isEmpty()) { -// registerReceiver(new BroadcastReceiver() { -// @Override -// public void onReceive(Context context, Intent intent) { -// int state = intent.getExtras().getInt(AudioManager.EXTRA_SCO_AUDIO_STATE); -// if (state == AudioManager.SCO_AUDIO_STATE_CONNECTED) { -// context.unregisterReceiver(this); -// askSendingConfirmation(dictatedMessage, sms); -// } -// } -// }, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)); -// audioManager.setMode(AudioManager.MODE_IN_CALL); -// audioManager.startBluetoothSco(); -// -// } else { - askSendingConfirmation(dictatedMessage, sms, ++attemptNumber); -// } + askSendingConfirmation(dictatedMessage, sms, ++attemptNumber); break; case ACTION_READ_NEXT_SMS: @@ -252,8 +250,8 @@ default: boolean readingEnabled; + String[] readingProfileValues = getResources().getStringArray(R.array.preferences_reading_profile_values); if (readingProfileValues[0].equals(readingProfile)) { - //TODO set speaker on readingEnabled = true; } else if (readingProfileValues[1].equals(readingProfile)) { @@ -382,11 +380,6 @@ // disable the reading of the nexts sms while reading the current one setCanSpeak(false); - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); - String heisendroidModeEnabledKey = getString(R.string.preference_enable_heisendroid_mode_key); - boolean heisendroidModeEnabled = sharedPref.getBoolean(heisendroidModeEnabledKey, true); - - textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onStart(String utteranceId) { @@ -406,13 +399,7 @@ HashMap<String, String> params = new HashMap<>(); params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_VOICE_CALL)); -// if (btConnected) { -// 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); @@ -420,7 +407,7 @@ textToSpeech.speak("Say my text.", TextToSpeech.QUEUE_ADD, params); } - if (!interaction && !heisendroidModeEnabled) { + if (!interactionEnabled && !heisendroidModeEnabled) { params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, OTHER_UTTERANCE_ID); } textToSpeech.setLanguage(Locale.getDefault()); @@ -430,7 +417,7 @@ textToSpeech.speak(text, TextToSpeech.QUEUE_ADD, params); if (heisendroidModeEnabled) { - if (interaction) { + if (interactionEnabled) { params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, OTHER_UTTERANCE_ID); } textToSpeech.setLanguage(Locale.US); @@ -439,7 +426,7 @@ textToSpeech.speak("You're goddamn right.", TextToSpeech.QUEUE_ADD, params); } - if (interaction) { + if (interactionEnabled) { askForActionAfterReading(sms, btConnected, 1); } } @@ -457,12 +444,6 @@ @Override public void onDone(String utteranceId) { -// if (BT_UTTERANCE_ID.equals(utteranceId)) { -// // when the text has been read by the bluetooth device, stop the connection -// audioManager.stopBluetoothSco(); -// audioManager.setMode(AudioManager.MODE_NORMAL); -// } - if (ASK_NEXT_ACTION_UTTERANCE_ID.equals(utteranceId) || BT_ASK_NEXT_ACTION_UTTERANCE_ID.equals(utteranceId)) { Intent sayaction = new Intent(SayNextActionBroadcastReceiver.ACTION_SAY_NEXT_ACTION); @@ -486,7 +467,7 @@ textToSpeech.speak(getString(R.string.voice_not_recognized), TextToSpeech.QUEUE_ADD, params); } - if (attemptNumber <= 3) { + if (attemptNumber <= maxAttemptNumber) { params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, btConnected ? BT_ASK_NEXT_ACTION_UTTERANCE_ID : ASK_NEXT_ACTION_UTTERANCE_ID); textToSpeech.speak(getString(R.string.ask_next_action), TextToSpeech.QUEUE_ADD, params); @@ -525,7 +506,7 @@ textToSpeech.speak(getString(R.string.voice_not_recognized), TextToSpeech.QUEUE_ADD, params); } - if (attemptNumber <= 3) { + if (attemptNumber <= maxAttemptNumber) { params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, OTHER_UTTERANCE_ID); textToSpeech.setLanguage(Locale.getDefault()); textToSpeech.setSpeechRate(1f); @@ -573,7 +554,7 @@ textToSpeech.speak(getString(R.string.voice_not_recognized), TextToSpeech.QUEUE_ADD, params); } - if (attemptNumber <= 3) { + if (attemptNumber <= maxAttemptNumber) { params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, OTHER_UTTERANCE_ID); String text = getString(R.string.send_sms_confirmation, message); textToSpeech.speak(text, TextToSpeech.QUEUE_ADD, params); @@ -584,4 +565,26 @@ } + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if (key.equals(getString(R.string.preference_voice_recognizer_max_attempt_number_key))) { + String maxAttemptValue = sharedPreferences.getString(key, null); + try { + maxAttemptNumber = Integer.parseInt(maxAttemptValue); + } catch (NumberFormatException e) { + maxAttemptNumber = 3; + } + + } else if (key.equals(getString(R.string.preference_reading_profile_key))) { + String[] readingProfileValues = + getResources().getStringArray(R.array.preferences_reading_profile_values); + readingProfile = sharedPreferences.getString(key, readingProfileValues[0]); + + } else if (key.equals(getString(R.string.preference_enable_heisendroid_mode_key))) { + heisendroidModeEnabled = sharedPreferences.getBoolean(key, true); + + } else if (key.equals(getString(R.string.preference_enable_interaction_key))) { + interactionEnabled = sharedPreferences.getBoolean(key, true); + } + } } Modified: trunk/src/org/chorem/android/saymytexts/SettingsActivity.java =================================================================== --- trunk/src/org/chorem/android/saymytexts/SettingsActivity.java 2014-04-28 20:06:47 UTC (rev 46) +++ trunk/src/org/chorem/android/saymytexts/SettingsActivity.java 2014-05-01 17:28:26 UTC (rev 47) @@ -122,24 +122,30 @@ addWebsitePreferenceClickListener(R.string.preference_documentation_key); addWebsitePreferenceClickListener(R.string.preference_issue_tracker_key); - } - - @Override - public void onResume() { - super.onResume(); - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity()); String key = getString(R.string.preference_reading_profile_key); - ListPreference preference = (ListPreference) findPreference(key); - CharSequence summary = preference.getEntry(); - preference.setSummary(summary); + ListPreference listPreference = (ListPreference) findPreference(key); + CharSequence summary = listPreference.getEntry(); + listPreference.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_voice_recognizer_max_attempt_number_key); + String maxAttemptValue = sharedPref.getString(key, null); + int maxAttemptNumber; + try { + maxAttemptNumber = Integer.parseInt(maxAttemptValue); + } catch (NumberFormatException e) { + maxAttemptNumber = 3; + } + Preference preference = findPreference(key); + preference.setSummary(String.valueOf(maxAttemptNumber)); + preference.setEnabled(enabled); + key = getString(R.string.preference_enable_heisendroid_mode_key); switchPreference = (SwitchPreference) findPreference(key); enabled = sharedPref.getBoolean(key, switchPreference.isChecked()); @@ -155,6 +161,27 @@ ListPreference preference = (ListPreference) findPreference(key); CharSequence summary = preference.getEntry(); preference.setSummary(summary); + + } else if (getString(R.string.preference_enable_interaction_key).equals(key)) { + SwitchPreference switchPreference = (SwitchPreference) findPreference(key); + boolean enabled = sharedPreferences.getBoolean(key, switchPreference.isChecked()); + switchPreference.setChecked(enabled); + findPreference(getString(R.string.preference_voice_recognizer_max_attempt_number_key)).setEnabled(enabled); + + } else if (getString(R.string.preference_voice_recognizer_max_attempt_number_key).equals(key)) { + String maxAttemptValue = sharedPreferences.getString(key, null); + int maxAttemptNumber; + try { + maxAttemptNumber = Integer.parseInt(maxAttemptValue); + } catch (NumberFormatException e) { + maxAttemptNumber = 3; + } + findPreference(key).setSummary(String.valueOf(maxAttemptNumber)); + + } else if (getString(R.string.preference_enable_heisendroid_mode_key).equals(key)) { + SwitchPreference switchPreference = (SwitchPreference) findPreference(key); + boolean enabled = sharedPreferences.getBoolean(key, switchPreference.isChecked()); + switchPreference.setChecked(enabled); } }