mercury: синк часов очков после коннекта BLE (ble.response.set_time)
Как штатное приложение (OnConnected.startSyncTask): сразу после подъёма BLE-сессии шлём очкам время телефона. Нужно очкам, когда они без сети — иначе у них своё время и валятся TLS-проверки в гостевых приложениях. Вызов идемпотентный, ставится и в connectInternal, и в Event.Connected (внутренние переподключения библиотеки).
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user