feat(app-glasses): гашение экрана очков → пауза видео+звука, включение → продолжение
Требование пользователя (железо): погасил экран очков — звук тоже должен остановиться (раньше ExoPlayer «тормозил», звук играл, синк дёргал звук к видео). MainActivity: onPause → pauseIfPlaying (флаг resumeAfterScreenOn), PlaybackPosition(playing=false) → звук пауза ≤5с; onResume → resume + PlaybackPosition(playing=true) → звук синхронно. MovieController.resume() получил guard на существующий плеер. Железо: «экран погас — пауза» → sync стоп → «экран включён — продолжаю» → diff 247.
This commit is contained in:
@@ -23,6 +23,8 @@ import androidx.compose.ui.unit.dp
|
|||||||
import pw.binom.viewmate.glasses.ui.GlassesMovieScreen
|
import pw.binom.viewmate.glasses.ui.GlassesMovieScreen
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
private var resumeAfterScreenOn = false
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||||
@@ -43,9 +45,21 @@ class MainActivity : ComponentActivity() {
|
|||||||
log("ui", "иммерсивный режим включён")
|
log("ui", "иммерсивный режим включён")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onPause() {
|
||||||
|
super.onPause()
|
||||||
|
val was = GlassesApp.instance.movieController.pauseIfPlaying()
|
||||||
|
resumeAfterScreenOn = was
|
||||||
|
if (was) log("ui", "экран погас — пауза")
|
||||||
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
hideSystemBars()
|
hideSystemBars()
|
||||||
|
if (resumeAfterScreenOn) {
|
||||||
|
resumeAfterScreenOn = false
|
||||||
|
GlassesApp.instance.movieController.resume()
|
||||||
|
log("ui", "экран включён — продолжаю")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun hideSystemBars() {
|
private fun hideSystemBars() {
|
||||||
|
|||||||
@@ -162,8 +162,12 @@ class MovieController(private val context: Context) {
|
|||||||
return wasPlaying
|
return wasPlaying
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Продолжить с того же места (связь восстановилась). Только с главного потока. */
|
/** Продолжить с того же места (связь восстановилась / экран включён). Только с главного потока. */
|
||||||
fun resume() {
|
fun resume() {
|
||||||
_player?.play()
|
val player = _player ?: run {
|
||||||
|
log("glasses", "resume проигнорирован: плеер не активен")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
player.play()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user