new: add emoji associated with records in records and player UI

This commit is contained in:
2026-07-03 14:28:59 +02:00
parent b0a18814b5
commit f90552ed62
7 changed files with 58 additions and 36 deletions
@@ -1,6 +1,8 @@
package fr.ajaury.gwenedeg.player.ui
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
@@ -32,7 +34,6 @@ import fr.ajaury.gwenedeg.player.model.PlaybackTiming
import fr.ajaury.gwenedeg.player.model.PlayerState
import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerUiState
import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerViewModel
import fr.ajaury.gwenedeg.preferences.model.PlaybackPreferences
import fr.ajaury.gwenedeg.preferences.ui.SubtitlePreferencesBottomSheet
import fr.ajaury.gwenedeg.subtitle.model.SubtitleLine
import fr.ajaury.gwenedeg.theme.GwenedegTheme
@@ -93,21 +94,31 @@ fun PlayerScreen(
topBar = {
TopAppBar(
title = {
Column {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp),
) {
Text(
text = uiState.recordTitle.transcription,
text = uiState.recordEmoji,
style = MaterialTheme.typography.headlineSmall,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
uiState.recordTitle.translation?.let { translation ->
Column {
Text(
text = translation,
style = MaterialTheme.typography.titleSmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
text = uiState.recordTitle.transcription,
style = MaterialTheme.typography.headlineSmall,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
uiState.recordTitle.translation?.let { translation ->
Text(
text = translation,
style = MaterialTheme.typography.titleSmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
}
}
}
},
@@ -214,6 +225,7 @@ private fun PlayerScreenPlayingPreview() {
GwenedegTheme {
PlayerScreen(
uiState = PlayerUiState(
recordEmoji = "🙏",
recordTitle = Phrase(
transcription = "Demat",
translation = "Bonjour",
@@ -238,6 +250,7 @@ private fun PlayerScreenPausedPreview() {
GwenedegTheme {
PlayerScreen(
uiState = PlayerUiState(
recordEmoji = "🙏",
recordTitle = Phrase(
transcription = "Demat",
translation = "Bonjour",
@@ -262,6 +275,7 @@ private fun PlayerScreenEndedPreview() {
GwenedegTheme {
PlayerScreen(
uiState = PlayerUiState(
recordEmoji = "🙏",
recordTitle = Phrase(
transcription = "Demat",
translation = "Bonjour",
@@ -7,6 +7,7 @@ import fr.ajaury.gwenedeg.preferences.model.SubtitlePreferences
import kotlin.time.Duration.Companion.seconds
data class PlayerUiState(
val recordEmoji: String = "",
val recordTitle: Phrase = Phrase(transcription = ""),
val playerState: PlayerState = PlayerState(),
val subtitlePreferences: SubtitlePreferences = SubtitlePreferences(),
@@ -40,6 +40,7 @@ class PlayerViewModel(
preferencesRepository.playbackPreferences,
) { record, playerState, subtitlePreferences, playbackPreferences ->
PlayerUiState(
recordEmoji = record?.emoji ?: "",
recordTitle = record?.title ?: Phrase(transcription = ""),
playerState = playerState,
subtitlePreferences = subtitlePreferences,
@@ -29,14 +29,17 @@ fun RecordView(
.clickable { onClick() }
.padding(16.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(16.dp),
horizontalArrangement = Arrangement.spacedBy(8.dp),
) {
Text(
text = record.index.toString().padStart(2),
fontFamily = FontFamily.Monospace,
)
Text(text = record.emoji)
Column {
Text(text = record.title.transcription)
record.title.translation?.let { translation ->
Text(
text = translation,
@@ -56,6 +59,7 @@ private fun RecordViewPreview() {
Record(
id = 1,
index = 1,
emoji = "🙏",
title = Phrase(
transcription = "Sample Record",
translation = "Exemple d'enregistrement",