From 8cfd9192b3979e718efb723aad7aa457898c4def Mon Sep 17 00:00:00 2001 From: subochev Date: Mon, 28 Sep 2026 02:27:12 +0300 Subject: [PATCH] =?UTF-8?q?mercury:=20=D1=81=D0=B8=D0=BD=D0=BA=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D0=BE=D0=B2=20=D0=BE=D1=87=D0=BA=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BA=D0=BE=D0=BD=D0=BD=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B0=20BLE=20(ble.response.set=5Ftime)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Как штатное приложение (OnConnected.startSyncTask): сразу после подъёма BLE-сессии шлём очкам время телефона. Нужно очкам, когда они без сети — иначе у них своё время и валятся TLS-проверки в гостевых приложениях. Вызов идемпотентный, ставится и в connectInternal, и в Event.Connected (внутренние переподключения библиотеки). --- .../phone/mercury/MercuryController.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) 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)