almost good
But why no TTS on game start!?
This commit is contained in:
		| @ -66,6 +66,7 @@ class MatchActivity : AppCompatActivity() { | ||||
|                         getBooleanExtra("enableTTS", false), | ||||
|                         getBooleanExtra("enableSTT", false) | ||||
|                     ) | ||||
|                     for (player in it.players) player.pattern = Pattern.compile(getString(R.string.pattern, player.name)) | ||||
|                 } | ||||
|                 Snackbar.make( | ||||
|                     findViewById(R.id.coordinatorLayout), | ||||
| @ -106,28 +107,6 @@ class MatchActivity : AppCompatActivity() { | ||||
|  | ||||
|     fun updateUI() { | ||||
|         matchModel?.apply { | ||||
|             textScore?.text = getString( | ||||
|                 R.string.score, | ||||
|                 players[serviceSide].score, | ||||
|                 players[relaunchSide].score | ||||
|             ) | ||||
|             textService?.text = getString(R.string.service, players[serviceSide].name) | ||||
|  | ||||
|             for ((button, player) in buttons.zip(players)) { | ||||
|                 button.text = fromHtml(getString(R.string.button_text, player.name, player.score)) | ||||
|             } | ||||
|  | ||||
|             when (serviceSide) { | ||||
|                 0 -> { | ||||
|                     imageViews[0]?.setImageResource(R.drawable.ic_service_0) | ||||
|                     imageViews[1]?.setImageResource(0) | ||||
|                 } | ||||
|                 else -> { | ||||
|                     imageViews[0]?.setImageResource(0) | ||||
|                     imageViews[1]?.setImageResource(R.drawable.ic_service_1) | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             undo?.isVisible = when (playId) { | ||||
|                 0 -> false | ||||
|                 else -> true | ||||
| @ -137,6 +116,31 @@ class MatchActivity : AppCompatActivity() { | ||||
|                 else -> true | ||||
|             } | ||||
|  | ||||
|             textScore?.text = getString( | ||||
|                 R.string.score, | ||||
|                 players[serviceSide].score, | ||||
|                 players[relaunchSide].score | ||||
|             ) | ||||
|             textService?.text = getString(R.string.service, players[serviceSide].name) | ||||
|  | ||||
|             imageViews[0]?.setImageResource( | ||||
|                 when(serviceSide) { | ||||
|                     0 -> R.drawable.ic_service_0 | ||||
|                     else -> 0 | ||||
|                 } | ||||
|             ) | ||||
|  | ||||
|             for ((button, player) in buttons.zip(players)) { | ||||
|                 button.text = fromHtml(getString(R.string.button_text, player.name, player.score)) | ||||
|             } | ||||
|  | ||||
|             imageViews[1]?.setImageResource( | ||||
|                 when(serviceSide) { | ||||
|                     0 -> 0 | ||||
|                     else -> R.drawable.ic_service_1 | ||||
|                 } | ||||
|             ) | ||||
|  | ||||
|             if (ttsEnabled) ttsSpeak() | ||||
|  | ||||
|             if (matchFinished()) endMatch() | ||||
| @ -183,19 +187,28 @@ class MatchActivity : AppCompatActivity() { | ||||
|     fun launchStt() { | ||||
|         matchModel?.apply { | ||||
|             if (sttEnabled) { | ||||
|                 val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH) | ||||
|                 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM) | ||||
|                 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().getDisplayLanguage()) | ||||
|                 intent.putExtra( | ||||
|                     RecognizerIntent.EXTRA_PROMPT, | ||||
|                     getString( | ||||
|                         R.string.STT_hint, | ||||
|                         players[0].name, | ||||
|                         players[1].name | ||||
|                     ) | ||||
|                 ) | ||||
|                 try { | ||||
|                     startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); | ||||
|                     startActivityForResult( | ||||
|                         Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply { | ||||
|                             putExtra( | ||||
|                                 RecognizerIntent.EXTRA_LANGUAGE_MODEL, | ||||
|                                 RecognizerIntent.LANGUAGE_MODEL_FREE_FORM | ||||
|                             ) | ||||
|                             putExtra( | ||||
|                                 RecognizerIntent.EXTRA_LANGUAGE, | ||||
|                                 Locale.getDefault().displayLanguage | ||||
|                             ) | ||||
|                             putExtra( | ||||
|                                 RecognizerIntent.EXTRA_PROMPT, | ||||
|                                 getString( | ||||
|                                     R.string.STT_hint, | ||||
|                                     players[0].name, | ||||
|                                     players[1].name | ||||
|                                 ) | ||||
|                             ) | ||||
|                         }, | ||||
|                         REQ_CODE_SPEECH_INPUT | ||||
|                     ) | ||||
|                 } catch (e: ActivityNotFoundException) { | ||||
|                     sttEnabled = false | ||||
|                     Snackbar.make( | ||||
| @ -213,18 +226,35 @@ class MatchActivity : AppCompatActivity() { | ||||
|         when (requestCode) { | ||||
|             REQ_CODE_SPEECH_INPUT -> { | ||||
|                 matchModel?.let { | ||||
|                     var understood: Boolean = false | ||||
|                     if (resultCode == RESULT_OK && data != null) { | ||||
|                         var understood: Boolean = false | ||||
|                         val result: String = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)[0] | ||||
|                         for (player in it.players) { | ||||
|                             if (Pattern.compile(getString(R.string.pattern, player.name)).matcher(result).find()) { | ||||
|                                 it.updateScore(player) | ||||
|                             if (player.pattern?.matcher(result)?.find() == true) { | ||||
|                                 understood = true | ||||
|                                 it.updateScore(player) | ||||
|                                 updateUI() | ||||
|                                 break | ||||
|                             } | ||||
|                         } | ||||
|                         if (!understood) { | ||||
|                             if (it.ttsEnabled) { | ||||
|                                 tts?.speak( | ||||
|                                     getString(R.string.not_understood), | ||||
|                                     TextToSpeech.QUEUE_FLUSH, | ||||
|                                     hashMapOf(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID to "MessageId") | ||||
|                                 ) | ||||
|                             } | ||||
|                             else { | ||||
|                                 Snackbar.make( | ||||
|                                     findViewById(R.id.coordinatorLayout), | ||||
|                                     R.string.not_understood, | ||||
|                                     Snackbar.LENGTH_SHORT | ||||
|                                 ).show() | ||||
|                                 launchStt() | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                     if (!understood) launchStt() | ||||
|                 } | ||||
|             } | ||||
|             else -> { | ||||
|  | ||||
| @ -26,7 +26,7 @@ class MatchModel : ViewModel() { | ||||
|         saveState() | ||||
|     } | ||||
|  | ||||
|     fun updateScore(scorer: player) { | ||||
|     fun updateScore(scorer: Player) { | ||||
|         playId++ | ||||
|         scorer.score++ | ||||
|         if ((players.sumBy { it.score } % 2 == 0) or (players.all { it.score >= 10 })) { | ||||
|  | ||||
| @ -1,6 +1,9 @@ | ||||
| package adrienmalin.pingpoints | ||||
|  | ||||
| import java.util.regex.Pattern | ||||
|  | ||||
| data class Player ( | ||||
|     var name: String, | ||||
|     var score: Int | ||||
|     var score: Int, | ||||
|     var pattern: Pattern? = null | ||||
| ) | ||||
| @ -198,7 +198,5 @@ class StarterNameActivity : AppCompatActivity() { | ||||
|                 putExtra("enableSTT", enableSTT) | ||||
|             } | ||||
|         ) | ||||
|  | ||||
|         finish() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -38,5 +38,6 @@ Vous pouvez à tout moment changer la permission dans les paramètres Android." | ||||
|     <string name="share_message">"%s contre %s:\n%s a gagné par %d à %d\nPing Points est disponible sur Google Play\n "</string> | ||||
|     <string name="match_point">Balle de match</string> | ||||
|     <string name="STT_hint">Dîtes : \"Point pour %s\"\nou \"Point pour %s\"</string> | ||||
|     <string name="pattern">Point pour %s</string> | ||||
|     <string name="pattern">point pour %s</string> | ||||
|     <string name="not_understood">Pouvez-vous répéter ?</string> | ||||
| </resources> | ||||
| @ -44,5 +44,6 @@ | ||||
|     <string name="share_message">%s vs. %s:\n%s won by %d to %d\nGet Ping Points on Google Play</string> | ||||
|     <string name="match_point">Match point</string> | ||||
|     <string name="STT_hint">Say: \"Point for %s\"\nor \"Point for %s\"</string> | ||||
|     <string name="pattern">Point for %s</string> | ||||
|     <string name="pattern">point for %s</string> | ||||
|     <string name="not_understood">Can you repeat?</string> | ||||
| </resources> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user