diff --git a/app-phone-vm/src/main/kotlin/pw/binom/rayneovm/phone/mercury/MercuryController.kt b/app-phone-vm/src/main/kotlin/pw/binom/rayneovm/phone/mercury/MercuryController.kt index 0e72613..0268d60 100644 --- a/app-phone-vm/src/main/kotlin/pw/binom/rayneovm/phone/mercury/MercuryController.kt +++ b/app-phone-vm/src/main/kotlin/pw/binom/rayneovm/phone/mercury/MercuryController.kt @@ -187,6 +187,7 @@ class MercuryController(private val context: Context) { } saveAddress(glasses) _state.value = MercuryState.Connected(glasses, batteryPercent = null) + syncClock() startStatusRefresh() } catch (t: Throwable) { _state.value = MercuryState.Disconnected(message = "Ошибка: ${t.message}") @@ -269,6 +270,23 @@ class MercuryController(private val context: Context) { _state.value = MercuryState.Disconnected() } + /** + * Ставим часы очков по телефону сразу после коннекта — как штатное приложение + * (его `OnConnected.startSyncTask`). Очкам синк нужен, когда они без сети: иначе + * у них своё время и, например, валятся TLS-проверки сертификатов в гостевых + * приложениях. Команда идемпотентна — повторная отправка безвредна. + */ + private fun syncClock() { + scope.launch { + try { + val ok = mercury.syncTime() + android.util.Log.i(TAG, "syncTime -> $ok") + } catch (t: Throwable) { + android.util.Log.w(TAG, "syncTime failed: ${t.message}") + } + } + } + /** * Настойчиво тянем статус после подключения: очки присылают `general.status` * при изменениях, а ответ на первый запрос легко теряется (BLE-нотификация @@ -487,6 +505,9 @@ class MercuryController(private val context: Context) { mercury.events.collect { event -> when (event) { is RayNeoMercury.Event.Connected -> { + // Событие приходит и при внутренних переподключениях библиотеки — + // держим часы очков синхронными на любом подъёме BLE. + syncClock() val cur = _state.value if (cur is MercuryState.Connecting) { _state.value = MercuryState.Connected(cur.device, batteryPercent = null)