1
0
Fork 0

Add an auto-send button to sounder, to optionally batch up a message

This commit is contained in:
Eoin Mcloughlin 2022-08-28 15:40:27 +01:00
parent 2cdc7d75cd
commit 9fcc87963e
4 changed files with 54 additions and 4 deletions

View file

@ -3,6 +3,11 @@ package es.eoinrul.ecwt
import android.os.Bundle import android.os.Bundle
import android.text.Editable import android.text.Editable
import android.text.TextWatcher import android.text.TextWatcher
import android.view.KeyEvent
import android.view.View
import android.view.inputmethod.EditorInfo
import android.widget.Button
import android.widget.CheckBox
import android.widget.EditText import android.widget.EditText
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
@ -24,6 +29,21 @@ class SounderActivity : AppCompatActivity(), DitDahSoundStream.StreamNotificatio
mKeyboardInput = findViewById<EditText>(R.id.sounderInput) mKeyboardInput = findViewById<EditText>(R.id.sounderInput)
mKeyboardInput?.addTextChangedListener(mInputHandler) mKeyboardInput?.addTextChangedListener(mInputHandler)
mKeyboardInput?.requestFocus() mKeyboardInput?.requestFocus()
mKeyboardInput?.setOnEditorActionListener { textView, actionId, keyEvent ->
if(!mAutoSend && (actionId == EditorInfo.IME_ACTION_SEND ||
(actionId == EditorInfo.IME_NULL && keyEvent.keyCode == KeyEvent.KEYCODE_ENTER) ) ) {
mUserTriggeredSend = true
mKeyboardInput!!.isEnabled = false
ensurePlaying()
}
mAutoSend
}
var autoSendCheck = findViewById<CheckBox>(R.id.autoSendCheck);
autoSendCheck.setOnCheckedChangeListener { compoundButton, _ ->
mAutoSend = compoundButton.isChecked
}
autoSendCheck.isChecked = mAutoSend
initSoundPlayer() initSoundPlayer()
} }
@ -47,6 +67,8 @@ class SounderActivity : AppCompatActivity(), DitDahSoundStream.StreamNotificatio
mSpaceDurationMs = (mSoundPlayer!!.durationOf(listOf(SoundTypes.LETTER_SPACE)) * 1000).toLong() mSpaceDurationMs = (mSoundPlayer!!.durationOf(listOf(SoundTypes.LETTER_SPACE)) * 1000).toLong()
} }
private var mAutoSend : Boolean = true
private var mUserTriggeredSend : Boolean = false
private var mPreviouslySentText : TextView? = null private var mPreviouslySentText : TextView? = null
private var mCurrentlySendingText : TextView? = null private var mCurrentlySendingText : TextView? = null
private var mKeyboardInput : EditText? = null private var mKeyboardInput : EditText? = null
@ -87,7 +109,8 @@ class SounderActivity : AppCompatActivity(), DitDahSoundStream.StreamNotificatio
mSoundAwaitingText = true mSoundAwaitingText = true
runOnUiThread { runOnUiThread {
if( mKeyboardInput?.text!!.isNotEmpty() && mSoundAwaitingText ) { if( (mAutoSend || mUserTriggeredSend) &&
mKeyboardInput?.text!!.isNotEmpty() && mSoundAwaitingText ) {
mSoundAwaitingText = false mSoundAwaitingText = false
// Extract and remove the first character // Extract and remove the first character
val firstInput = mKeyboardInput!!.text!!.subSequence(0, 1).toString() val firstInput = mKeyboardInput!!.text!!.subSequence(0, 1).toString()
@ -112,6 +135,13 @@ class SounderActivity : AppCompatActivity(), DitDahSoundStream.StreamNotificatio
mPreviouslySentText?.text = mPreviouslySentText?.text!!.substring(trimFrom, mPreviouslySentText?.text = mPreviouslySentText?.text!!.substring(trimFrom,
mPreviouslySentText?.text!!.length) + extraSpace + firstInput mPreviouslySentText?.text!!.length) + extraSpace + firstInput
// Re-enable the send button if this was the last character to go
if (mUserTriggeredSend && mKeyboardInput!!.text.isEmpty()) {
mKeyboardInput!!.isEnabled = true
mKeyboardInput!!.requestFocus()
mUserTriggeredSend = false
}
// Then play the sound: // Then play the sound:
mSoundPlayer?.enqueue(sequence) mSoundPlayer?.enqueue(sequence)
} }

View file

@ -32,18 +32,34 @@
app:layout_constraintTop_toBottomOf="@+id/sentText" /> app:layout_constraintTop_toBottomOf="@+id/sentText" />
<LinearLayout <LinearLayout
android:id="@+id/inputContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_margin="16dp"
app:layout_constraintTop_toBottomOf="@+id/keyedText" > app:layout_constraintTop_toBottomOf="@+id/keyedText" >
<EditText <EditText
android:id="@+id/sounderInput" android:id="@+id/sounderInput"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="15"
android:ems="10" android:ems="10"
android:textSize="36sp" android:imeOptions="actionSend"
android:inputType="text|textNoSuggestions" android:inputType="text|textNoSuggestions"
android:textSize="36sp"
tools:layout_editor_absoluteX="99dp" tools:layout_editor_absoluteX="99dp"
tools:layout_editor_absoluteY="53dp" /> tools:layout_editor_absoluteY="53dp" />
</LinearLayout> </LinearLayout>
<CheckBox
android:id="@+id/autoSendCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:paddingStart="6dp"
android:paddingEnd="16dp"
android:layout_marginLeft="16dp"
android:text="@string/auto_send"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/inputContainer" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -55,6 +55,7 @@
to move on to the next character. to move on to the next character.
</string> </string>
<string name="add_spaces_tip">Be sure to add spaces between the words!</string> <string name="add_spaces_tip">Be sure to add spaces between the words!</string>
<string name="auto_send">Auto send</string>
<string-array name="tone_frequency_strings"> <string-array name="tone_frequency_strings">
<item>400Hz</item> <item>400Hz</item>

View file

@ -1,3 +1,6 @@
Fixed bug where duration of lessons was too long Fixed bug where duration of lessons was too long
Added tip if users didn't add spaces to lesson input Added tip if users didn't add spaces to lesson input
Improved "Sounder" UI. Now shows some history and upcoming text. Improved "Sounder" UI.
Shows user the progress and upcoming text.
Add an "auto-send" checkbox, allowing writing a message
and sending all in one go.