feat: кнопка «⏹ Закрыть» в пульте + автоматика обрыва связи (README «Автоматика»)

- GlassesScreen: кнопка ⏹ Закрыть → sendCommand(CLOSE) (обработчики были: телефон audio.stop, очки MovieController.close)
- app-glasses: MovieController.pauseIfPlaying()/resume(); HostConnection — при обрыве WS пауза + флаг, при восстановлении — continue (лог «связь потеряна — пауза» / «связь восстановлена — продолжаю»); флаг сбрасывается на PlayVideo/CLOSE
- app-phone: ConnectionAutomatics (connectionEvent, авто-resume по флагу «играл ли») + коллектор на hub.connected
- Тесты: app-phone 67/0, app-glasses 15/0
- OFF7 3/3: A5 стоп + обрыв-пауза-продолжение подтверждены живым прогоном
This commit is contained in:
Hermes Agent
2026-08-19 19:20:04 +03:00
parent 535f4e2050
commit 35f462b34a
10 changed files with 226 additions and 1 deletions
@@ -0,0 +1,39 @@
package pw.binom.viewmate.glasses
import kotlin.test.Test
import kotlin.test.assertFalse
import kotlin.test.assertTrue
class ReconnectAutomaticsTest {
@Test
fun resumeRememberedWhenPlayingAtLoss() {
val flag = ReconnectResumeFlag()
flag.onConnectionLost(playerWasPlaying = true)
assertTrue(flag.consume(), "играл — после восстановления продолжаем")
assertFalse(flag.consume(), "consume сбрасывает флаг")
}
@Test
fun noResumeWhenPausedAtLoss() {
val flag = ReconnectResumeFlag()
flag.onConnectionLost(playerWasPlaying = false)
assertFalse(flag.consume(), "на паузе — не продолжаем")
}
@Test
fun resetClearsFlag() {
val flag = ReconnectResumeFlag()
flag.onConnectionLost(playerWasPlaying = true)
flag.reset()
assertFalse(flag.consume(), "CLOSE / новое видео — продолжать нечего")
}
@Test
fun newLossOverwritesOldFlag() {
val flag = ReconnectResumeFlag()
flag.onConnectionLost(playerWasPlaying = true)
flag.onConnectionLost(playerWasPlaying = false)
assertFalse(flag.consume(), "последний обрыв был на паузе")
}
}