1
0
Fork 0

Make the app run on Android 5 (API 22)

This requires a deprecated `AudioTrack` constructor, but devices with
API 23 or above should not see any changes. The `minSdkVersion` could
probably go to 21, but I can't test it.
This commit is contained in:
Davide Panaroni 2023-01-20 13:35:10 +01:00
parent 6a51e3a0c6
commit ba89585b5e
3 changed files with 46 additions and 25 deletions

View file

@ -8,7 +8,7 @@ android {
defaultConfig {
applicationId "es.eoinrul.ecwt"
minSdkVersion 23
minSdkVersion 22
targetSdkVersion 30
versionCode 44
versionName "4.4"

View file

@ -4,7 +4,9 @@ import android.content.Context
import android.content.SharedPreferences
import android.media.AudioAttributes
import android.media.AudioFormat
import android.media.AudioManager
import android.media.AudioTrack
import android.os.Build
import android.view.KeyEvent
import androidx.preference.PreferenceManager
import java.util.concurrent.ArrayBlockingQueue
@ -458,12 +460,20 @@ class DitDahSoundStream {
mSoundPlayer.play();
if (numWritten != soundToWrite.size) {
mSoundPlayer.write(
soundToWrite,
numWritten,
soundToWrite.size - numWritten,
AudioTrack.WRITE_BLOCKING
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mSoundPlayer.write(
soundToWrite,
numWritten,
soundToWrite.size - numWritten,
AudioTrack.WRITE_BLOCKING
)
} else {
mSoundPlayer.write(
soundToWrite,
numWritten,
soundToWrite.size - numWritten
)
}
}
// Now we can stop the audio player; it won't stop the audio
@ -490,21 +500,31 @@ class DitDahSoundStream {
private val mCharacterSpacingSound : ShortArray;
// Our actual audio track
private val mSoundPlayer : AudioTrack = AudioTrack.Builder()
.setAudioAttributes(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
)
.setAudioFormat(
AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(mAudioSampleRate)
.setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
.build()
)
.setTransferMode(AudioTrack.MODE_STREAM)
.setBufferSizeInBytes(mAudioSampleRate)
.build();
private val mSoundPlayer : AudioTrack = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
AudioTrack.Builder()
.setAudioAttributes(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
)
.setAudioFormat(
AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(mAudioSampleRate)
.setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
.build()
)
.setTransferMode(AudioTrack.MODE_STREAM)
.setBufferSizeInBytes(mAudioSampleRate)
.build()
} else {
AudioTrack(
AudioManager.STREAM_MUSIC,
mAudioSampleRate,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mAudioSampleRate,
AudioTrack.MODE_STREAM)
}
}

View file

@ -6,6 +6,7 @@ import android.os.Bundle
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.text.HtmlCompat
import androidx.core.view.isVisible
@ -79,7 +80,7 @@ class TrainingResultsActivity : AppCompatActivity() {
}
private fun formatColorId(c : Int) : String {
return "<font face=monospace color=\"#" + Integer.toHexString(getColor(c)).substring(2) + "\">"
return "<font face=monospace color=\"#" + Integer.toHexString(ContextCompat.getColor(this, c)).substring(2) + "\">"
}
private fun formatEditDetails(edits : List<SingleEdit>) : String {