From 6c5c1727536b5d37d271eee06b0aa742f10e4ecc Mon Sep 17 00:00:00 2001 From: pedroSG94 Date: Wed, 10 Jun 2026 06:25:56 +0200 Subject: [PATCH] create test enviroment --- .../pedro/streamer/screen/ScreenActivity.kt | 13 ++++++-- .../pedro/streamer/screen/ScreenService.kt | 32 ++++++++----------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/pedro/streamer/screen/ScreenActivity.kt b/app/src/main/java/com/pedro/streamer/screen/ScreenActivity.kt index c96d4d92d..fd2d00dba 100644 --- a/app/src/main/java/com/pedro/streamer/screen/ScreenActivity.kt +++ b/app/src/main/java/com/pedro/streamer/screen/ScreenActivity.kt @@ -55,7 +55,7 @@ import com.pedro.streamer.utils.updateMenuColor class ScreenActivity : AppCompatActivity(), ConnectChecker { enum class Action { - STREAM, RECORD, NONE + STREAM, RECORD, NONE, CHANGE } private lateinit var button: ImageView @@ -69,7 +69,9 @@ class ScreenActivity : AppCompatActivity(), ConnectChecker { if (data != null && result.resultCode == RESULT_OK) { val screenService = ScreenService.INSTANCE if (screenService != null) { - if (screenService.prepareStream(result.resultCode, data)) { + if (action == Action.CHANGE) { + screenService.screenS(result.resultCode, data) + }else if (screenService.prepareStream(result.resultCode, data)) { when (action) { Action.STREAM -> startStream() Action.RECORD -> toggleRecord() @@ -180,7 +182,12 @@ class ScreenActivity : AppCompatActivity(), ConnectChecker { R.id.audio_source_microphone, R.id.audio_source_internal, R.id.audio_source_mix -> { val service = ScreenService.INSTANCE if (service != null) { - service.toggleAudioSource(item.itemId) + if (item.itemId == R.id.audio_source_internal) { + action = Action.CHANGE + activityResultContract.launch(service.sendIntent()) + } else { + service.toggleAudioSource(item.itemId) + } currentAudioSource = item.updateMenuColor(this, currentAudioSource) } } diff --git a/app/src/main/java/com/pedro/streamer/screen/ScreenService.kt b/app/src/main/java/com/pedro/streamer/screen/ScreenService.kt index f8752800e..8067bab6a 100644 --- a/app/src/main/java/com/pedro/streamer/screen/ScreenService.kt +++ b/app/src/main/java/com/pedro/streamer/screen/ScreenService.kt @@ -32,6 +32,7 @@ import com.pedro.encoder.input.sources.audio.AudioSource import com.pedro.encoder.input.sources.audio.InternalAudioSource import com.pedro.encoder.input.sources.audio.MicrophoneSource import com.pedro.encoder.input.sources.audio.MixAudioSource +import com.pedro.encoder.input.sources.video.Camera2Source import com.pedro.encoder.input.sources.video.NoVideoSource import com.pedro.encoder.input.sources.video.ScreenSource import com.pedro.library.base.recording.RecordController @@ -73,7 +74,7 @@ class ScreenService: Service(), ConnectChecker { private val aBitrate = 128 * 1000 private var prepared = false private var recordPath = "" - private var selectedAudioSource: Int = R.id.audio_source_microphone + private var selectedAudioSource: Int = R.id.audio_source_internal override fun onCreate() { super.onCreate() @@ -159,9 +160,8 @@ class ScreenService: Service(), ConnectChecker { val mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data) ?: throw IllegalStateException("get MediaProjection failed") this.mediaProjection = mediaProjection val screenSource = ScreenSource(applicationContext, mediaProjection) + genericStream.changeVideoSource(screenSource) return try { - genericStream.changeVideoSource(screenSource) - toggleAudioSource(selectedAudioSource) true } catch (_: IllegalArgumentException) { false @@ -170,30 +170,24 @@ class ScreenService: Service(), ConnectChecker { fun getCurrentAudioSource(): AudioSource = genericStream.audioSource + fun screenS(resultCode: Int, data: Intent) { + selectedAudioSource = R.id.audio_source_internal + val mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data) ?: throw IllegalStateException("get MediaProjection failed") + val screenSource = ScreenSource(applicationContext, mediaProjection) + genericStream.changeVideoSource(screenSource) + } + fun toggleAudioSource(itemId: Int) { when (itemId) { R.id.audio_source_microphone -> { selectedAudioSource = R.id.audio_source_microphone - if (genericStream.audioSource is MicrophoneSource) return - genericStream.changeAudioSource(MicrophoneSource()) + genericStream.changeVideoSource(Camera2Source(applicationContext)) } R.id.audio_source_internal -> { - selectedAudioSource = R.id.audio_source_internal - if (genericStream.audioSource is InternalAudioSource) return - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - mediaProjection?.let { genericStream.changeAudioSource(InternalAudioSource(it)) } - } else { - throw IllegalArgumentException("You need min API 29+") - } + } R.id.audio_source_mix -> { - selectedAudioSource = R.id.audio_source_mix - if (genericStream.audioSource is MixAudioSource) return - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - mediaProjection?.let { genericStream.changeAudioSource(MixAudioSource(it)) } - } else { - throw IllegalArgumentException("You need min API 29+") - } + } } }