From eea9eb9339f18a91a8c5be0da1ad28abdf034bca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Sat, 28 Sep 2019 14:34:34 +0200 Subject: [PATCH] Handle Activity going into Background on Android --- android/app/src/main/AndroidManifest.xml | 1 + .../java/com/metallic/chiaki/StreamSession.kt | 27 +++++++++++++------ .../metallic/chiaki/stream/StreamActivity.kt | 10 +++++-- .../metallic/chiaki/stream/StreamViewModel.kt | 6 ++--- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 6942910..660cb2d 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ diff --git a/android/app/src/main/java/com/metallic/chiaki/StreamSession.kt b/android/app/src/main/java/com/metallic/chiaki/StreamSession.kt index 01c39cc..0463f07 100644 --- a/android/app/src/main/java/com/metallic/chiaki/StreamSession.kt +++ b/android/app/src/main/java/com/metallic/chiaki/StreamSession.kt @@ -45,13 +45,31 @@ class StreamSession(val connectInfo: ConnectInfo) var surfaceTexture: SurfaceTexture? = null - init + fun shutdown() { + session?.stop() + session?.dispose() + session = null + //surfaceTexture?.release() + } + + fun pause() + { + shutdown() + } + + fun resume() + { + if(session != null) + return try { val session = Session(connectInfo) session.eventCallback = this::eventCallback session.start() + val surfaceTexture = surfaceTexture + if(surfaceTexture != null) + session.setSurface(Surface(surfaceTexture)) this.session = session } catch(e: SessionCreateError) @@ -60,13 +78,6 @@ class StreamSession(val connectInfo: ConnectInfo) } } - fun shutdown() - { - session?.stop() - session?.dispose() - surfaceTexture?.release() - } - private fun eventCallback(event: Event) { when(event) diff --git a/android/app/src/main/java/com/metallic/chiaki/stream/StreamActivity.kt b/android/app/src/main/java/com/metallic/chiaki/stream/StreamActivity.kt index dde8408..5851f4d 100644 --- a/android/app/src/main/java/com/metallic/chiaki/stream/StreamActivity.kt +++ b/android/app/src/main/java/com/metallic/chiaki/stream/StreamActivity.kt @@ -23,8 +23,7 @@ import android.util.Log import android.view.KeyEvent import android.view.View import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProviders +import androidx.lifecycle.* import com.metallic.chiaki.R import com.metallic.chiaki.lib.ConnectInfo import kotlinx.android.synthetic.main.activity_stream.* @@ -70,6 +69,13 @@ class StreamActivity : AppCompatActivity() { super.onResume() hideSystemUI() + viewModel.session.resume() + } + + override fun onPause() + { + super.onPause() + viewModel.session.pause() } override fun onWindowFocusChanged(hasFocus: Boolean) diff --git a/android/app/src/main/java/com/metallic/chiaki/stream/StreamViewModel.kt b/android/app/src/main/java/com/metallic/chiaki/stream/StreamViewModel.kt index 4872b2d..aa0300d 100644 --- a/android/app/src/main/java/com/metallic/chiaki/stream/StreamViewModel.kt +++ b/android/app/src/main/java/com/metallic/chiaki/stream/StreamViewModel.kt @@ -23,17 +23,15 @@ import com.metallic.chiaki.lib.* class StreamViewModel: ViewModel() { - var isInitialized = false - private set(value) { field = value} - + private var connectInfo: ConnectInfo? = null private var _session: StreamSession? = null val session: StreamSession get() = _session ?: throw UninitializedPropertyAccessException("StreamViewModel not initialized") + val isInitialized get() = connectInfo != null fun init(connectInfo: ConnectInfo) { if(isInitialized) return - isInitialized = true _session = StreamSession(connectInfo) }