fix(app-glasses): панель статуса — по центру в оба глаза, процент цветной
Binocular-контент растягивался на весь 1280 (fillMaxSize внутри PositionedBox) — панель оказывалась по центру экрана, половина в каждом глазу. Теперь явная ширина половины (как у видео-Row) — панель по центру каждой половины, бинокулярно сливается в одну. ConnectionScreen тоже обёрнут в Binocular. Квадратик-индикатор убран — процент окрашивается цветом статуса (зелёный/белый/красный). Скрин: обе половины идентичны.
This commit is contained in:
@@ -17,29 +17,22 @@ import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.darkColorScheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.DisposableEffect
|
||||
import androidx.compose.runtime.collectAsState
|
||||
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.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
@@ -51,10 +44,11 @@ import com.rayneo.arsdk.android.ui.activity.BaseEventActivity
|
||||
import kotlinx.coroutines.launch
|
||||
import pw.binom.viewmate.glasses.gestures.actionName
|
||||
import pw.binom.viewmate.glasses.gestures.templeActionToCommand
|
||||
import pw.binom.viewmate.glasses.status.CHARGE_COLOR_DISCHARGING
|
||||
import pw.binom.viewmate.glasses.status.StatusPanelData
|
||||
import pw.binom.viewmate.glasses.status.StatusPanelProvider
|
||||
import pw.binom.viewmate.glasses.status.StatusPanelCompose
|
||||
import pw.binom.viewmate.glasses.ui.Binocular
|
||||
import pw.binom.viewmate.glasses.ui.BinocularScreenSize
|
||||
import pw.binom.viewmate.glasses.ui.GlassesMovieScreen
|
||||
import pw.binom.viewmate.glasses.ui.px
|
||||
|
||||
class MainActivity : BaseEventActivity() {
|
||||
private var resumeAfterScreenOn = false
|
||||
@@ -258,58 +252,29 @@ fun ConnectionScreen() {
|
||||
val status by connection.status.collectAsState()
|
||||
val messages by connection.messages.collectAsState()
|
||||
|
||||
val context = LocalContext.current
|
||||
var statusData by remember {
|
||||
mutableStateOf(StatusPanelData("--:--", 0, CHARGE_COLOR_DISCHARGING))
|
||||
}
|
||||
val statusProvider = remember(context) {
|
||||
StatusPanelProvider(context.applicationContext) { statusData = it }
|
||||
}
|
||||
DisposableEffect(statusProvider) {
|
||||
statusProvider.start()
|
||||
onDispose { statusProvider.stop() }
|
||||
}
|
||||
|
||||
Box(modifier = Modifier.fillMaxSize().background(Color.Black)) {
|
||||
Column(
|
||||
modifier = Modifier.fillMaxSize().padding(24.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
Text("ViewMate Glasses", style = MaterialTheme.typography.headlineMedium)
|
||||
Text(if (connected) "подключено к телефону" else "нет соединения")
|
||||
Text(status, style = MaterialTheme.typography.bodyMedium)
|
||||
Text("Последние сообщения:", style = MaterialTheme.typography.titleMedium)
|
||||
LazyColumn(modifier = Modifier.fillMaxWidth()) {
|
||||
items(messages) { msg ->
|
||||
Text(msg, style = MaterialTheme.typography.bodySmall)
|
||||
// Бинокулярно: контент дублируется в оба глаза, панель — по центру каждой
|
||||
// половины (явная ширина половины, иначе fillMaxSize растянет на 1280).
|
||||
Binocular(scale = false) {
|
||||
val screenWidthPx = BinocularScreenSize.current.width
|
||||
Box(modifier = Modifier.width(screenWidthPx.px).fillMaxHeight().background(Color.Black)) {
|
||||
Column(
|
||||
modifier = Modifier.fillMaxSize().padding(start = 24.dp, end = 24.dp, top = 56.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||
) {
|
||||
Text("ViewMate Glasses", style = MaterialTheme.typography.headlineMedium)
|
||||
Text(if (connected) "подключено к телефону" else "нет соединения")
|
||||
Text(status, style = MaterialTheme.typography.bodyMedium)
|
||||
Text("Последние сообщения:", style = MaterialTheme.typography.titleMedium)
|
||||
LazyColumn(modifier = Modifier.fillMaxWidth()) {
|
||||
items(messages) { msg ->
|
||||
Text(msg, style = MaterialTheme.typography.bodySmall)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
StatusPanelCompose(
|
||||
modifier = Modifier.align(Alignment.TopCenter).padding(top = 12.dp),
|
||||
)
|
||||
}
|
||||
|
||||
StatusPanelOverlay(
|
||||
data = statusData,
|
||||
modifier = Modifier.align(Alignment.TopEnd).padding(8.dp),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/** Маленькая панель статуса (время + цветной квадрат + заряд) в правом верхнем углу. */
|
||||
@Composable
|
||||
private fun StatusPanelOverlay(data: StatusPanelData, modifier: Modifier = Modifier) {
|
||||
Row(
|
||||
modifier = modifier
|
||||
.clip(RoundedCornerShape(6.dp))
|
||||
.background(Color(0x80000000.toInt()))
|
||||
.padding(horizontal = 6.dp, vertical = 3.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(4.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Box(
|
||||
Modifier
|
||||
.size(12.dp)
|
||||
.background(Color(data.chargeColorArgb))
|
||||
)
|
||||
Text(data.time, color = Color.White, style = MaterialTheme.typography.bodySmall)
|
||||
Text("${data.percent}%", color = Color.White, style = MaterialTheme.typography.bodySmall)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user