@ -17,9 +17,6 @@ import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.snapshots.SnapshotStateList
import androidx.compose.runtime.toMutableStateList
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
@ -52,37 +49,15 @@ fun TranslationOptionsDialog(
) {
TranslationOptionsDialogHeader ( onBackClicked )
val translationOptionsListState = remember {
translationOptionsList . toMutableStateList ( )
}
EnabledTranslationOptionsItems (
translationOptionsListState ,
)
LazyColumn {
items ( translationOptionsListState ) { item : TranslationSwitchItem ->
items ( translationOptionsList ) { item : TranslationSwitchItem ->
val translationSwitchItem = TranslationSwitchItem (
type = item . type ,
textLabel = item . textLabel ,
description = if ( item . isChecked ) item . description else null ,
importance = item . importance ,
isChecked = item . isChecked ,
isEnabled = item . isEnabled ,
hasDivider = item . hasDivider ,
onStateChange = { checked ->
// If the item has the same importance, only one switch should be enabled.
val iterator = translationOptionsListState . iterator ( )
iterator . forEach {
if ( it != item && it . importance == item . importance && it . isChecked ) {
it . isChecked = false
}
}
val index = translationOptionsListState . indexOf ( item )
translationOptionsListState [ index ] = translationOptionsListState [ index ] . copy (
isChecked = checked ,
)
onStateChange = { translationPageSettingsOption , checked ->
item . onStateChange . invoke ( translationPageSettingsOption , checked )
} ,
)
TranslationOptions (
@ -115,46 +90,33 @@ fun TranslationOptionsDialog(
}
}
/ * *
* If the item with the highest importance is checked , all other items should be disabled .
* If all items are unchecked , all of them are enabled .
* If the item with the highest importance is unchecked and a item with importance 1 is checked ,
* the item with importance 0 is disabled .
* If the item with importance 0 is checked all the items are enabled .
* /
@Composable
private fun EnabledTranslationOptionsItems (
translationOptionsListState : SnapshotStateList < TranslationSwitchItem > ,
) {
val itemCheckedWithHighestImportance =
translationOptionsListState . sortedByDescending { listItem -> listItem . importance }
. firstOrNull { it . isChecked }
if ( itemCheckedWithHighestImportance == null || itemCheckedWithHighestImportance . importance == 0 ) {
translationOptionsListState . forEach {
it . isEnabled = true
}
} else {
translationOptionsListState . forEach {
it . isEnabled = it . importance >= itemCheckedWithHighestImportance . importance
}
}
}
@Composable
private fun TranslationOptions (
translationSwitchItem : TranslationSwitchItem ,
) {
SwitchWithLabel (
label = translationSwitchItem . textLabel ,
description = translationSwitchItem . description ,
description = if ( translationSwitchItem . isChecked ) {
translationSwitchItem . type . descriptionId ?. let {
stringResource (
id = it ,
)
}
} else {
null
} ,
enabled = translationSwitchItem . isEnabled ,
checked = translationSwitchItem . isChecked ,
onCheckedChange = translationSwitchItem . onStateChange ,
onCheckedChange = { checked ->
translationSwitchItem . onStateChange . invoke (
translationSwitchItem . type ,
checked ,
)
} ,
modifier = Modifier . padding ( start = 72. dp , end = 16. dp ) ,
)
if ( translationSwitchItem . hasDivider ) {
if ( translationSwitchItem . type. hasDivider) {
Divider ( Modifier . padding ( top = 4. dp , bottom = 4. dp ) )
}
}
@ -201,52 +163,44 @@ fun getTranslationOptionsList(): List<TranslationSwitchItem> {
return mutableListOf < TranslationSwitchItem > ( ) . apply {
add (
TranslationSwitchItem (
type = TranslationPageSettingsOption . AlwaysOfferPopup ( ) ,
textLabel = stringResource ( R . string . translation _option _bottom _sheet _always _translate ) ,
isChecked = false ,
hasDivider = true ,
isEnabled = true ,
onStateChange = { } ,
onStateChange = { _ , _ -> } ,
) ,
)
add (
TranslationSwitchItem (
type = TranslationPageSettingsOption . AlwaysTranslateLanguage ( ) ,
textLabel = stringResource (
id = R . string . translation _option _bottom _sheet _always _translate _in _language ,
formatArgs = arrayOf ( Locale ( " es " ) . displayName ) ,
) ,
description = stringResource ( id = R . string . translation _option _bottom _sheet _switch _description ) ,
importance = 1 ,
isChecked = false ,
isEnabled = true ,
hasDivider = false ,
onStateChange = { } ,
onStateChange = { _ , _ -> } ,
) ,
)
add (
TranslationSwitchItem (
type = TranslationPageSettingsOption . NeverTranslateLanguage ( ) ,
textLabel = stringResource (
id = R . string . translation _option _bottom _sheet _never _translate _in _language ,
formatArgs = arrayOf ( Locale ( " es " ) . displayName ) ,
) ,
description = stringResource ( id = R . string . translation _option _bottom _sheet _switch _description ) ,
importance = 1 ,
isChecked = true ,
isEnabled = true ,
hasDivider = true ,
onStateChange = { } ,
onStateChange = { _ , _ -> } ,
) ,
)
add (
TranslationSwitchItem (
type = TranslationPageSettingsOption . NeverTranslateSite ( ) ,
textLabel = stringResource ( R . string . translation _option _bottom _sheet _never _translate _site ) ,
description = stringResource (
id = R . string . translation _option _bottom _sheet _switch _never _translate _site _description ,
) ,
importance = 2 ,
isChecked = true ,
isEnabled = true ,
hasDivider = true ,
onStateChange = { } ,
onStateChange = { _ , _ -> } ,
) ,
)
}