Skip to content

Commit

Permalink
a
Browse files Browse the repository at this point in the history
  • Loading branch information
reocat committed Nov 14, 2024
1 parent af6a86d commit b551918
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 7 deletions.
5 changes: 3 additions & 2 deletions app/src/main/java/com/dd3boh/outertune/ui/component/Dialog.kt
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ fun DefaultDialog(
fun ListDialog(
onDismiss: () -> Unit,
modifier: Modifier = Modifier,
content: LazyListScope.() -> Unit,
content: LazyListScope.() -> Unit // Remove the @Composable annotation from content
) {
Dialog(
onDismissRequest = onDismiss,
Expand All @@ -142,12 +142,13 @@ fun ListDialog(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = modifier.padding(vertical = 24.dp)
) {
LazyColumn(content = content)
LazyColumn(content = content) // No need for casting
}
}
}
}


@Composable
fun TextFieldDialog(
modifier: Modifier = Modifier,
Expand Down
10 changes: 6 additions & 4 deletions app/src/main/java/com/dd3boh/outertune/ui/component/Lyrics.kt
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,9 @@ fun Lyrics(
val lyricsTextPosition by rememberEnumPreference(LyricsTextPositionKey, LyricsPosition.CENTER)

val mediaMetadata by playerConnection.mediaMetadata.collectAsState()
val translatedLyrics = remember { mutableStateOf("") }
var translatedLyrics by remember {
mutableStateOf("")
}

val translationEnabled by rememberPreference(
key = booleanPreferencesKey("translation_enabled"),
Expand Down Expand Up @@ -165,7 +167,7 @@ fun Lyrics(

if (translationEnabled && lyrics != null) {
translateLyrics(lyrics, destinationLanguage.value) { result ->
translatedLyrics.value = result
translatedLyrics = result
}
}

Expand Down Expand Up @@ -301,9 +303,9 @@ fun Lyrics(
.alpha(if (!isSynced || index == displayedCurrentLineIndex) 1f else 0.5f)
)

if (translationEnabled && translatedLyrics.value.isNotEmpty()) {
if (translationEnabled && translatedLyrics.isNotEmpty()) {
Text(
text = translatedLyrics.value,
text = translatedLyrics,
fontSize = 16.sp,
color = textColor,
textAlign = TextAlign.Center,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.dd3boh.outertune.ui.component

import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Translate
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.dd3boh.outertune.R
import com.dd3boh.outertune.db.entities.LyricsEntity
import com.dd3boh.outertune.models.MediaMetadata
import com.dd3boh.outertune.viewmodels.LyricsMenuViewModel
import kotlinx.coroutines.launch
import me.bush.translator.Language
import me.bush.translator.Translator

@Composable
fun TranslationDialog(
onDismiss: () -> Unit,
lyricsProvider: () -> LyricsEntity?,
mediaMetadataProvider: () -> MediaMetadata,
viewModel: LyricsMenuViewModel = hiltViewModel(),
) {
val scope = rememberCoroutineScope()
var selectedLanguage by rememberSaveable {
mutableStateOf(Language.ENGLISH)
}
var translatedLyrics by rememberSaveable {
mutableStateOf("")
}

DefaultDialog(
onDismiss = onDismiss,
icon = { Icon(imageVector = Icons.Rounded.Translate, contentDescription = null) },
title = { Text(stringResource(R.string.translate_lyrics)) }, // Add a new string resource
buttons = {
TextButton(
onClick = onDismiss
) {
Text(stringResource(android.R.string.cancel))
}

Spacer(Modifier.width(8.dp))

TextButton(
onClick = {
scope.launch {
translateLyrics(lyricsProvider()?.lyrics.orEmpty(), selectedLanguage) { result ->
translatedLyrics = result
}
}
}
) {
Text(stringResource(R.string.translate)) // Add a new string resource
}
}
) {
// Add language selection and display translated lyrics here
}
}

private suspend fun translateLyrics(
text: String,
destinationLanguage: Language,
onResult: (String) -> Unit
) {
val translator = Translator()
try {
val translation = translator.translate(text, destinationLanguage)
onResult(translation.translatedText)
} catch (e: Exception) {
onResult("Translation Error")
}
}
22 changes: 21 additions & 1 deletion app/src/main/java/com/dd3boh/outertune/ui/menu/LyricsMenu.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import androidx.compose.material.icons.rounded.ExpandMore
import androidx.compose.material.icons.rounded.Search
import androidx.compose.material.icons.rounded.Sync
import androidx.compose.material.icons.rounded.SyncAlt
import androidx.compose.material.icons.rounded.Translate
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
Expand Down Expand Up @@ -60,6 +61,7 @@ import com.dd3boh.outertune.ui.component.GridMenu
import com.dd3boh.outertune.ui.component.GridMenuItem
import com.dd3boh.outertune.ui.component.ListDialog
import com.dd3boh.outertune.ui.component.TextFieldDialog
import com.dd3boh.outertune.ui.component.TranslationDialog
import com.dd3boh.outertune.viewmodels.LyricsMenuViewModel


Expand Down Expand Up @@ -284,6 +286,18 @@ fun LyricsMenu(
}
}

var showTranslationDialog by rememberSaveable {
mutableStateOf(false)
}

if (showTranslationDialog) {
TranslationDialog(
onDismiss = { showTranslationDialog = false },
lyricsProvider = lyricsProvider,
mediaMetadataProvider = mediaMetadataProvider
)
}

GridMenu(
contentPadding = PaddingValues(
start = 8.dp,
Expand Down Expand Up @@ -311,5 +325,11 @@ fun LyricsMenu(
) {
showSearchDialog = true
}
GridMenuItem(
icon = Icons.Rounded.Translate, // You can use any icon you prefer
title = R.string.translate // Add a new string resource for translation
) {
showTranslationDialog = true
}
}
}
}
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -436,4 +436,7 @@
<string name="dev_settings_description">Reveals additional advanced settings intended for development use</string>
<string name="translation_models">Translation Models</string>
<string name="clear_translation_models">Clear translation models</string>
<string name="select_language">Select Language</string>
<string name="translate">Translate</string>
<string name="translate_lyrics">Translate Lyrics</string>
</resources>

0 comments on commit b551918

Please sign in to comment.