fix(app-glasses): панель статуса — по центру в оба глаза, процент цветной

Binocular-контент растягивался на весь 1280 (fillMaxSize внутри
PositionedBox) — панель оказывалась по центру экрана, половина в каждом
глазу. Теперь явная ширина половины (как у видео-Row) — панель по центру
каждой половины, бинокулярно сливается в одну. ConnectionScreen тоже
обёрнут в Binocular. Квадратик-индикатор убран — процент окрашивается
цветом статуса (зелёный/белый/красный). Скрин: обе половины идентичны.
This commit is contained in:
Hermes Agent
2026-08-20 00:24:12 +03:00
parent 3f858c4a1a
commit 9f20093bbf
4 changed files with 104 additions and 249 deletions
@@ -0,0 +1,48 @@
package pw.binom.viewmate.glasses.status
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
/**
* Композ-панель статуса (время + заряд). Вызывается внутри [Binocular] content,
* который рендерится дважды (левый/правый глаз), поэтому панель автоматически
* дублируется и бинокулярно сливается в одну.
*/
@Composable
fun StatusPanelCompose(modifier: Modifier = Modifier) {
var data by remember { mutableStateOf<StatusPanelData?>(null) }
val context = LocalContext.current
DisposableEffect(Unit) {
val provider = StatusPanelProvider(context) { data = it }
provider.start()
onDispose { provider.stop() }
}
val d = data ?: return
Row(
modifier = modifier
.background(Color(0x99000000)) // полупрозрачный чёрный
.padding(horizontal = 10.dp, vertical = 4.dp),
verticalAlignment = Alignment.CenterVertically,
) {
Text(d.time, color = Color.White, style = MaterialTheme.typography.bodyMedium)
Spacer(Modifier.width(6.dp))
// Процент — цветом статуса заряда (зелёный/белый/красный), без квадратика.
Text("${d.percent}%", color = Color(d.chargeColorArgb), style = MaterialTheme.typography.bodyMedium)
}
}