Change to show excluded languages in dropdown, no rows below

TODO:
Load actually excluded languages
Optimise code
Improve UI
This commit is contained in:
David Kaspar
2025-06-25 10:53:28 +02:00
parent 0495dc88fc
commit a5c370133c
3 changed files with 12 additions and 54 deletions
@@ -83,14 +83,6 @@ class SharedPreferencesViewModel : ViewModel() {
}
}
fun addDontTranslateFrom(languageCode: String) {
val newSet = sharedPrefs.dontTranslateFrom.plus(languageCode)
if (newSet != sharedPrefs.dontTranslateFrom) {
sharedPrefs.dontTranslateFrom = newSet
saveSharedSettings()
}
}
fun removeDontTranslateFrom(languageCode: String) {
val newSet = sharedPrefs.dontTranslateFrom.minus(languageCode)
if (newSet != sharedPrefs.dontTranslateFrom) {
@@ -32,14 +32,10 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Clear
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExposedDropdownMenuBox
import androidx.compose.material3.ExposedDropdownMenuDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
@@ -246,7 +242,7 @@ fun SettingsScreen(sharedPreferencesViewModel: SharedPreferencesViewModel) {
Spacer(modifier = HalfVertSpacer)
DontTranslateFromSetting(sharedPreferencesViewModel, languageEntries)
DontTranslateFromSetting(sharedPreferencesViewModel)
Spacer(modifier = HalfVertSpacer)
@@ -341,10 +337,7 @@ fun SettingsScreen(sharedPreferencesViewModel: SharedPreferencesViewModel) {
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DontTranslateFromSetting(
sharedPreferencesViewModel: SharedPreferencesViewModel,
languageEntries: ImmutableMap<String, String>,
) {
fun DontTranslateFromSetting(sharedPreferencesViewModel: SharedPreferencesViewModel) {
var expanded by remember { mutableStateOf(false) }
val selectedLanguages = sharedPreferencesViewModel.sharedPrefs.dontTranslateFrom
@@ -369,45 +362,18 @@ fun DontTranslateFromSetting(
expanded = expanded,
onDismissRequest = { expanded = false },
) {
languageEntries.forEach { (displayName, languageCode) ->
if (!selectedLanguages.contains(languageCode)) {
DropdownMenuItem(
text = { Text(text = displayName) },
onClick = {
sharedPreferencesViewModel.addDontTranslateFrom(languageCode)
expanded = false
},
)
}
selectedLanguages.forEach { languageCode ->
DropdownMenuItem(
text = { Text(text = JavaLocale.forLanguageTag(languageCode).displayName) },
onClick = {
sharedPreferencesViewModel.removeDontTranslateFrom(languageCode)
expanded = false
},
)
}
}
}
}
selectedLanguages.forEach { languageCode ->
val displayName =
languageEntries.entries.find { it.value == languageCode }?.key
?: JavaLocale.forLanguageTag(languageCode).displayName
Row(
verticalAlignment = Alignment.CenterVertically,
modifier =
Modifier
.fillMaxWidth()
.padding(vertical = Size10dp),
) {
Text(
text = displayName,
modifier = Modifier.weight(1f),
)
IconButton(onClick = { sharedPreferencesViewModel.removeDontTranslateFrom(languageCode) }) {
Icon(
imageVector = Icons.Default.Clear,
contentDescription = stringRes(R.string.remove),
tint = MaterialTheme.colorScheme.onSurface,
)
}
}
}
}
}
+2 -2
View File
@@ -1180,6 +1180,6 @@
<string name="search_by_hashtag">Search hashtag: #%1$s</string>
<string name="dont_translate_from">Don\'t Translate From</string>
<string name="dont_translate_from_description">Languages selected here will not be translated</string>
<string name="add_a_language">Add a language</string>
<string name="dont_translate_from_description">Languages shown here will not be translated. Select a language to remove it and have it translated again.</string>
<string name="add_a_language">Select to remove</string>
</resources>