/
vguzev
/
speed-reader
Обзор
Документация
Войти
/
vguzev
/
speed-reader
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/src/main/java/com/smartapps/speedreader/ui/reader/ReaderScreen.kt
99 строк
4 KB
vguzev
First commit
05 июл 2026, 13:50
05 июл 2026, 13:50
4a0bffe
Код
Авторство
О чём код?
package com.smartapps.speedreader.ui.reader import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope 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.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import kotlinx.coroutines.delay import kotlinx.coroutines.launch @Composable fun ReaderScreen( viewModel: ReaderViewModel = viewModel(), modifier: Modifier = Modifier, onFinished: () -> Unit ) { val scope = rememberCoroutineScope() // Set up the screen color scheme val backgroundColor = Color(0xFF2D2D2D) // Темно-серый фон val textColor = Color.White // Белый текст // Observe ViewModel state using collectAsState() val textItem by viewModel.textItem.collectAsState() val currentWord by viewModel.currentWord.collectAsState() val readerState by viewModel.readerState.collectAsState() val currentSpeed by viewModel.currentSpeed.collectAsState() // Auto-finish when text is finished LaunchedEffect(readerState.isFinished) { if (readerState.isFinished && textItem != null) { onFinished() } } Box( modifier = modifier .fillMaxSize() .background(color = backgroundColor) .clickable { viewModel.togglePlayPause() }, contentAlignment = Alignment.Center ) { textItem?.let { Text( text = currentWord, color = textColor, fontWeight = FontWeight.Bold, style = androidx.compose.material3.MaterialTheme.typography.displayMedium, modifier = Modifier .padding(16.dp), textAlign = TextAlign.Center, maxLines = 1, softWrap = false ) } // Reading speed display in bottom-right corner // Use specific padding for bottom-right corner to avoid system bars Box( modifier = Modifier .align(Alignment.BottomEnd) .padding(end = 32.dp, bottom = 32.dp) ) { Text( text = if (readerState.isPlaying) { "Текущая скорость: ${currentSpeed} слов в минуту" } else { "Текущая скорость: Пауза" }, color = Color(0xFFB0B0B0), // Light gray style = MaterialTheme.typography.labelSmall, fontWeight = FontWeight.Normal ) } } }