6cd4a8de43
- Mercury (app-phone): управление яркостью (с авто-выкл. перед применением) и WiFi (скан/подключение/список сетей с паролем); добавлено право BLUETOOTH_ADVERTISE в манифест и runtime-запрос (без него GATT-сервер не рекламируется → очки не подключаются) - логирование (lib-core core.log): BatchingLogCollector + LogSink + LogSpool + LokiLogSink; цепочка очки→телефон→Loki; lib-core log() переадресован в коллектор - STT: Qwen3-ASR через pw.binom.asr:asr-qwen3-android, убран in-house whisper-фоллбек - audio-sync: P-регулятор с насыщением вместо фиксированной скорости - media-split: очки только video, телефон только audio (UI-чипы) - Components: форматирование размера через Locale.ROOT
32 lines
1.1 KiB
Kotlin
32 lines
1.1 KiB
Kotlin
package pw.binom.viewmate.phone
|
|
|
|
import android.util.Log
|
|
import pw.binom.viewmate.core.log.BatchingLogCollector
|
|
|
|
/**
|
|
* Единый лог телефона.
|
|
* На устройстве — android.util.Log (видно в logcat); в JVM-юнит-тестах
|
|
* (android.util.Log недоступен — метод без @JvmStatic фолбэктнет в println),
|
|
* чтобы не падать.
|
|
*
|
|
* Плюс лог-коллектор: пачки (свои + пришедшие от очков) уходят на сервер
|
|
* (HttpLogSink); при сбое — прихраняются в споуле и ретраятся позже.
|
|
*/
|
|
@Volatile
|
|
private var logCollector: BatchingLogCollector? = null
|
|
|
|
/** Подключить коллектор (PhoneApp.onCreate). */
|
|
fun attachLogCollector(collector: BatchingLogCollector) {
|
|
logCollector = collector
|
|
}
|
|
|
|
fun log(tag: String, message: String) {
|
|
val full = "[view-mate] $tag $message"
|
|
runCatching {
|
|
Log.d("view-mate-$tag", full)
|
|
}.onFailure {
|
|
println(full)
|
|
}
|
|
logCollector?.record(tag, message)
|
|
}
|