mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Remove redundant preference composables
This commit is contained in:
		| @@ -54,9 +54,10 @@ import eu.kanade.presentation.components.DIVIDER_ALPHA | ||||
| import eu.kanade.presentation.components.Divider | ||||
| import eu.kanade.presentation.components.EmptyScreen | ||||
| import eu.kanade.presentation.components.LoadingScreen | ||||
| import eu.kanade.presentation.components.PreferenceRow | ||||
| import eu.kanade.presentation.components.Scaffold | ||||
| import eu.kanade.presentation.components.ScrollbarLazyColumn | ||||
| import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget | ||||
| import eu.kanade.presentation.more.settings.widget.TrailingWidgetBuffer | ||||
| import eu.kanade.presentation.util.horizontalPadding | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.extension.model.Extension | ||||
| @@ -376,15 +377,14 @@ private fun SourceSwitchPreference( | ||||
| ) { | ||||
|     val context = LocalContext.current | ||||
|  | ||||
|     PreferenceRow( | ||||
|     TextPreferenceWidget( | ||||
|         modifier = modifier, | ||||
|         title = if (source.labelAsName) { | ||||
|             source.source.toString() | ||||
|         } else { | ||||
|             LocaleHelper.getSourceDisplayName(source.source.lang, context) | ||||
|         }, | ||||
|         onClick = { onClickSource(source.source.id) }, | ||||
|         action = { | ||||
|         widget = { | ||||
|             Row( | ||||
|                 verticalAlignment = Alignment.CenterVertically, | ||||
|             ) { | ||||
| @@ -398,9 +398,14 @@ private fun SourceSwitchPreference( | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 Switch(checked = source.enabled, onCheckedChange = null) | ||||
|                 Switch( | ||||
|                     checked = source.enabled, | ||||
|                     onCheckedChange = null, | ||||
|                     modifier = Modifier.padding(start = TrailingWidgetBuffer), | ||||
|                 ) | ||||
|             } | ||||
|         }, | ||||
|         onPreferenceClick = { onClickSource(source.source.id) }, | ||||
|     ) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -3,7 +3,6 @@ package eu.kanade.presentation.browse | ||||
| import androidx.compose.foundation.layout.PaddingValues | ||||
| import androidx.compose.foundation.layout.padding | ||||
| import androidx.compose.foundation.lazy.items | ||||
| import androidx.compose.material3.Switch | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.LaunchedEffect | ||||
| import androidx.compose.ui.Modifier | ||||
| @@ -13,8 +12,8 @@ import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.components.EmptyScreen | ||||
| import eu.kanade.presentation.components.FastScrollLazyColumn | ||||
| import eu.kanade.presentation.components.LoadingScreen | ||||
| import eu.kanade.presentation.components.PreferenceRow | ||||
| import eu.kanade.presentation.components.Scaffold | ||||
| import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.ui.browse.extension.ExtensionFilterPresenter | ||||
| import eu.kanade.tachiyomi.util.system.LocaleHelper | ||||
| @@ -42,15 +41,13 @@ fun ExtensionFilterScreen( | ||||
|                 textResource = R.string.empty_screen, | ||||
|                 modifier = Modifier.padding(contentPadding), | ||||
|             ) | ||||
|             else -> { | ||||
|                 SourceFilterContent( | ||||
|                     contentPadding = contentPadding, | ||||
|                     state = presenter, | ||||
|                     onClickLang = { | ||||
|                         presenter.toggleLanguage(it) | ||||
|                     }, | ||||
|                 ) | ||||
|             } | ||||
|             else -> ExtensionFilterContent( | ||||
|                 contentPadding = contentPadding, | ||||
|                 state = presenter, | ||||
|                 onClickLang = { | ||||
|                     presenter.toggleLanguage(it) | ||||
|                 }, | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
|     LaunchedEffect(Unit) { | ||||
| @@ -65,7 +62,7 @@ fun ExtensionFilterScreen( | ||||
| } | ||||
|  | ||||
| @Composable | ||||
| private fun SourceFilterContent( | ||||
| private fun ExtensionFilterContent( | ||||
|     contentPadding: PaddingValues, | ||||
|     state: ExtensionFilterState, | ||||
|     onClickLang: (String) -> Unit, | ||||
| @@ -76,29 +73,13 @@ private fun SourceFilterContent( | ||||
|         items( | ||||
|             items = state.items, | ||||
|         ) { model -> | ||||
|             ExtensionFilterItem( | ||||
|             val lang = model.lang | ||||
|             SwitchPreferenceWidget( | ||||
|                 modifier = Modifier.animateItemPlacement(), | ||||
|                 lang = model.lang, | ||||
|                 enabled = model.enabled, | ||||
|                 onClickItem = onClickLang, | ||||
|                 title = LocaleHelper.getSourceDisplayName(lang, LocalContext.current), | ||||
|                 checked = model.enabled, | ||||
|                 onCheckedChanged = { onClickLang(lang) }, | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @Composable | ||||
| private fun ExtensionFilterItem( | ||||
|     modifier: Modifier, | ||||
|     lang: String, | ||||
|     enabled: Boolean, | ||||
|     onClickItem: (String) -> Unit, | ||||
| ) { | ||||
|     PreferenceRow( | ||||
|         modifier = modifier, | ||||
|         title = LocaleHelper.getSourceDisplayName(lang, LocalContext.current), | ||||
|         action = { | ||||
|             Switch(checked = enabled, onCheckedChange = null) | ||||
|         }, | ||||
|         onClick = { onClickItem(lang) }, | ||||
|     ) | ||||
| } | ||||
|   | ||||
| @@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.PaddingValues | ||||
| import androidx.compose.foundation.layout.padding | ||||
| import androidx.compose.foundation.lazy.items | ||||
| import androidx.compose.material3.Checkbox | ||||
| import androidx.compose.material3.Switch | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.LaunchedEffect | ||||
| import androidx.compose.ui.Modifier | ||||
| @@ -16,8 +15,8 @@ import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.components.EmptyScreen | ||||
| import eu.kanade.presentation.components.FastScrollLazyColumn | ||||
| import eu.kanade.presentation.components.LoadingScreen | ||||
| import eu.kanade.presentation.components.PreferenceRow | ||||
| import eu.kanade.presentation.components.Scaffold | ||||
| import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.ui.browse.source.FilterUiModel | ||||
| import eu.kanade.tachiyomi.ui.browse.source.SourcesFilterPresenter | ||||
| @@ -119,13 +118,11 @@ private fun SourcesFilterHeader( | ||||
|     enabled: Boolean, | ||||
|     onClickItem: (String) -> Unit, | ||||
| ) { | ||||
|     PreferenceRow( | ||||
|     SwitchPreferenceWidget( | ||||
|         modifier = modifier, | ||||
|         title = LocaleHelper.getSourceDisplayName(language, LocalContext.current), | ||||
|         action = { | ||||
|             Switch(checked = enabled, onCheckedChange = null) | ||||
|         }, | ||||
|         onClick = { onClickItem(language) }, | ||||
|         checked = enabled, | ||||
|         onCheckedChanged = { onClickItem(language) }, | ||||
|     ) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,17 @@ | ||||
| package eu.kanade.presentation.components | ||||
|  | ||||
| import androidx.compose.material3.MaterialTheme | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.Modifier | ||||
|  | ||||
| const val DIVIDER_ALPHA = 0.2f | ||||
|  | ||||
| @Composable | ||||
| fun Divider( | ||||
|     modifier: Modifier = Modifier, | ||||
| ) { | ||||
|     androidx.compose.material3.Divider( | ||||
|         modifier = modifier, | ||||
|         color = MaterialTheme.colorScheme.onSurface.copy(alpha = DIVIDER_ALPHA), | ||||
|     ) | ||||
| } | ||||
| @@ -1,167 +0,0 @@ | ||||
| package eu.kanade.presentation.components | ||||
|  | ||||
| import androidx.compose.foundation.combinedClickable | ||||
| import androidx.compose.foundation.layout.Box | ||||
| import androidx.compose.foundation.layout.Column | ||||
| import androidx.compose.foundation.layout.Row | ||||
| import androidx.compose.foundation.layout.fillMaxWidth | ||||
| import androidx.compose.foundation.layout.heightIn | ||||
| import androidx.compose.foundation.layout.padding | ||||
| import androidx.compose.foundation.layout.size | ||||
| import androidx.compose.foundation.layout.widthIn | ||||
| import androidx.compose.material3.Icon | ||||
| import androidx.compose.material3.MaterialTheme | ||||
| import androidx.compose.material3.Switch | ||||
| import androidx.compose.material3.Text | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.Alignment | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.graphics.painter.Painter | ||||
| import androidx.compose.ui.tooling.preview.Preview | ||||
| import androidx.compose.ui.unit.dp | ||||
| import eu.kanade.core.prefs.PreferenceMutableState | ||||
| import eu.kanade.presentation.theme.TachiyomiTheme | ||||
| import eu.kanade.presentation.util.horizontalPadding | ||||
|  | ||||
| const val DIVIDER_ALPHA = 0.2f | ||||
|  | ||||
| @Composable | ||||
| fun Divider( | ||||
|     modifier: Modifier = Modifier, | ||||
| ) { | ||||
|     androidx.compose.material3.Divider( | ||||
|         modifier = modifier, | ||||
|         color = MaterialTheme.colorScheme.onSurface.copy(alpha = DIVIDER_ALPHA), | ||||
|     ) | ||||
| } | ||||
|  | ||||
| @Composable | ||||
| fun PreferenceRow( | ||||
|     modifier: Modifier = Modifier, | ||||
|     title: String, | ||||
|     painter: Painter? = null, | ||||
|     onClick: () -> Unit = {}, | ||||
|     onLongClick: () -> Unit = {}, | ||||
|     subtitle: String? = null, | ||||
|     action: @Composable (() -> Unit)? = null, | ||||
| ) { | ||||
|     val height = if (subtitle != null) 72.dp else 56.dp | ||||
|  | ||||
|     val titleTextStyle = MaterialTheme.typography.bodyLarge | ||||
|     val subtitleTextStyle = MaterialTheme.typography.bodyMedium.copy( | ||||
|         color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.75f), | ||||
|     ) | ||||
|  | ||||
|     Row( | ||||
|         modifier = modifier | ||||
|             .fillMaxWidth() | ||||
|             .heightIn(min = height) | ||||
|             .combinedClickable( | ||||
|                 onLongClick = onLongClick, | ||||
|                 onClick = onClick, | ||||
|             ), | ||||
|         verticalAlignment = Alignment.CenterVertically, | ||||
|     ) { | ||||
|         if (painter != null) { | ||||
|             Icon( | ||||
|                 painter = painter, | ||||
|                 modifier = Modifier | ||||
|                     .padding(start = horizontalPadding, end = 16.dp) | ||||
|                     .size(24.dp), | ||||
|                 tint = MaterialTheme.colorScheme.primary, | ||||
|                 contentDescription = null, | ||||
|             ) | ||||
|         } | ||||
|         Column( | ||||
|             Modifier | ||||
|                 .padding(horizontal = 16.dp) | ||||
|                 .weight(1f), | ||||
|         ) { | ||||
|             Text( | ||||
|                 text = title, | ||||
|                 style = titleTextStyle, | ||||
|             ) | ||||
|             if (subtitle != null) { | ||||
|                 Text( | ||||
|                     modifier = Modifier.padding(top = 4.dp), | ||||
|                     text = subtitle, | ||||
|                     style = subtitleTextStyle, | ||||
|                 ) | ||||
|             } | ||||
|         } | ||||
|         if (action != null) { | ||||
|             Box( | ||||
|                 Modifier | ||||
|                     .widthIn(min = 56.dp) | ||||
|                     .padding(end = horizontalPadding), | ||||
|             ) { | ||||
|                 action() | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @Composable | ||||
| fun SwitchPreference( | ||||
|     modifier: Modifier = Modifier, | ||||
|     checked: Boolean, | ||||
|     onClick: () -> Unit, | ||||
|     title: String, | ||||
|     subtitle: String? = null, | ||||
|     painter: Painter? = null, | ||||
| ) { | ||||
|     PreferenceRow( | ||||
|         modifier = modifier, | ||||
|         title = title, | ||||
|         subtitle = subtitle, | ||||
|         painter = painter, | ||||
|         action = { Switch(checked = checked, onCheckedChange = null) }, | ||||
|         onClick = onClick, | ||||
|     ) | ||||
| } | ||||
|  | ||||
| @Composable | ||||
| fun SwitchPreference( | ||||
|     modifier: Modifier = Modifier, | ||||
|     preference: PreferenceMutableState<Boolean>, | ||||
|     title: String, | ||||
|     subtitle: String? = null, | ||||
|     painter: Painter? = null, | ||||
| ) { | ||||
|     SwitchPreference( | ||||
|         modifier = modifier, | ||||
|         title = title, | ||||
|         subtitle = subtitle, | ||||
|         painter = painter, | ||||
|         checked = preference.value, | ||||
|         onClick = { preference.value = !preference.value }, | ||||
|     ) | ||||
| } | ||||
|  | ||||
| @Preview | ||||
| @Composable | ||||
| private fun PreferencesPreview() { | ||||
|     TachiyomiTheme { | ||||
|         Column { | ||||
|             PreferenceRow( | ||||
|                 title = "Plain", | ||||
|                 subtitle = "Subtitle", | ||||
|             ) | ||||
|  | ||||
|             Divider() | ||||
|  | ||||
|             SwitchPreference( | ||||
|                 title = "Switch (on)", | ||||
|                 subtitle = "Subtitle", | ||||
|                 checked = true, | ||||
|                 onClick = {}, | ||||
|             ) | ||||
|             SwitchPreference( | ||||
|                 title = "Switch (off)", | ||||
|                 subtitle = "Subtitle", | ||||
|                 checked = false, | ||||
|                 onClick = {}, | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -44,43 +44,42 @@ internal fun BasePreferenceWidget( | ||||
|     widget: @Composable (() -> Unit)? = null, | ||||
| ) { | ||||
|     val highlighted = LocalPreferenceHighlighted.current | ||||
|     Box(modifier = Modifier.highlightBackground(highlighted)) { | ||||
|         Row( | ||||
|             modifier = modifier | ||||
|                 .sizeIn(minHeight = 56.dp) | ||||
|                 .clickable(enabled = onClick != null, onClick = { onClick?.invoke() }) | ||||
|                 .fillMaxWidth(), | ||||
|             verticalAlignment = Alignment.CenterVertically, | ||||
|     Row( | ||||
|         modifier = modifier | ||||
|             .highlightBackground(highlighted) | ||||
|             .sizeIn(minHeight = 56.dp) | ||||
|             .clickable(enabled = onClick != null, onClick = { onClick?.invoke() }) | ||||
|             .fillMaxWidth(), | ||||
|         verticalAlignment = Alignment.CenterVertically, | ||||
|     ) { | ||||
|         if (icon != null) { | ||||
|             Box( | ||||
|                 modifier = Modifier.padding(start = PrefsHorizontalPadding, end = 8.dp), | ||||
|                 content = { icon() }, | ||||
|             ) | ||||
|         } | ||||
|         Column( | ||||
|             modifier = Modifier | ||||
|                 .weight(1f) | ||||
|                 .padding(vertical = PrefsVerticalPadding), | ||||
|         ) { | ||||
|             if (icon != null) { | ||||
|                 Box( | ||||
|                     modifier = Modifier.padding(start = PrefsHorizontalPadding, end = 8.dp), | ||||
|                     content = { icon() }, | ||||
|                 ) | ||||
|             } | ||||
|             Column( | ||||
|                 modifier = Modifier | ||||
|                     .weight(1f) | ||||
|                     .padding(vertical = PrefsVerticalPadding), | ||||
|             ) { | ||||
|                 if (!title.isNullOrBlank()) { | ||||
|                     Text( | ||||
|                         modifier = Modifier.padding(horizontal = PrefsHorizontalPadding), | ||||
|                         text = title, | ||||
|                         overflow = TextOverflow.Ellipsis, | ||||
|                         maxLines = 2, | ||||
|                         style = MaterialTheme.typography.titleLarge, | ||||
|                         fontSize = TitleFontSize, | ||||
|                     ) | ||||
|                 } | ||||
|                 subcomponent?.invoke(this) | ||||
|             } | ||||
|             if (widget != null) { | ||||
|                 Box( | ||||
|                     modifier = Modifier.padding(end = PrefsHorizontalPadding), | ||||
|                     content = { widget() }, | ||||
|             if (!title.isNullOrBlank()) { | ||||
|                 Text( | ||||
|                     modifier = Modifier.padding(horizontal = PrefsHorizontalPadding), | ||||
|                     text = title, | ||||
|                     overflow = TextOverflow.Ellipsis, | ||||
|                     maxLines = 2, | ||||
|                     style = MaterialTheme.typography.titleLarge, | ||||
|                     fontSize = TitleFontSize, | ||||
|                 ) | ||||
|             } | ||||
|             subcomponent?.invoke(this) | ||||
|         } | ||||
|         if (widget != null) { | ||||
|             Box( | ||||
|                 modifier = Modifier.padding(end = PrefsHorizontalPadding), | ||||
|                 content = { widget() }, | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -14,6 +14,7 @@ import androidx.compose.ui.tooling.preview.Preview | ||||
|  | ||||
| @Composable | ||||
| fun SwitchPreferenceWidget( | ||||
|     modifier: Modifier = Modifier, | ||||
|     title: String, | ||||
|     subtitle: String? = null, | ||||
|     icon: ImageVector? = null, | ||||
| @@ -21,6 +22,7 @@ fun SwitchPreferenceWidget( | ||||
|     onCheckedChanged: (Boolean) -> Unit, | ||||
| ) { | ||||
|     TextPreferenceWidget( | ||||
|         modifier = modifier, | ||||
|         title = title, | ||||
|         subtitle = subtitle, | ||||
|         icon = icon, | ||||
|   | ||||
| @@ -13,7 +13,6 @@ import kotlinx.coroutines.channels.Channel | ||||
| import kotlinx.coroutines.flow.catch | ||||
| import kotlinx.coroutines.flow.collectLatest | ||||
| import kotlinx.coroutines.flow.receiveAsFlow | ||||
| import kotlinx.coroutines.flow.stateIn | ||||
| import logcat.LogPriority | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| @@ -36,7 +35,6 @@ class ExtensionFilterPresenter( | ||||
|                     logcat(LogPriority.ERROR, exception) | ||||
|                     _events.send(Event.FailedFetchingLanguages) | ||||
|                 } | ||||
|                 .stateIn(presenterScope) | ||||
|                 .collectLatest(::collectLatestSourceLangMap) | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -15,7 +15,6 @@ import kotlinx.coroutines.channels.Channel | ||||
| import kotlinx.coroutines.flow.catch | ||||
| import kotlinx.coroutines.flow.collectLatest | ||||
| import kotlinx.coroutines.flow.receiveAsFlow | ||||
| import kotlinx.coroutines.flow.stateIn | ||||
| import logcat.LogPriority | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| @@ -40,7 +39,6 @@ class SourcesFilterPresenter( | ||||
|                     logcat(LogPriority.ERROR, exception) | ||||
|                     _events.send(Event.FailedFetchingLanguages) | ||||
|                 } | ||||
|                 .stateIn(presenterScope) | ||||
|                 .collectLatest(::collectLatestSourceLangMap) | ||||
|         } | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user