From dcb598cda79dc01f2f12d1952f73ecb08d77582f Mon Sep 17 00:00:00 2001 From: adrienmalin <41926238+adrienmalin@users.noreply.github.com> Date: Wed, 5 Dec 2018 01:15:33 +0100 Subject: [PATCH] almost good But why no TTS on game start!? --- .../adrienmalin/pingpoints/MatchActivity.kt | 106 +++++++++++------- .../java/adrienmalin/pingpoints/MatchModel.kt | 2 +- .../java/adrienmalin/pingpoints/Player.kt | 5 +- .../pingpoints/StarterNameActivity.kt | 2 - app/src/main/res/values-fr/strings.xml | 3 +- app/src/main/res/values/strings.xml | 3 +- 6 files changed, 77 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/adrienmalin/pingpoints/MatchActivity.kt b/app/src/main/java/adrienmalin/pingpoints/MatchActivity.kt index c4de6be..c305105 100644 --- a/app/src/main/java/adrienmalin/pingpoints/MatchActivity.kt +++ b/app/src/main/java/adrienmalin/pingpoints/MatchActivity.kt @@ -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 -> { diff --git a/app/src/main/java/adrienmalin/pingpoints/MatchModel.kt b/app/src/main/java/adrienmalin/pingpoints/MatchModel.kt index 987a9c1..eda0378 100644 --- a/app/src/main/java/adrienmalin/pingpoints/MatchModel.kt +++ b/app/src/main/java/adrienmalin/pingpoints/MatchModel.kt @@ -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 })) { diff --git a/app/src/main/java/adrienmalin/pingpoints/Player.kt b/app/src/main/java/adrienmalin/pingpoints/Player.kt index 24e4995..2544731 100644 --- a/app/src/main/java/adrienmalin/pingpoints/Player.kt +++ b/app/src/main/java/adrienmalin/pingpoints/Player.kt @@ -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 ) \ No newline at end of file diff --git a/app/src/main/java/adrienmalin/pingpoints/StarterNameActivity.kt b/app/src/main/java/adrienmalin/pingpoints/StarterNameActivity.kt index 20d88c2..87515f5 100644 --- a/app/src/main/java/adrienmalin/pingpoints/StarterNameActivity.kt +++ b/app/src/main/java/adrienmalin/pingpoints/StarterNameActivity.kt @@ -198,7 +198,5 @@ class StarterNameActivity : AppCompatActivity() { putExtra("enableSTT", enableSTT) } ) - - finish() } } diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 2df2484..4be1ef5 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -38,5 +38,6 @@ Vous pouvez à tout moment changer la permission dans les paramètres Android." "%s contre %s:\n%s a gagné par %d à %d\nPing Points est disponible sur Google Play\n " Balle de match Dîtes : \"Point pour %s\"\nou \"Point pour %s\" - Point pour %s + point pour %s + Pouvez-vous répéter ? \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6fbc82c..d2431a9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,5 +44,6 @@ %s vs. %s:\n%s won by %d to %d\nGet Ping Points on Google Play Match point Say: \"Point for %s\"\nor \"Point for %s\" - Point for %s + point for %s + Can you repeat?