diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 29be743..7abab4c 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/release/app-release.apk b/app/release/app-release.apk index 5b09048..a00ece7 100644 Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ diff --git a/app/release/output.json b/app/release/output.json index 0d530ea..41524b3 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":4,"versionName":"2.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":5,"versionName":"2.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/main/java/adrienmalin/pingpoints/MatchActivity.kt b/app/src/main/java/adrienmalin/pingpoints/MatchActivity.kt index 1e55562..fabd36f 100644 --- a/app/src/main/java/adrienmalin/pingpoints/MatchActivity.kt +++ b/app/src/main/java/adrienmalin/pingpoints/MatchActivity.kt @@ -30,7 +30,7 @@ class MatchActivity : AppCompatActivity() { inner class SttAfterTts : UtteranceProgressListener() { override fun onDone(id: String) { - SttDialog().show( supportFragmentManager, "SttDialog") + SttDialog().show(supportFragmentManager, "SttDialog") } override fun onStart(id: String) {} @@ -57,8 +57,8 @@ class MatchActivity : AppCompatActivity() { val player1Name = getStringExtra("player1Name") val player2Name = getStringExtra("player2Name") players = listOf( - Player(player1Name, 0, Pattern.compile(getString(R.string.pattern, player1Name))), - Player(player2Name, 0, Pattern.compile(getString(R.string.pattern, player2Name))) + Player(player1Name, 0), + Player(player2Name, 0) ) serviceSide = getIntExtra("starterId", 0) relaunchSide = when(serviceSide) { @@ -69,7 +69,10 @@ class MatchActivity : AppCompatActivity() { sttEnabled = getBooleanExtra("enableSTT", false) saveState() - if (ttsEnabled) tts = TextToSpeech(this@MatchActivity, WaitForTtsInit()) + if (ttsEnabled) { + tts = TextToSpeech(this@MatchActivity, WaitForTtsInit()) + if (sttEnabled) tts?.setOnUtteranceProgressListener(SttAfterTts()) + } if (!sttEnabled) showPopUp(getString(R.string.button_hint)) } } @@ -127,10 +130,7 @@ class MatchActivity : AppCompatActivity() { if (matchPoint) scoreSpeech += getString(R.string.match_point) say(scoreSpeech) } - if (sttEnabled) { - if (ttsEnabled) tts?.setOnUtteranceProgressListener(SttAfterTts()) - else SttDialog().show(supportFragmentManager, "SttDialog") - } + if (sttEnabled and !ttsEnabled) SttDialog().show(supportFragmentManager, "SttDialog") } } } diff --git a/app/src/main/java/adrienmalin/pingpoints/Player.kt b/app/src/main/java/adrienmalin/pingpoints/Player.kt index 2544731..f42a641 100644 --- a/app/src/main/java/adrienmalin/pingpoints/Player.kt +++ b/app/src/main/java/adrienmalin/pingpoints/Player.kt @@ -1,9 +1,6 @@ package adrienmalin.pingpoints -import java.util.regex.Pattern - data class Player ( var name: String, - var score: Int, - var pattern: Pattern? = null -) \ No newline at end of file + var score: Int +) diff --git a/app/src/main/java/adrienmalin/pingpoints/SttDialog.kt b/app/src/main/java/adrienmalin/pingpoints/SttDialog.kt index e0e0306..73526de 100644 --- a/app/src/main/java/adrienmalin/pingpoints/SttDialog.kt +++ b/app/src/main/java/adrienmalin/pingpoints/SttDialog.kt @@ -11,11 +11,10 @@ import android.speech.RecognitionListener import android.speech.RecognizerIntent import android.speech.SpeechRecognizer import android.support.v4.app.DialogFragment -import android.util.Log import android.view.LayoutInflater import android.widget.ImageView import android.widget.TextView -import java.util.* +import java.util.regex.Pattern import kotlin.math.max import kotlin.math.min @@ -26,6 +25,7 @@ class SttDialog : DialogFragment() { var icStt: ImageView? = null var stt: SpeechRecognizer? = null var sttIntent: Intent? = null + var pattern: Pattern? = null inner class SttListener : RecognitionListener { val ERROR_NOT_UNDERSTOOD = 1 @@ -51,12 +51,18 @@ class SttDialog : DialogFragment() { matchModel?.apply { for (result in results) { partialResultsTextView?.text = result - for (player in players) { - if (player.pattern?.matcher(result)?.find() == true) { - dismiss() - updateScore(player) - updateUI() - return + pattern?.apply{ + val matcher = matcher(result) + if (matcher.matches()) { + val name_found = matcher.group(1) + for (player in players) { + if (name_found == player.name) { + dismiss() + updateScore(player) + updateUI() + return + } + } } } } @@ -99,11 +105,24 @@ class SttDialog : DialogFragment() { players[1].name ) sttIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply { - putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM) + putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH) putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 10) putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true) putExtra(RecognizerIntent.EXTRA_PREFER_OFFLINE, true) + putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 30000) } + stt = SpeechRecognizer.createSpeechRecognizer(activity).apply { + setRecognitionListener(SttListener()) + try { + stopListening() + startListening(sttIntent) + } catch (e: ActivityNotFoundException) { + sttEnabled = false + dismiss() + showPopUp(R.string.STT_unavailable) + } + } + pattern = Pattern.compile(getString(R.string.pattern), Pattern.CASE_INSENSITIVE) } } } diff --git a/app/src/main/java/adrienmalin/pingpoints/Html.kt b/app/src/main/java/adrienmalin/pingpoints/html.kt similarity index 100% rename from app/src/main/java/adrienmalin/pingpoints/Html.kt rename to app/src/main/java/adrienmalin/pingpoints/html.kt diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4ad8821..738f301 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -32,8 +32,8 @@ Match Ping Points : %s contre %s "%s contre %s:\n%s a gagné par %d à %d\nPing Points est disponible sur Google Play" Balle de match - Dîtes : \"point %s\"\nou \"point %s\" - (?i:(point|.) %s) + Dîtes : \"Point pour %s\"\nou \"Point pour %s\" + point pour (.+) Pouvez-vous répéter ? Reconnaissance vocale désactivée. \ 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 ef2a9f3..5d7f370 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -37,8 +37,8 @@ Ping Points Match: %s vs. %s %s vs. %s:\n%s won by %d to %d\nGet Ping Points on Google Play Match point - Say: \"point %s\"\nor \"point %s\" - (?i:(point|.) %s) + Say: \"Point for %s\"\nor \"Point for %s\" + point for (.+) Can you repeat, please? %d - %d Voice recognition disabled.