start MatchActivity
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								.idea/caches/build_file_checksums.ser
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.idea/caches/build_file_checksums.ser
									
									
									
										generated
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -24,10 +24,14 @@ android { | |||||||
| } | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|  |     def lifecycle_version = "2.0.0" | ||||||
|  |  | ||||||
|     implementation fileTree(dir: 'libs', include: ['*.jar']) |     implementation fileTree(dir: 'libs', include: ['*.jar']) | ||||||
|     implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" |     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" | ||||||
|     implementation 'com.android.support:appcompat-v7:28.0.0' |     implementation 'com.android.support:appcompat-v7:28.0.0' | ||||||
|     implementation 'com.android.support.constraint:constraint-layout:1.1.3' |     implementation 'com.android.support.constraint:constraint-layout:1.1.3' | ||||||
|  |     implementation 'com.android.support:design:28.0.0' | ||||||
|  |     implementation "androidx.lifecycle:lifecycle-extensions-ktx:$lifecycle_version" | ||||||
|     testImplementation 'junit:junit:4.12' |     testImplementation 'junit:junit:4.12' | ||||||
|     androidTestImplementation 'com.android.support.test:runner:1.0.2' |     androidTestImplementation 'com.android.support.test:runner:1.0.2' | ||||||
|     androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' |     androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' | ||||||
|  | |||||||
| @ -1,26 +1,31 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|     package="adrienmalin.pingpoints" > |           package="adrienmalin.pingpoints"> | ||||||
|  |  | ||||||
|     <uses-permission android:name="android.permission.INTERNET"/> |     <uses-permission android:name="android.permission.INTERNET"/> | ||||||
|     <uses-permission android:name="android.permission.RECORD_AUDIO"/> |     <uses-permission android:name="android.permission.RECORD_AUDIO"/> | ||||||
|  |  | ||||||
|     <application |     <application | ||||||
|             android:allowBackup="true" |             android:allowBackup="true" | ||||||
|             android:icon="@mipmap/ic_launcher" |             android:icon="@mipmap/ic_launcher" | ||||||
|         android:logo="@mipmap/ic_launcher" |  | ||||||
|             android:label="@string/app_name" |             android:label="@string/app_name" | ||||||
|  |             android:logo="@mipmap/ic_launcher" | ||||||
|             android:roundIcon="@mipmap/ic_launcher_round" |             android:roundIcon="@mipmap/ic_launcher_round" | ||||||
|             android:supportsRtl="true" |             android:supportsRtl="true" | ||||||
|         android:theme="@style/Theme.AppCompat" |             android:theme="@style/Theme.AppCompat.NoActionBar"> | ||||||
|         > |  | ||||||
|         <activity |         <activity | ||||||
|                 android:name=".StarterNameActivity" |                 android:name=".StarterNameActivity" | ||||||
|             android:windowSoftInputMode="adjustResize" > |                 android:windowSoftInputMode="adjustResize"> | ||||||
|             <intent-filter> |             <intent-filter> | ||||||
|                 <action android:name="android.intent.action.MAIN" /> |                 <action android:name="android.intent.action.MAIN"/> | ||||||
|  |  | ||||||
|                 <category android:name="android.intent.category.LAUNCHER" /> |                 <category android:name="android.intent.category.LAUNCHER"/> | ||||||
|             </intent-filter> |             </intent-filter> | ||||||
|         </activity> |         </activity> | ||||||
|  |         <activity | ||||||
|  |                 android:name=".MatchActivity" | ||||||
|  |                 android:label="@string/title_activity_match"> | ||||||
|  |         </activity> | ||||||
|     </application> |     </application> | ||||||
|  |  | ||||||
| </manifest> | </manifest> | ||||||
							
								
								
									
										24
									
								
								app/src/main/java/adrienmalin/pingpoints/MatchActivity.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								app/src/main/java/adrienmalin/pingpoints/MatchActivity.kt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | package adrienmalin.pingpoints | ||||||
