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?