From 4309d4edd2173b97149ee8d062a702ef819748c0 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 19 Aug 2026 21:56:46 +0300 Subject: [PATCH] =?UTF-8?q?feat(app-glasses):=20=D0=B3=D0=B0=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BE=D1=87=D0=BA=D0=BE=D0=B2=20=E2=86=92=20=D0=BF=D0=B0=D1=83?= =?UTF-8?q?=D0=B7=D0=B0=20=D0=B2=D0=B8=D0=B4=D0=B5=D0=BE+=D0=B7=D0=B2?= =?UTF-8?q?=D1=83=D0=BA=D0=B0,=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=E2=86=92=20=D0=BF=D1=80=D0=BE=D0=B4=D0=BE?= =?UTF-8?q?=D0=BB=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Требование пользователя (железо): погасил экран очков — звук тоже должен остановиться (раньше ExoPlayer «тормозил», звук играл, синк дёргал звук к видео). MainActivity: onPause → pauseIfPlaying (флаг resumeAfterScreenOn), PlaybackPosition(playing=false) → звук пауза ≤5с; onResume → resume + PlaybackPosition(playing=true) → звук синхронно. MovieController.resume() получил guard на существующий плеер. Железо: «экран погас — пауза» → sync стоп → «экран включён — продолжаю» → diff 247. --- .../pw/binom/viewmate/glasses/MainActivity.kt | 14 ++++++++++++++ .../pw/binom/viewmate/glasses/MovieController.kt | 8 ++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/MainActivity.kt b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/MainActivity.kt index 9a1a0c6..e748df6 100644 --- a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/MainActivity.kt +++ b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/MainActivity.kt @@ -23,6 +23,8 @@ import androidx.compose.ui.unit.dp import pw.binom.viewmate.glasses.ui.GlassesMovieScreen class MainActivity : ComponentActivity() { + private var resumeAfterScreenOn = false + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) @@ -43,9 +45,21 @@ class MainActivity : ComponentActivity() { log("ui", "иммерсивный режим включён") } + override fun onPause() { + super.onPause() + val was = GlassesApp.instance.movieController.pauseIfPlaying() + resumeAfterScreenOn = was + if (was) log("ui", "экран погас — пауза") + } + override fun onResume() { super.onResume() hideSystemBars() + if (resumeAfterScreenOn) { + resumeAfterScreenOn = false + GlassesApp.instance.movieController.resume() + log("ui", "экран включён — продолжаю") + } } private fun hideSystemBars() { diff --git a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/MovieController.kt b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/MovieController.kt index 450be76..732e355 100644 --- a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/MovieController.kt +++ b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/MovieController.kt @@ -162,8 +162,12 @@ class MovieController(private val context: Context) { return wasPlaying } - /** Продолжить с того же места (связь восстановилась). Только с главного потока. */ + /** Продолжить с того же места (связь восстановилась / экран включён). Только с главного потока. */ fun resume() { - _player?.play() + val player = _player ?: run { + log("glasses", "resume проигнорирован: плеер не активен") + return + } + player.play() } }