Add controllable SDK boundaries for local video lifecycle tests

This commit is contained in:
evgeny committed 2026-10-29 13:34:25 +01:00
1 parent 7ec46278af
commit 5694f97f12
3 files changed
+70 -1

No files matched your search

@@ -17,7 +17,8 @@ kotlin {
"com/utun/chat/data/StreamAudioMix.kt", "com/utun/chat/data/StreamReadQueue.kt", "com/utun/chat/data/StreamPlaybackTelemetry.kt",
"com/utun/chat/data/StreamCaptureEngine.kt", "com/utun/chat/data/StreamCaptureConfig.kt",
"com/utun/chat/data/TelecomCallManager.kt", "com/utun/chat/data/UtunConnection.kt", "com/utun/chat/data/UtunConnectionService.kt",
"com/utun/chat/data/QrScannerSession.kt", "com/google/**")
"com/utun/chat/data/QrScannerSession.kt", "com/utun/chat/data/VideoFilePlayer.kt",
"com/utun/chat/data/VideoFileMetadata.kt", "com/google/**")
}
}
dependencies {
@@ -0,0 +1,67 @@
package android.media
import android.view.Surface
/** Только управляемая граница MediaPlayer: callbacks и отказы SDK, без декодирования. */
class MediaPlayer {
companion object {
const val VIDEO_SCALING_MODE_SCALE_TO_FIT = 1
val created = mutableListOf<MediaPlayer>()
var nextFailures = emptySet<String>()
}
var failures = nextFailures
var released = false
var releases = 0
var starts = 0
var pauses = 0
var seeks = 0
var surface: Surface? = null
private set
var position = 0
val currentPosition: Int get() { check("position" !in failures && !released); return position }
val duration: Int get() { check("duration" !in failures); return 10_000 }
val videoWidth = 1280
val videoHeight = 720
var preparedCallback: ((MediaPlayer) -> Unit)? = null
var completedCallback: ((MediaPlayer) -> Unit)? = null
var errorCallback: ((MediaPlayer, Int, Int) -> Boolean)? = null
init { check("construct" !in failures); created.add(this) }
fun setOnPreparedListener(callback: (MediaPlayer) -> Unit) { preparedCallback = callback }
fun setOnCompletionListener(callback: (MediaPlayer) -> Unit) { completedCallback = callback }
fun setOnErrorListener(callback: (MediaPlayer, Int, Int) -> Boolean) { errorCallback = callback }
fun setVideoScalingMode(mode: Int) { check("scaling" !in failures) }
fun setDataSource(path: String) { check("source" !in failures) { "MediaPlayer source failed" } }
fun prepareAsync() { check("prepare" !in failures) { "MediaPlayer prepare failed" } }
fun start() { starts++; check(!released && "start" !in failures) { "MediaPlayer start failed" } }
fun pause() { pauses++; check(!released && "pause" !in failures) { "MediaPlayer pause failed" } }
fun seekTo(value: Int) { seeks++; check(!released && "seek" !in failures); position = value }
fun setSurface(value: Surface?) {
check(!released && "surface" !in failures) { "MediaPlayer surface failed" }; surface = value
check("surface after" !in failures) { "MediaPlayer surface failed after effect" }
}
fun release() {
releases++; check("release" !in failures) { "MediaPlayer release failed" }; released = true; surface = null
check("release after" !in failures) { "MediaPlayer release failed after effect" }
}
}
class MediaMetadataRetriever {
companion object {
const val METADATA_KEY_VIDEO_WIDTH = 18; const val METADATA_KEY_VIDEO_HEIGHT = 19; const val METADATA_KEY_VIDEO_ROTATION = 24
val created = mutableListOf<MediaMetadataRetriever>()
var nextFailures = emptySet<String>()
}
var failures = nextFailures
var released = false
var releases = 0
var width = "1280"; var height = "720"; var rotation = "90"
init { created.add(this) }
fun setDataSource(path: String) { check("source" !in failures) { "Metadata source failed" } }
fun extractMetadata(key: Int): String? = when (key) {
METADATA_KEY_VIDEO_WIDTH -> width; METADATA_KEY_VIDEO_HEIGHT -> height; METADATA_KEY_VIDEO_ROTATION -> rotation; else -> null
}
fun release() {
releases++; check("release" !in failures) { "Metadata release failed" }; released = true
check("release after" !in failures) { "Metadata release failed after effect" }
}
}
@@ -13,4 +13,5 @@ object R { object string {
const val stream_waiting_decoder = 7; const val stream_group_closed = 8; const val chat_service_stopped = 9
const val stream_source_changed = 10; const val stream_member_removed = 11; const val stream_failed = 12
const val stream_decoder_unsupported = 13
const val video_open_failed = 14; const val video_playback_failed = 15
} }