|  |  | ||||||
|  | import android.os.Bundle | ||||||
|  | import android.support.v7.app.AppCompatActivity | ||||||
|  | import android.support.v7.app.AppCompatDelegate | ||||||
|  | import android.view.View | ||||||
|  | import android.arch.lifecycle.ViewModelProviders | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class MatchActivity : AppCompatActivity() { | ||||||
|  |  | ||||||
|  |     override fun onCreate(savedInstanceState: Bundle?) { | ||||||
|  |         super.onCreate(savedInstanceState) | ||||||
|  |         AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) | ||||||
|  |         setContentView(R.layout.activity_match) | ||||||
|  |         setSupportActionBar(findViewById(R.id.toolbar)) | ||||||
|  |         val matchModel = ViewModelProviders.of(this).get(MatchModel::class.java) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fun updateScore(view: View) { | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -3,8 +3,15 @@ package adrienmalin.pingpoints | |||||||
| import android.arch.lifecycle.ViewModel | import android.arch.lifecycle.ViewModel | ||||||
|  |  | ||||||
| class MatchModel : ViewModel() { | class MatchModel : ViewModel() { | ||||||
|     var players: List<Player> = listOf(Player(), Player()) |     lateinit var players: List<Player> | ||||||
|     var server: Int = 0 |     lateinit var server: Int | ||||||
|     var ttsEnabled: Boolean = false |     lateinit var ttsEnabled: Boolean | ||||||
|     var sttEnabled: Boolean = false |     lateinit var sttEnabled: Boolean | ||||||
|  |  | ||||||
|  |     fun startMatch(player1Name: String, player2Name:String, starterId: Int, enableTTS: Boolean, enableSTT: Boolean) { | ||||||
|  |         players = listOf(Player(player1Name), Player(player2Name)) | ||||||
|  |         server = starterId | ||||||
|  |         ttsEnabled = enableTTS | ||||||
|  |         sttEnabled = enableSTT | ||||||
|  |     } | ||||||
| } | } | ||||||
| @ -1,19 +1,26 @@ | |||||||
| package adrienmalin.pingpoints | package adrienmalin.pingpoints | ||||||
|  |  | ||||||
|  | import android.Manifest | ||||||
| import android.annotation.SuppressLint | import android.annotation.SuppressLint | ||||||
| import android.content.Context | import android.content.Context | ||||||
|  | import android.content.Intent | ||||||
| import android.content.SharedPreferences | import android.content.SharedPreferences | ||||||
| import android.support.v7.app.AppCompatActivity | import android.content.pm.PackageManager | ||||||
| import android.os.Bundle | import android.os.Bundle | ||||||
|  | import android.speech.SpeechRecognizer | ||||||
|  | import android.speech.tts.TextToSpeech | ||||||
|  | import android.support.design.widget.Snackbar | ||||||
|  | import android.support.v4.app.ActivityCompat | ||||||
|  | import android.support.v4.content.ContextCompat | ||||||
|  | import android.support.v7.app.AlertDialog | ||||||
|  | import android.support.v7.app.AppCompatActivity | ||||||
| import android.text.method.LinkMovementMethod | import android.text.method.LinkMovementMethod | ||||||
| import android.view.View | import android.view.View | ||||||
| import android.widget.* | import android.widget.* | ||||||
| import android.speech.tts.TextToSpeech |  | ||||||
| import android.content.Intent |  | ||||||
| import android.speech.SpeechRecognizer |  | ||||||
|  |  | ||||||
|  |  | ||||||
| val CHECK_TTS = 1 | const val CHECK_TTS = 1 | ||||||
|  | const val ASK_PERMISSIONS_RECORD_AUDIO = 2 | ||||||
|  |  | ||||||
|  |  | ||||||
| class StarterNameActivity : AppCompatActivity() { | class StarterNameActivity : AppCompatActivity() { | ||||||
| @ -29,23 +36,21 @@ class StarterNameActivity : AppCompatActivity() { | |||||||
|     override fun onCreate(savedInstanceState: Bundle?) { |     override fun onCreate(savedInstanceState: Bundle?) { | ||||||
|         super.onCreate(savedInstanceState) |         super.onCreate(savedInstanceState) | ||||||
|         setContentView(R.layout.activity_starter_name) |         setContentView(R.layout.activity_starter_name) | ||||||
|  |         setSupportActionBar(findViewById(R.id.toolbar)) | ||||||
|         // Set HTML text for icons credits |         // Set HTML text for icons credits | ||||||
|         findViewById<TextView>(R.id.iconsCredit).run { |         findViewById<TextView>(R.id.iconsCredit).run { | ||||||
|             setHtmlText(getString(R.string.iconCredits)) |             setHtmlText(getString(R.string.iconCredits)) | ||||||
|             movementMethod = LinkMovementMethod.getInstance() |             movementMethod = LinkMovementMethod.getInstance() | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Find views |         // Find views | ||||||
|         player1NameInput = findViewById(R.id.player1Name) |         player1NameInput = findViewById(R.id.player1Name) | ||||||
|         player2NameInput = findViewById(R.id.player2Name) |         player2NameInput = findViewById(R.id.player2Name) | ||||||
|         starterRadioGroup = findViewById(R.id.starterRadioGroup) |         starterRadioGroup = findViewById(R.id.starterRadioGroup) | ||||||
|         enableTtsSwitch = findViewById(R.id.enableTtsSwitch) |         enableTtsSwitch = findViewById(R.id.enableTtsSwitch) | ||||||
|         enableSttSwitch = findViewById(R.id.enableSttSwitch) |         enableSttSwitch = findViewById(R.id.enableSttSwitch) | ||||||
|  |         // Check if function is available on switch checked or swapped | ||||||
|         enableTtsSwitch?.setOnCheckedChangeListener { view, isChecked -> checkTTS() } |         enableTtsSwitch?.setOnCheckedChangeListener { view, isChecked -> checkTTS() } | ||||||
|         enableTtsSwitch?.setOnTouchListener { view, event -> checkTTS(); false} |         enableTtsSwitch?.setOnTouchListener { view, event -> checkTTS(); false} | ||||||
|  |  | ||||||
|         enableSttSwitch?.setOnCheckedChangeListener { view, isChecked -> checkSTT() } |         enableSttSwitch?.setOnCheckedChangeListener { view, isChecked -> checkSTT() } | ||||||
|         enableSttSwitch?.setOnTouchListener { view, event -> checkSTT(); false} |         enableSttSwitch?.setOnTouchListener { view, event -> checkSTT(); false} | ||||||
|  |  | ||||||
| @ -94,15 +99,18 @@ class StarterNameActivity : AppCompatActivity() { | |||||||
|         when (requestCode) { |         when (requestCode) { | ||||||
|             CHECK_TTS -> { |             CHECK_TTS -> { | ||||||
|                 if (resultCode != TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { |                 if (resultCode != TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { | ||||||
|                     Toast.makeText(applicationContext, R.string.TTS_unavailable, Toast.LENGTH_LONG).show() |                     Snackbar.make( | ||||||
|  |                         findViewById(R.id.coordinatorLayout), | ||||||
|  |                         R.string.TTS_unavailable, | ||||||
|  |                         Snackbar.LENGTH_SHORT | ||||||
|  |                     ).show() | ||||||
|                     enableTtsSwitch?.isChecked = false |                     enableTtsSwitch?.isChecked = false | ||||||
|                     Intent().run { |                     Intent().run { | ||||||
|                         action = TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA |                         action = TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA | ||||||
|                         startActivity(this) |                         startActivity(this) | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } else -> { | ||||||
|             else -> { |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -111,9 +119,54 @@ class StarterNameActivity : AppCompatActivity() { | |||||||
|         enableSttSwitch?.let { |         enableSttSwitch?.let { | ||||||
|             if (it.isChecked) { |             if (it.isChecked) { | ||||||
|                 if (!SpeechRecognizer.isRecognitionAvailable(this)) { |                 if (!SpeechRecognizer.isRecognitionAvailable(this)) { | ||||||
|                     Toast.makeText(applicationContext, R.string.STT_unavailable, Toast.LENGTH_LONG).show() |                     Snackbar.make( | ||||||
|                     it.isChecked = false |                         findViewById(R.id.coordinatorLayout), | ||||||
|  |                         R.string.STT_unavailable, | ||||||
|  |                         Snackbar.LENGTH_SHORT | ||||||
|  |                     ).show() | ||||||
|  |                     enableSttSwitch?.isChecked = false | ||||||
|  |                 } else { | ||||||
|  |                     // Ask for record audio permission | ||||||
|  |                     if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { | ||||||
|  |                         // Permission is not granted | ||||||
|  |                         // Should we show an explanation? | ||||||
|  |                         if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO)) { | ||||||
|  |                             AlertDialog.Builder(this) | ||||||
|  |                                 .setTitle(R.string.STT) | ||||||
|  |                                 .setMessage(R.string.explain_record_audio_request) | ||||||
|  |                                 .setPositiveButton(R.string.OK) { dialog, id -> | ||||||
|  |                                     ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO), ASK_PERMISSIONS_RECORD_AUDIO) | ||||||
|                                 } |                                 } | ||||||
|  |                                 .setNegativeButton(R.string.cancel) { dialog, id -> | ||||||
|  |                                     enableSttSwitch?.isChecked = false | ||||||
|  |                                 } | ||||||
|  |                                 .create() | ||||||
|  |                                 .show() | ||||||
|  |                         } else { | ||||||
|  |                             // No explanation needed, we can request the permission. | ||||||
|  |                             ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO), ASK_PERMISSIONS_RECORD_AUDIO) | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) { | ||||||
|  |         when (requestCode) { | ||||||
|  |             ASK_PERMISSIONS_RECORD_AUDIO -> { | ||||||
|  |                 // If request is cancelled, the result arrays are empty. | ||||||
|  |                 if ((grantResults.isNotEmpty() && grantResults[0] != PackageManager.PERMISSION_GRANTED)) { | ||||||
|  |                     // permission denied | ||||||
|  |                     Snackbar.make( | ||||||
|  |                         findViewById(R.id.coordinatorLayout), | ||||||
|  |                         R.string.audio_record_permission_denied, | ||||||
|  |                         Snackbar.LENGTH_LONG | ||||||
|  |                     ).show() | ||||||
|  |                     enableSttSwitch?.isChecked = false | ||||||
|  |                 } | ||||||
|  |                 return | ||||||
|  |             } else -> { | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -121,18 +174,38 @@ class StarterNameActivity : AppCompatActivity() { | |||||||
|     fun startMatch(view: View) { |     fun startMatch(view: View) { | ||||||
|         val player1Name = player1NameInput?.text.toString() |         val player1Name = player1NameInput?.text.toString() | ||||||
|         val player2Name = player2NameInput?.text.toString() |         val player2Name = player2NameInput?.text.toString() | ||||||
|  |         val radioStarterId = starterRadioGroup?.checkedRadioButtonId | ||||||
|  |         val enableTTS = enableTtsSwitch?.isChecked | ||||||
|  |         val enableSTT = enableSttSwitch?.isChecked | ||||||
|  |  | ||||||
|         // Save |         // Save | ||||||
|         previousMatch?.edit()?.run{ |         previousMatch?.edit()?.apply{ | ||||||
|             putString("previousPlayer1", player1Name) |             player1Name.let { putString("previousPlayer1", it) } | ||||||
|             putString("previousPlayer2", player2Name) |             player2Name.let { putString("previousPlayer2", it) } | ||||||
|             starterRadioGroup?.let{ putInt("previousStarterId", it.checkedRadioButtonId) } |             radioStarterId?.let{ putInt("previousStarterId", it) } | ||||||
|             previousPlayers?.let { putStringSet("previousPlayers", it.plus(player1Name).plus(player2Name)) } |             putStringSet("previousPlayers", previousPlayers.plus(player1Name).plus(player2Name)) | ||||||
|             enableTtsSwitch?.let { putBoolean("enableTTS", it.isChecked) } |             enableTTS?.let { putBoolean("enableTTS", it) } | ||||||
|             enableSttSwitch?.let { putBoolean("enableSTT", it.isChecked) } |             enableSTT?.let { putBoolean("enableSTT", it) } | ||||||
|             commit() |             commit() | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         startActivity( | ||||||
|  |             Intent(this, MatchActivity::class.java).apply { | ||||||
|  |                 putExtra("player1Name", player1Name) | ||||||
|  |                 putExtra("player2Name", player2Name) | ||||||
|  |                 putExtra( | ||||||
|  |                     "starterId", | ||||||
|  |                     when(radioStarterId) { | ||||||
|  |                         R.id.radioPlayer1Starts -> 0 | ||||||
|  |                         R.id.radioPlayer2Starts -> 1 | ||||||
|  |                         else -> 0 | ||||||
|  |                     } | ||||||
|  |                 ) | ||||||
|  |                 putExtra("enableTTS", enableTTS) | ||||||
|  |                 putExtra("enableSTT", enableSTT) | ||||||
|  |             } | ||||||
|  |         ) | ||||||
|  |  | ||||||
|         finish() |         finish() | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										143
									
								
								app/src/main/res/layout-land/activity_match.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								app/src/main/res/layout-land/activity_match.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,143 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <android.support.constraint.ConstraintLayout | ||||||
|  |         xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |         xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
|  |         xmlns:tools="http://schemas.android.com/tools" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent" | ||||||
|  |         tools:context=".MatchActivity" | ||||||
|  |         tools:layout_editor_absoluteY="73dp"> | ||||||
|  |  | ||||||
|  |     <LinearLayout | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="match_parent" | ||||||
|  |             android:orientation="vertical"> | ||||||
|  |  | ||||||
|  |         <android.support.v7.widget.Toolbar | ||||||
|  |                 android:id="@+id/toolbar" | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="?attr/actionBarSize" | ||||||
|  |                 android:layout_marginBottom="8dp" | ||||||
|  |                 android:background="@color/colorPrimary" | ||||||
|  |                 android:elevation="4dp" | ||||||
|  |                 android:theme="@style/ThemeOverlay.AppCompat.ActionBar" | ||||||
|  |                 app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> | ||||||
|  |  | ||||||
|  |         <LinearLayout | ||||||
|  |                 android:id="@+id/linearLayoutText" | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_marginEnd="8dp" | ||||||
|  |                 android:layout_marginLeft="8dp" | ||||||
|  |                 android:layout_marginRight="8dp" | ||||||
|  |                 android:layout_marginStart="8dp" | ||||||
|  |                 android:orientation="horizontal" | ||||||
|  |                 app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |                 app:layout_constraintStart_toStartOf="parent" | ||||||
|  |                 tools:layout_editor_absoluteY="8dp"> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                     android:id="@+id/textService" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="wrap_content" | ||||||
|  |                     android:layout_marginEnd="8dp" | ||||||
|  |                     android:layout_marginStart="8dp" | ||||||
|  |                     android:layout_weight="1" | ||||||
|  |                     android:gravity="left" | ||||||
|  |                     android:textAppearance="@style/TextAppearance.AppCompat.Large" | ||||||
|  |                     app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |                     app:layout_constraintHorizontal_bias="1.0" | ||||||
|  |                     app:layout_constraintStart_toEndOf="@+id/textScore" | ||||||
|  |                     app:layout_constraintTop_toTopOf="parent" | ||||||
|  |                     tools:text="@string/service" android:layout_marginRight="8dp" | ||||||
|  |                     android:layout_marginLeft="8dp"/> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                     android:id="@+id/textScore" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="wrap_content" | ||||||
|  |                     android:layout_marginLeft="8dp" | ||||||
|  |                     android:layout_marginStart="8dp" | ||||||
|  |                     android:layout_weight="1" | ||||||
|  |                     android:gravity="right|center" | ||||||
|  |                     android:textAppearance="@style/TextAppearance.AppCompat.Large" | ||||||
|  |                     app:layout_constraintStart_toStartOf="parent" | ||||||
|  |                     app:layout_constraintTop_toTopOf="parent" | ||||||
|  |                     tools:text="@string/score" android:layout_marginRight="8dp"/> | ||||||
|  |  | ||||||
|  |         </LinearLayout> | ||||||
|  |  | ||||||
|  |         <LinearLayout | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="match_parent" | ||||||
|  |                 android:orientation="horizontal"> | ||||||
|  |  | ||||||
|  |             <ImageView | ||||||
|  |                     android:id="@+id/imgService1" | ||||||
|  |                     android:layout_width="48dp" | ||||||
|  |                     android:layout_margin="8dp" | ||||||
|  |                     android:layout_weight="0" | ||||||
|  |                     android:contentDescription="@string/service_img_description" | ||||||
|  |                     app:srcCompat="@drawable/ic_service_1" | ||||||
|  |                     tools:layout_editor_absoluteY="120dp" android:layout_height="match_parent"/> | ||||||
|  |  | ||||||
|  |             <Button | ||||||
|  |                     android:id="@+id/buttonPlayer1" | ||||||
|  |                     style="@style/Widget.AppCompat.Button.Colored" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="match_parent" | ||||||
|  |                     android:layout_marginBottom="8dp" | ||||||
|  |                     android:layout_marginLeft="8dp" | ||||||
|  |                     android:layout_marginStart="8dp" | ||||||
|  |                     android:layout_marginTop="8dp" | ||||||
|  |                     android:layout_weight="1" | ||||||
|  |                     android:background="@color/colorAccent" | ||||||
|  |                     android:bufferType="spannable" | ||||||
|  |                     android:onClick="updateScore" | ||||||
|  |                     android:textAllCaps="false" | ||||||
|  |                     android:textAppearance="@style/TextAppearance.AppCompat.Button" | ||||||
|  |                     android:textSize="24sp" | ||||||
|  |                     android:textStyle="bold" | ||||||
|  |                     app:layout_constraintBottom_toBottomOf="parent" | ||||||
|  |                     app:layout_constraintStart_toEndOf="@+id/imgService1" | ||||||
|  |                     app:layout_constraintTop_toTopOf="parent" | ||||||
|  |                     tools:text="@string/button_text" android:layout_marginRight="8dp"/> | ||||||
|  |  | ||||||
|  |             <Button | ||||||
|  |                     android:id="@+id/buttonPlayer2" | ||||||
|  |                     style="@style/Widget.AppCompat.Button.Colored" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="match_parent" | ||||||
|  |                     android:layout_marginBottom="8dp" | ||||||
|  |                     android:layout_marginEnd="8dp" | ||||||
|  |                     android:layout_marginLeft="8dp" | ||||||
|  |                     android:layout_marginRight="8dp" | ||||||
|  |                     android:layout_marginStart="8dp" | ||||||
|  |                     android:layout_marginTop="8dp" | ||||||
|  |                     android:layout_weight="1" | ||||||
|  |                     android:background="@color/colorAccent" | ||||||
|  |                     android:bufferType="spannable" | ||||||
|  |                     android:onClick="updateScore" | ||||||
|  |                     android:textAllCaps="false" | ||||||
|  |                     android:textAppearance="@style/TextAppearance.AppCompat.Button" | ||||||
|  |                     android:textSize="24sp" | ||||||
|  |                     android:textStyle="bold" | ||||||
|  |                     app:layout_constraintBottom_toBottomOf="parent" | ||||||
|  |                     app:layout_constraintEnd_toStartOf="@+id/imgService2" | ||||||
|  |                     app:layout_constraintStart_toEndOf="@+id/buttonPlayer1" | ||||||
|  |                     tools:text="@string/button_text"/> | ||||||
|  |  | ||||||
|  |             <ImageView | ||||||
|  |                     android:id="@+id/imgService2" | ||||||
|  |                     android:layout_width="48dp" | ||||||
|  |                     android:layout_height="match_parent" | ||||||
|  |                     android:layout_margin="8dp" | ||||||
|  |                     android:layout_weight="0" | ||||||
|  |                     android:contentDescription="@string/service_img_description" | ||||||
|  |                     tools:layout_editor_absoluteY="120dp"/> | ||||||
|  |  | ||||||
|  |         </LinearLayout> | ||||||
|  |  | ||||||
|  |     </LinearLayout> | ||||||
|  |  | ||||||
|  | </android.support.constraint.ConstraintLayout> | ||||||
| @ -1,5 +1,13 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <android.support.constraint.ConstraintLayout |  | ||||||
|  | <android.support.design.widget.CoordinatorLayout | ||||||
|  |         android:id="@+id/myCoordinatorLayout" | ||||||
|  |         xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |         xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent"> | ||||||
|  |  | ||||||
|  |     <android.support.constraint.ConstraintLayout | ||||||
|         xmlns:android="http://schemas.android.com/apk/res/android" |         xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|         xmlns:tools="http://schemas.android.com/tools" |         xmlns:tools="http://schemas.android.com/tools" | ||||||
|         xmlns:app="http://schemas.android.com/apk/res-auto" |         xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
| @ -7,14 +15,24 @@ | |||||||
|         android:layout_height="match_parent" |         android:layout_height="match_parent" | ||||||
|         tools:context=".StarterNameActivity"> |         tools:context=".StarterNameActivity"> | ||||||
|  |  | ||||||
|  |         <android.support.v7.widget.Toolbar | ||||||
|  |                 android:id="@+id/toolbar" | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="?attr/actionBarSize" | ||||||
|  |                 android:layout_marginBottom="8dp" | ||||||
|  |                 android:background="@color/colorPrimary" | ||||||
|  |                 android:elevation="4dp" | ||||||
|  |                 android:theme="@style/ThemeOverlay.AppCompat.ActionBar" | ||||||
|  |                 app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|                 android:layout_width="0dp" |                 android:layout_width="0dp" | ||||||
|                 android:layout_height="wrap_content" |                 android:layout_height="wrap_content" | ||||||
|                 android:id="@+id/WhoStarts" android:text="@string/who_starts" |                 android:id="@+id/WhoStarts" android:text="@string/who_starts" | ||||||
|             android:layout_marginTop="8dp" app:layout_constraintTop_toTopOf="parent" |                 android:layout_marginTop="8dp" | ||||||
|                 app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp" |                 app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp" | ||||||
|                 android:layout_marginStart="8dp" android:textAppearance="@style/TextAppearance.AppCompat.Headline" |                 android:layout_marginStart="8dp" android:textAppearance="@style/TextAppearance.AppCompat.Headline" | ||||||
|     /> |                 app:layout_constraintTop_toBottomOf="@+id/toolbar"/> | ||||||
|         <RadioGroup |         <RadioGroup | ||||||
|                 android:layout_width="0dp" |                 android:layout_width="0dp" | ||||||
|                 android:layout_height="wrap_content" |                 android:layout_height="wrap_content" | ||||||
| @ -100,4 +118,6 @@ | |||||||
|                 android:drawableStart="@drawable/ic_new_match" |                 android:drawableStart="@drawable/ic_new_match" | ||||||
|                 android:drawableLeft="@drawable/ic_new_match" |                 android:drawableLeft="@drawable/ic_new_match" | ||||||
|                 android:onClick="startMatch"/> |                 android:onClick="startMatch"/> | ||||||
| </android.support.constraint.ConstraintLayout> |     </android.support.constraint.ConstraintLayout> | ||||||
|  |  | ||||||
|  | </android.support.design.widget.CoordinatorLayout> | ||||||
							
								
								
									
										136
									
								
								app/src/main/res/layout/activity_match.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								app/src/main/res/layout/activity_match.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,136 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <android.support.constraint.ConstraintLayout | ||||||
|  |         xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |         xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
|  |         xmlns:tools="http://schemas.android.com/tools" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent" | ||||||
|  |         tools:context=".MatchActivity" | ||||||
|  |         tools:layout_editor_absoluteY="73dp"> | ||||||
|  |  | ||||||
|  |     <LinearLayout | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="match_parent" | ||||||
|  |             android:orientation="vertical"> | ||||||
|  |  | ||||||
|  |         <android.support.v7.widget.Toolbar | ||||||
|  |                 android:id="@+id/toolbar" | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="?attr/actionBarSize" | ||||||
|  |                 android:layout_marginBottom="8dp" | ||||||
|  |                 android:background="@color/colorPrimary" | ||||||
|  |                 android:elevation="4dp" | ||||||
|  |                 android:theme="@style/ThemeOverlay.AppCompat.ActionBar" | ||||||
|  |                 app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> | ||||||
|  |  | ||||||
|  |         <LinearLayout | ||||||
|  |                 android:id="@+id/linearLayoutText" | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_marginEnd="8dp" | ||||||
|  |                 android:layout_marginLeft="8dp" | ||||||
|  |                 android:layout_marginRight="8dp" | ||||||
|  |                 android:layout_marginStart="8dp" | ||||||
|  |                 android:orientation="horizontal" | ||||||
|  |                 app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |                 app:layout_constraintStart_toStartOf="parent" | ||||||
|  |                 tools:layout_editor_absoluteY="8dp"> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                     android:id="@+id/textService" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="wrap_content" | ||||||
|  |                     android:layout_marginEnd="8dp" | ||||||
|  |                     android:layout_marginStart="8dp" | ||||||
|  |                     android:layout_weight="1" | ||||||
|  |                     android:gravity="left" | ||||||
|  |                     android:textAppearance="@style/TextAppearance.AppCompat.Large" | ||||||
|  |                     app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |                     app:layout_constraintHorizontal_bias="1.0" | ||||||
|  |                     app:layout_constraintStart_toEndOf="@+id/textScore" | ||||||
|  |                     app:layout_constraintTop_toTopOf="parent" | ||||||
|  |                     tools:text="@string/service" /> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                     android:id="@+id/textScore" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="wrap_content" | ||||||
|  |                     android:layout_marginLeft="8dp" | ||||||
|  |                     android:layout_marginStart="8dp" | ||||||
|  |                     android:layout_weight="1" | ||||||
|  |                     android:gravity="right|center" | ||||||
|  |                     android:textAppearance="@style/TextAppearance.AppCompat.Large" | ||||||
|  |                     app:layout_constraintStart_toStartOf="parent" | ||||||
|  |                     app:layout_constraintTop_toTopOf="parent" | ||||||
|  |                     tools:text="@string/score" android:layout_marginRight="8dp"/> | ||||||
|  |  | ||||||
|  |         </LinearLayout> | ||||||
|  |  | ||||||
|  |         <LinearLayout | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="match_parent" | ||||||
|  |                 android:orientation="vertical"> | ||||||
|  |  | ||||||
|  |             <ImageView | ||||||
|  |                     android:id="@+id/imgService1" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="48dp" | ||||||
|  |                     android:layout_margin="8dp" | ||||||
|  |                     android:layout_weight="0" | ||||||
|  |                     android:contentDescription="@string/service_img_description" | ||||||
|  |                     app:srcCompat="@drawable/ic_service_1" | ||||||
|  |                     tools:layout_editor_absoluteY="120dp"/> | ||||||
|  |  | ||||||
|  |             <Button | ||||||
|  |                     android:id="@+id/buttonPlayer1" | ||||||
|  |                     style="@style/Widget.AppCompat.Button.Colored" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="match_parent" | ||||||
|  |                     android:layout_marginStart="8dp" | ||||||
|  |                     android:layout_weight="1" | ||||||
|  |                     android:background="@color/colorAccent" | ||||||
|  |                     android:bufferType="spannable" | ||||||
|  |                     android:onClick="updateScore" | ||||||
|  |                     android:textAllCaps="false" | ||||||
|  |                     android:textAppearance="@style/TextAppearance.AppCompat.Button" | ||||||
|  |                     android:textSize="24sp" | ||||||
|  |                     android:textStyle="bold" | ||||||
|  |                     app:layout_constraintBottom_toBottomOf="parent" | ||||||
|  |                     app:layout_constraintStart_toEndOf="@+id/imgService1" | ||||||
|  |                     app:layout_constraintTop_toTopOf="parent" | ||||||
|  |                     tools:text="@string/button_text" android:layout_margin="8dp"/> | ||||||
|  |  | ||||||
|  |             <Button | ||||||
|  |                     android:id="@+id/buttonPlayer2" | ||||||
|  |                     style="@style/Widget.AppCompat.Button.Colored" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="match_parent" | ||||||
|  |                     android:layout_marginEnd="8dp" | ||||||
|  |                     android:layout_marginStart="8dp" | ||||||
|  |                     android:layout_weight="1" | ||||||
|  |                     android:background="@color/colorAccent" | ||||||
|  |                     android:bufferType="spannable" | ||||||
|  |                     android:onClick="updateScore" | ||||||
|  |                     android:textAllCaps="false" | ||||||
|  |                     android:textAppearance="@style/TextAppearance.AppCompat.Button" | ||||||
|  |                     android:textSize="24sp" | ||||||
|  |                     android:textStyle="bold" | ||||||
|  |                     app:layout_constraintBottom_toBottomOf="parent" | ||||||
|  |                     app:layout_constraintEnd_toStartOf="@+id/imgService2" | ||||||
|  |                     app:layout_constraintStart_toEndOf="@+id/buttonPlayer1" | ||||||
|  |                     tools:text="@string/button_text" android:layout_margin="8dp"/> | ||||||
|  |  | ||||||
|  |             <ImageView | ||||||
|  |                     android:id="@+id/imgService2" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="48dp" | ||||||
|  |                     android:layout_margin="8dp" | ||||||
|  |                     android:layout_weight="0" | ||||||
|  |                     android:contentDescription="@string/service_img_description" | ||||||
|  |                     tools:layout_editor_absoluteY="120dp"/> | ||||||
|  |  | ||||||
|  |         </LinearLayout> | ||||||
|  |  | ||||||
|  |     </LinearLayout> | ||||||
|  |  | ||||||
|  | </android.support.constraint.ConstraintLayout> | ||||||
| @ -1,5 +1,13 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <android.support.constraint.ConstraintLayout |  | ||||||
|  | <android.support.design.widget.CoordinatorLayout | ||||||
|  |         android:id="@+id/coordinatorLayout" | ||||||
|  |         xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |         xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent"> | ||||||
|  |  | ||||||
|  |     <android.support.constraint.ConstraintLayout | ||||||
|         xmlns:android="http://schemas.android.com/apk/res/android" |         xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|         xmlns:tools="http://schemas.android.com/tools" |         xmlns:tools="http://schemas.android.com/tools" | ||||||
|         xmlns:app="http://schemas.android.com/apk/res-auto" |         xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
| @ -7,14 +15,24 @@ | |||||||
|         android:layout_height="match_parent" |         android:layout_height="match_parent" | ||||||
|         tools:context=".StarterNameActivity"> |         tools:context=".StarterNameActivity"> | ||||||
|  |  | ||||||
|  |         <android.support.v7.widget.Toolbar | ||||||
|  |                 android:id="@+id/toolbar" | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="?attr/actionBarSize" | ||||||
|  |                 android:layout_marginBottom="8dp" | ||||||
|  |                 android:background="@color/colorPrimary" | ||||||
|  |                 android:elevation="4dp" | ||||||
|  |                 android:theme="@style/ThemeOverlay.AppCompat.ActionBar" | ||||||
|  |                 app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> | ||||||
|  |  | ||||||
|         <TextView |         <TextView | ||||||
|                 android:layout_width="0dp" |                 android:layout_width="0dp" | ||||||
|                 android:layout_height="wrap_content" |                 android:layout_height="wrap_content" | ||||||
|                 android:id="@+id/WhoStarts" android:text="@string/who_starts" |                 android:id="@+id/WhoStarts" android:text="@string/who_starts" | ||||||
|             android:layout_marginTop="8dp" app:layout_constraintTop_toTopOf="parent" |                 android:layout_marginTop="8dp" | ||||||
|                 app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp" |                 app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp" | ||||||
|                 android:layout_marginStart="8dp" android:textAppearance="@style/TextAppearance.AppCompat.Headline" |                 android:layout_marginStart="8dp" android:textAppearance="@style/TextAppearance.AppCompat.Headline" | ||||||
|     /> |                 app:layout_constraintTop_toBottomOf="@+id/toolbar"/> | ||||||
|         <LinearLayout |         <LinearLayout | ||||||
|                 android:orientation="horizontal" |                 android:orientation="horizontal" | ||||||
|                 android:layout_width="match_parent" |                 android:layout_width="match_parent" | ||||||
| @ -115,4 +133,7 @@ | |||||||
|                 android:layout_marginBottom="8dp" app:layout_constraintBottom_toBottomOf="parent" |                 android:layout_marginBottom="8dp" app:layout_constraintBottom_toBottomOf="parent" | ||||||
|                 android:drawableStart="@drawable/ic_new_match" |                 android:drawableStart="@drawable/ic_new_match" | ||||||
|                 android:drawableLeft="@drawable/ic_new_match" android:onClick="startMatch"/> |                 android:drawableLeft="@drawable/ic_new_match" android:onClick="startMatch"/> | ||||||
| </android.support.constraint.ConstraintLayout> |  | ||||||
|  |     </android.support.constraint.ConstraintLayout> | ||||||
|  |  | ||||||
|  | </android.support.design.widget.CoordinatorLayout> | ||||||
| @ -12,4 +12,17 @@ | |||||||
|     <string name="iconCredits"><html>Icônes par <a href="http://www.freepik.com" title="Freepik">Freepik</a> chez <a href="https://www.flaticon.com/" title="Flaticon">flaticon.com</a> Licence <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a></html></string> |     <string name="iconCredits"><html>Icônes par <a href="http://www.freepik.com" title="Freepik">Freepik</a> chez <a href="https://www.flaticon.com/" title="Flaticon">flaticon.com</a> Licence <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a></html></string> | ||||||
|     <string name="TTS_unavailable">Désolé, votre appareil ne permet pas la synthèse vocale.</string> |     <string name="TTS_unavailable">Désolé, votre appareil ne permet pas la synthèse vocale.</string> | ||||||
|     <string name="STT_unavailable">Désolé, votre appareil ne permet pas la reconnaissance vocale.</string> |     <string name="STT_unavailable">Désolé, votre appareil ne permet pas la reconnaissance vocale.</string> | ||||||
|  |     <string name="explain_record_audio_request">"Cette appli utilise l'API de Google pour la reconnaissance vocale : votre voix sera enregistrée et envoyée aux serveurs de Google pour analyse. | ||||||
|  | Cela requiert une connexion internet et la permission d'enregistrer des fichiers audio. | ||||||
|  | Vous pouvez à tout moment changer la permission dans les paramètres Android." | ||||||
|  |     </string> | ||||||
|  |     <string name="OK">OK</string> | ||||||
|  |     <string name="cancel">Annuler</string> | ||||||
|  |     <string name="audio_record_permission_denied">La reconnaissance vocale a besoin de la permission d\'enregistrer des | ||||||
|  |         fichiers audio pour fonctionner. | ||||||
|  |     </string> | ||||||
|  |     <string name="service">Service : %s</string> | ||||||
|  |     <string name="score">Score : %d - %d</string> | ||||||
|  |     <string name="service_img_description">Service</string> | ||||||
|  |     <string name="title_activity_match">Ping Points</string> | ||||||
| </resources> | </resources> | ||||||
| @ -2,5 +2,5 @@ | |||||||
| <resources> | <resources> | ||||||
|     <color name="colorPrimary">#016df5</color> |     <color name="colorPrimary">#016df5</color> | ||||||
|     <color name="colorPrimaryDark">#004aa7</color> |     <color name="colorPrimaryDark">#004aa7</color> | ||||||
|     <color name="colorAccent">#0088FF</color> |     <color name="colorAccent">#0088ff</color> | ||||||
| </resources> | </resources> | ||||||
| @ -8,7 +8,25 @@ | |||||||
|     <string name="start">Let\'s go!</string> |     <string name="start">Let\'s go!</string> | ||||||
|     <string name="swap_names">Swap names</string> |     <string name="swap_names">Swap names</string> | ||||||
|     <string name="PingPointsCredits">Ping Points by Adrien Malin</string> |     <string name="PingPointsCredits">Ping Points by Adrien Malin</string> | ||||||
|     <string name="iconCredits">"<html>Icons made by <a href="http://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">flaticon.com</a> is licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a></html>"</string> |     <string name="iconCredits">"<html>Icons made by <a href="http://www.freepik.com" title="Freepik">Freepik</a> | ||||||
|  |         from <a href="https://www.flaticon.com/" title="Flaticon">flaticon.com</a> is | ||||||
|  |         licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY | ||||||
|  |         3.0" target="_blank">CC 3.0 BY</a></html>" | ||||||
|  |     </string> | ||||||
|     <string name="TTS_unavailable">Sorry, your device doesn\'t support text to speech.</string> |     <string name="TTS_unavailable">Sorry, your device doesn\'t support text to speech.</string> | ||||||
|     <string name="STT_unavailable">Sorry, your device doesn\'t support voice recognition.</string> |     <string name="STT_unavailable">Sorry, your device doesn\'t support voice recognition.</string> | ||||||
|  |     <string name="explain_record_audio_request">"This app uses Google API for voice recognition: your voice will be | ||||||
|  |         recorded and analyzed by Google's servers. | ||||||
|  |         It requires an internet connection and permission for audio recording. | ||||||
|  |         You can always change permission in Android settings." | ||||||
|  |     </string> | ||||||
|  |     <string name="OK">OK</string> | ||||||
|  |     <string name="cancel">Cancel</string> | ||||||
|  |     <string name="audio_record_permission_denied">Audio recording permission required to use voice recognition.</string> | ||||||
|  |     <string name="title_activity_match">Ping Points</string> | ||||||
|  |     <string name="service">Service: %s</string> | ||||||
|  |     <string name="score">Score: %d - %d</string> | ||||||
|  |     <string name="service_img_description">Service</string> | ||||||
|  |     <string name="button_text" translatable="false">%s <br /> <br /> <big> <big> %d </big> </big> | ||||||
|  |     </string> | ||||||
| </resources> | </resources> | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user