Use an EditText during training, instead of manual input handling
This commit is contained in:
parent
a011aabb62
commit
9eae4e61e0
2 changed files with 13 additions and 49 deletions
|
@ -1,13 +1,10 @@
|
||||||
package es.eoinrul.ecwt
|
package es.eoinrul.ecwt
|
||||||
|
|
||||||
import android.app.Activity
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.KeyEvent
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.widget.EditText
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -26,7 +23,7 @@ class TrainingActivity : AppCompatActivity(),
|
||||||
initSoundPlayer()
|
initSoundPlayer()
|
||||||
|
|
||||||
mAlphabet = intent.getStringExtra(TRAINING_ALPHABET)!!;
|
mAlphabet = intent.getStringExtra(TRAINING_ALPHABET)!!;
|
||||||
mEnteredTextView = findViewById<TextView>(R.id.enteredText);
|
mEnteredTextView = findViewById<EditText>(R.id.enteredText);
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initSoundPlayer() {
|
private fun initSoundPlayer() {
|
||||||
|
@ -40,7 +37,6 @@ class TrainingActivity : AppCompatActivity(),
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
initSoundPlayer()
|
initSoundPlayer()
|
||||||
mEnteredTextView.text = "Touch to Start" // TODO Reset properly, somehow
|
|
||||||
mLessonStarted = false
|
mLessonStarted = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,36 +44,9 @@ class TrainingActivity : AppCompatActivity(),
|
||||||
super.onPause();
|
super.onPause();
|
||||||
mSoundPlayer?.quit()
|
mSoundPlayer?.quit()
|
||||||
mSoundPlayer = null
|
mSoundPlayer = null
|
||||||
|
|
||||||
if(mLessonStarted) {
|
|
||||||
// Shut down the soft keyboard
|
|
||||||
val imm = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
|
|
||||||
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
mLessonStarted = false
|
mLessonStarted = false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
|
|
||||||
// TODO This is a pretty lame input-method implementation. Do this properly.
|
|
||||||
if(!mLessonStarted)
|
|
||||||
return true
|
|
||||||
|
|
||||||
val previousText : String = mEnteredTextView.text.toString()
|
|
||||||
|
|
||||||
if(event.keyCode == KeyEvent.KEYCODE_DEL) {
|
|
||||||
if(previousText.isNotEmpty()) {
|
|
||||||
mEnteredTextView.text = previousText.substring(0, previousText.length - 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
val enteredChar : Char = event.unicodeChar.toChar()
|
|
||||||
mEnteredTextView.text = previousText + enteredChar.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun streamFinished(stream: DitDahSoundStream) {
|
override fun streamFinished(stream: DitDahSoundStream) {
|
||||||
if(!mLessonStarted) {
|
if(!mLessonStarted) {
|
||||||
// Don't do anything if we've stopped the activity
|
// Don't do anything if we've stopped the activity
|
||||||
|
@ -92,7 +61,7 @@ class TrainingActivity : AppCompatActivity(),
|
||||||
// The lesson text has an extra space at the end, which we don't want to grade
|
// The lesson text has an extra space at the end, which we don't want to grade
|
||||||
var lessonText = mLessonText.trim()
|
var lessonText = mLessonText.trim()
|
||||||
// The input text has a leading space that we don't want to grade
|
// The input text has a leading space that we don't want to grade
|
||||||
var inputText = mEnteredTextView.text.trim()
|
var inputText = mEnteredTextView.text.toString()
|
||||||
|
|
||||||
val intent = Intent(activityContext, TrainingResultsActivity::class.java).apply {
|
val intent = Intent(activityContext, TrainingResultsActivity::class.java).apply {
|
||||||
putExtra(TRAINING_ANSWER, lessonText)
|
putExtra(TRAINING_ANSWER, lessonText)
|
||||||
|
@ -108,13 +77,7 @@ class TrainingActivity : AppCompatActivity(),
|
||||||
if(mLessonStarted)
|
if(mLessonStarted)
|
||||||
return
|
return
|
||||||
|
|
||||||
mEnteredTextView.text = " "
|
val generatorSettings = DitDahGeneratorSettings()
|
||||||
|
|
||||||
// Bring up the soft keyboard
|
|
||||||
val imm = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
|
|
||||||
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
|
|
||||||
|
|
||||||
val generatorSettings = DitDahGeneratorSettings()
|
|
||||||
|
|
||||||
val lessonLengthInMinutes = 1 // TODO These should be configurable from the settings window
|
val lessonLengthInMinutes = 1 // TODO These should be configurable from the settings window
|
||||||
val wordSize = 5
|
val wordSize = 5
|
||||||
|
@ -138,6 +101,9 @@ class TrainingActivity : AppCompatActivity(),
|
||||||
mLessonStarted = true
|
mLessonStarted = true
|
||||||
mLessonText = lessonText
|
mLessonText = lessonText
|
||||||
|
|
||||||
|
// Insert a space into the editable, to clear the hint
|
||||||
|
mEnteredTextView.text.append(" ")
|
||||||
|
|
||||||
// Pause before starting to let keyboard appear, and user get ready to type
|
// Pause before starting to let keyboard appear, and user get ready to type
|
||||||
var secondsPauseBeforeLessonStart : Long = 2
|
var secondsPauseBeforeLessonStart : Long = 2
|
||||||
Timer().schedule(object : TimerTask() {
|
Timer().schedule(object : TimerTask() {
|
||||||
|
@ -151,7 +117,7 @@ class TrainingActivity : AppCompatActivity(),
|
||||||
|
|
||||||
private var mAlphabet : String = ""
|
private var mAlphabet : String = ""
|
||||||
private var mSoundPlayer : DitDahSoundStream? = null
|
private var mSoundPlayer : DitDahSoundStream? = null
|
||||||
private lateinit var mEnteredTextView : TextView
|
private lateinit var mEnteredTextView : EditText
|
||||||
private var mLessonStarted : Boolean = false
|
private var mLessonStarted : Boolean = false
|
||||||
private var mLessonText : String = ""
|
private var mLessonText : String = ""
|
||||||
|
|
||||||
|
|
|
@ -6,20 +6,18 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context="es.eoinrul.ecwt.TrainingActivity">
|
tools:context="es.eoinrul.ecwt.TrainingActivity">
|
||||||
|
|
||||||
<TextView
|
<EditText
|
||||||
android:id="@+id/enteredText"
|
android:id="@+id/enteredText"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:layout_marginEnd="100dp"
|
android:layout_marginEnd="100dp"
|
||||||
android:ellipsize="start"
|
android:ems="10"
|
||||||
|
android:hint="@string/start_training_button_label"
|
||||||
|
android:inputType="textPersonName"
|
||||||
android:onClick="onStartTrainingClicked"
|
android:onClick="onStartTrainingClicked"
|
||||||
android:overScrollMode="always"
|
android:textAlignment="viewEnd"
|
||||||
android:scrollHorizontally="true"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:text="@string/start_training_button_label"
|
|
||||||
android:textAlignment="textEnd"
|
|
||||||
android:textSize="36sp"
|
android:textSize="36sp"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
|
Loading…
Add table
Reference in a new issue