almost good

But why no TTS on game start!?
This commit is contained in:
adrienmalin 2018-12-05 01:15:33 +01:00
parent aab005447d
commit dcb598cda7
6 changed files with 77 additions and 44 deletions

View File

@ -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 -> {

View File

@ -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 })) {

View File

@ -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
)

View File

@ -198,7 +198,5 @@ class StarterNameActivity : AppCompatActivity() {
putExtra("enableSTT", enableSTT)
}
)
finish()
}
}

View File

@ -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>

View File

@ -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>