Model recoverable receiver and radio output lifecycle failures
This commit is contained in:
1 parent
7780922353
commit
982ed0ca7d
2 files changed
+29
-5
No files matched your search
@@ -38,8 +38,21 @@ class Context {
|
||||
var telephonyManager: TelephonyManager? = TelephonyManager()
|
||||
val configProvider = HostConfigProvider()
|
||||
val receivers = mutableMapOf<BroadcastReceiver, IntentFilter>()
|
||||
fun registerReceiver(receiver: BroadcastReceiver, filter: IntentFilter, flags: Int = 0) { receivers[receiver] = filter }
|
||||
fun unregisterReceiver(receiver: BroadcastReceiver) { check(receivers.remove(receiver) != null) { "receiver not registered" } }
|
||||
var receiverFailures = emptySet<String>()
|
||||
var registrationAttempts = 0
|
||||
var unregistrationAttempts = 0
|
||||
fun registerReceiver(receiver: BroadcastReceiver, filter: IntentFilter, flags: Int = 0) {
|
||||
registrationAttempts++
|
||||
check("register" !in receiverFailures) { "receiver registration failed" }
|
||||
receivers[receiver] = filter
|
||||
check("register after" !in receiverFailures) { "receiver registration failed after effect" }
|
||||
}
|
||||
fun unregisterReceiver(receiver: BroadcastReceiver) {
|
||||
unregistrationAttempts++
|
||||
check("unregister" !in receiverFailures) { "receiver unregistration failed" }
|
||||
require(receivers.remove(receiver) != null) { "receiver not registered" }
|
||||
check("unregister after" !in receiverFailures) { "receiver unregistration failed after effect" }
|
||||
}
|
||||
val applicationContext: Context get() = this
|
||||
fun startActivity(intent: Intent) {
|
||||
activityAttempts.add(Intent(intent))
|
||||
@@ -49,7 +62,7 @@ class Context {
|
||||
AUDIO_SERVICE -> AudioManager.shared
|
||||
SENSOR_SERVICE -> sensorManager
|
||||
VIBRATOR_SERVICE -> vibrator
|
||||
POWER_SERVICE -> powerManager
|
||||
POWER_SERVICE -> { check(!failPowerService) { "power service lookup unavailable" }; powerManager }
|
||||
WIFI_SERVICE -> { check(!failWifiService) { "Wi-Fi service unavailable" }; wifiManager }
|
||||
else -> error("Unknown service: $name")
|
||||
}
|
||||
|
||||
@@ -12,17 +12,28 @@ class AudioTrack(val id: Int) : AudioRouting {
|
||||
const val MODE_STREAM = 1
|
||||
private var nextId = 100
|
||||
val created = mutableListOf<AudioTrack>()
|
||||
fun getMinBufferSize(rate: Int, channels: Int, encoding: Int): Int = 1920
|
||||
var nextFailures = emptySet<String>()
|
||||
var minimumBuffer = 1920
|
||||
fun getMinBufferSize(rate: Int, channels: Int, encoding: Int): Int = minimumBuffer
|
||||
}
|
||||
constructor(attributes: AudioAttributes, format: AudioFormat, bufferSize: Int, mode: Int, session: Int) : this(++nextId) {
|
||||
check(mode == MODE_STREAM && bufferSize >= 1920 && session == AudioManager.AUDIO_SESSION_ID_GENERATE)
|
||||
check("create" !in nextFailures) { "track creation failed" }
|
||||
failures = nextFailures
|
||||
created.add(this)
|
||||
}
|
||||
var playbackHeadPosition = 0
|
||||
private set
|
||||
fun play() { access("play") }
|
||||
fun stop() { access("stop") }
|
||||
fun release() { access("release"); released = true }
|
||||
var releaseCalls = 0
|
||||
private set
|
||||
fun release() {
|
||||
releaseCalls++
|
||||
check("release" !in failures) { "track release failed" }
|
||||
released = true
|
||||
check("release after" !in failures) { "track release failed after effect" }
|
||||
}
|
||||
fun write(samples: ShortArray, offset: Int, count: Int): Int {
|
||||
access("write")
|
||||
check(offset >= 0 && offset + count <= samples.size)
|
||||
|
||||
Reference in new issue
Block a user