Minor cleanup

Mostly just addressing comments from #8452
This commit is contained in:
arkon 2022-11-13 12:24:52 -05:00
parent 3407eb84c5
commit b1ccebf329
15 changed files with 102 additions and 127 deletions

View File

@ -62,7 +62,7 @@ fun SourceIcon(
} }
else -> { else -> {
Image( Image(
painter = painterResource(id = R.mipmap.ic_local_source), painter = painterResource(R.mipmap.ic_local_source),
contentDescription = null, contentDescription = null,
modifier = modifier.then(defaultModifier), modifier = modifier.then(defaultModifier),
) )

View File

@ -95,7 +95,7 @@ private fun NotDownloadedIndicator(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Icon( Icon(
painter = painterResource(id = R.drawable.ic_download_chapter_24dp), painter = painterResource(R.drawable.ic_download_chapter_24dp),
contentDescription = stringResource(R.string.manga_download), contentDescription = stringResource(R.string.manga_download),
modifier = Modifier.size(IndicatorSize), modifier = Modifier.size(IndicatorSize),
tint = MaterialTheme.colorScheme.onSurfaceVariant, tint = MaterialTheme.colorScheme.onSurfaceVariant,

View File

@ -0,0 +1,34 @@
package eu.kanade.presentation.components
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import eu.kanade.tachiyomi.data.track.TrackService
@Composable
fun TrackLogoIcon(
service: TrackService,
) {
Box(
modifier = Modifier
.size(48.dp)
.background(color = Color(service.getLogoColor()), shape = MaterialTheme.shapes.medium)
.padding(4.dp),
contentAlignment = Alignment.Center,
) {
Image(
painter = painterResource(service.getLogo()),
contentDescription = stringResource(service.nameRes()),
)
}
}

View File

@ -72,7 +72,7 @@ fun CrashScreen(
}, },
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
) { ) {
Text(text = stringResource(id = R.string.pref_dump_crash_logs)) Text(text = stringResource(R.string.pref_dump_crash_logs))
} }
OutlinedButton( OutlinedButton(
onClick = onRestartClick, onClick = onRestartClick,
@ -102,7 +102,7 @@ fun CrashScreen(
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge,
) )
Text( Text(
text = stringResource(R.string.crash_screen_description, stringResource(id = R.string.app_name)), text = stringResource(R.string.crash_screen_description, stringResource(R.string.app_name)),
modifier = Modifier modifier = Modifier
.padding(vertical = MaterialTheme.padding.small), .padding(vertical = MaterialTheme.padding.small),
) )

View File

@ -208,12 +208,12 @@ private fun SetAsDefaultDialog(
var optionalChecked by rememberSaveable { mutableStateOf(false) } var optionalChecked by rememberSaveable { mutableStateOf(false) }
AlertDialog( AlertDialog(
onDismissRequest = onDismissRequest, onDismissRequest = onDismissRequest,
title = { Text(text = stringResource(id = R.string.chapter_settings)) }, title = { Text(text = stringResource(R.string.chapter_settings)) },
text = { text = {
Column( Column(
verticalArrangement = Arrangement.spacedBy(12.dp), verticalArrangement = Arrangement.spacedBy(12.dp),
) { ) {
Text(text = stringResource(id = R.string.confirm_set_chapter_settings)) Text(text = stringResource(R.string.confirm_set_chapter_settings))
Row( Row(
modifier = Modifier modifier = Modifier
@ -227,13 +227,13 @@ private fun SetAsDefaultDialog(
checked = optionalChecked, checked = optionalChecked,
onCheckedChange = null, onCheckedChange = null,
) )
Text(text = stringResource(id = R.string.also_set_chapter_settings_for_library)) Text(text = stringResource(R.string.also_set_chapter_settings_for_library))
} }
} }
}, },
dismissButton = { dismissButton = {
TextButton(onClick = onDismissRequest) { TextButton(onClick = onDismissRequest) {
Text(text = stringResource(id = android.R.string.cancel)) Text(text = stringResource(android.R.string.cancel))
} }
}, },
confirmButton = { confirmButton = {
@ -242,7 +242,7 @@ private fun SetAsDefaultDialog(
onConfirmed(optionalChecked) onConfirmed(optionalChecked)
}, },
) { ) {
Text(text = stringResource(id = android.R.string.ok)) Text(text = stringResource(android.R.string.ok))
} }
}, },
) )
@ -257,7 +257,7 @@ private fun MoreMenu(
IconButton(onClick = { expanded = true }) { IconButton(onClick = { expanded = true }) {
Icon( Icon(
imageVector = Icons.Default.MoreVert, imageVector = Icons.Default.MoreVert,
contentDescription = stringResource(id = R.string.label_more), contentDescription = stringResource(R.string.label_more),
) )
} }
DropdownMenu( DropdownMenu(
@ -292,17 +292,17 @@ private fun FilterPage(
.verticalScroll(rememberScrollState()), .verticalScroll(rememberScrollState()),
) { ) {
FilterPageItem( FilterPageItem(
label = stringResource(id = R.string.action_filter_downloaded), label = stringResource(R.string.action_filter_downloaded),
state = downloadFilter, state = downloadFilter,
onClick = onDownloadFilterChanged, onClick = onDownloadFilterChanged,
) )
FilterPageItem( FilterPageItem(
label = stringResource(id = R.string.action_filter_unread), label = stringResource(R.string.action_filter_unread),
state = unreadFilter, state = unreadFilter,
onClick = onUnreadFilterChanged, onClick = onUnreadFilterChanged,
) )
FilterPageItem( FilterPageItem(
label = stringResource(id = R.string.action_filter_bookmarked), label = stringResource(R.string.action_filter_bookmarked),
state = bookmarkedFilter, state = bookmarkedFilter,
onClick = onBookmarkedFilterChanged, onClick = onBookmarkedFilterChanged,
) )
@ -372,17 +372,17 @@ private fun SortPage(
} }
SortPageItem( SortPageItem(
label = stringResource(id = R.string.sort_by_source), label = stringResource(R.string.sort_by_source),
statusIcon = arrowIcon.takeIf { sortingMode == Manga.CHAPTER_SORTING_SOURCE }, statusIcon = arrowIcon.takeIf { sortingMode == Manga.CHAPTER_SORTING_SOURCE },
onClick = { onItemSelected(Manga.CHAPTER_SORTING_SOURCE) }, onClick = { onItemSelected(Manga.CHAPTER_SORTING_SOURCE) },
) )
SortPageItem( SortPageItem(
label = stringResource(id = R.string.sort_by_number), label = stringResource(R.string.sort_by_number),
statusIcon = arrowIcon.takeIf { sortingMode == Manga.CHAPTER_SORTING_NUMBER }, statusIcon = arrowIcon.takeIf { sortingMode == Manga.CHAPTER_SORTING_NUMBER },
onClick = { onItemSelected(Manga.CHAPTER_SORTING_NUMBER) }, onClick = { onItemSelected(Manga.CHAPTER_SORTING_NUMBER) },
) )
SortPageItem( SortPageItem(
label = stringResource(id = R.string.sort_by_upload_date), label = stringResource(R.string.sort_by_upload_date),
statusIcon = arrowIcon.takeIf { sortingMode == Manga.CHAPTER_SORTING_UPLOAD_DATE }, statusIcon = arrowIcon.takeIf { sortingMode == Manga.CHAPTER_SORTING_UPLOAD_DATE },
onClick = { onItemSelected(Manga.CHAPTER_SORTING_UPLOAD_DATE) }, onClick = { onItemSelected(Manga.CHAPTER_SORTING_UPLOAD_DATE) },
) )
@ -432,12 +432,12 @@ private fun DisplayPage(
.verticalScroll(rememberScrollState()), .verticalScroll(rememberScrollState()),
) { ) {
DisplayPageItem( DisplayPageItem(
label = stringResource(id = R.string.show_title), label = stringResource(R.string.show_title),
selected = displayMode == Manga.CHAPTER_DISPLAY_NAME, selected = displayMode == Manga.CHAPTER_DISPLAY_NAME,
onClick = { onItemSelected(Manga.CHAPTER_DISPLAY_NAME) }, onClick = { onItemSelected(Manga.CHAPTER_DISPLAY_NAME) },
) )
DisplayPageItem( DisplayPageItem(
label = stringResource(id = R.string.show_chapter_number), label = stringResource(R.string.show_chapter_number),
selected = displayMode == Manga.CHAPTER_DISPLAY_NUMBER, selected = displayMode == Manga.CHAPTER_DISPLAY_NUMBER,
onClick = { onItemSelected(Manga.CHAPTER_DISPLAY_NUMBER) }, onClick = { onItemSelected(Manga.CHAPTER_DISPLAY_NUMBER) },
) )

View File

@ -1,9 +1,6 @@
package eu.kanade.presentation.manga package eu.kanade.presentation.manga
import androidx.annotation.ColorInt
import androidx.annotation.DrawableRes
import androidx.compose.animation.animateContentSize import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@ -15,15 +12,12 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.filled.OpenInBrowser
import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@ -39,15 +33,15 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import eu.kanade.presentation.components.Divider import eu.kanade.presentation.components.Divider
import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.components.DropdownMenu
import eu.kanade.presentation.components.TrackLogoIcon
import eu.kanade.presentation.components.VerticalDivider import eu.kanade.presentation.components.VerticalDivider
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.track.TrackService
import eu.kanade.tachiyomi.ui.manga.track.TrackItem import eu.kanade.tachiyomi.ui.manga.track.TrackItem
import java.text.DateFormat import java.text.DateFormat
@ -82,8 +76,7 @@ fun TrackInfoDialogHome(
val supportsReadingDates = item.service.supportsReadingDates val supportsReadingDates = item.service.supportsReadingDates
TrackInfoItem( TrackInfoItem(
title = item.track.title, title = item.track.title,
logoRes = item.service.getLogo(), service = item.service,
logoColor = item.service.getLogoColor(),
status = item.service.getStatus(item.track.status), status = item.service.getStatus(item.track.status),
onStatusClick = { onStatusClick(item) }, onStatusClick = { onStatusClick(item) },
chapters = "${item.track.last_chapter_read.toInt()}".let { chapters = "${item.track.last_chapter_read.toInt()}".let {
@ -114,8 +107,7 @@ fun TrackInfoDialogHome(
) )
} else { } else {
TrackInfoItemEmpty( TrackInfoItemEmpty(
logoRes = item.service.getLogo(), service = item.service,
logoColor = item.service.getLogoColor(),
onNewSearch = { onNewSearch(item) }, onNewSearch = { onNewSearch(item) },
) )
} }
@ -126,8 +118,7 @@ fun TrackInfoDialogHome(
@Composable @Composable
private fun TrackInfoItem( private fun TrackInfoItem(
title: String, title: String,
@DrawableRes logoRes: Int, service: TrackService,
@ColorInt logoColor: Int,
status: String, status: String,
onStatusClick: () -> Unit, onStatusClick: () -> Unit,
chapters: String, chapters: String,
@ -146,20 +137,7 @@ private fun TrackInfoItem(
Row( Row(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Box( TrackLogoIcon(service)
modifier = Modifier
.clip(RoundedCornerShape(12.dp))
.clickable(onClick = onOpenInBrowser)
.size(48.dp)
.background(color = Color(logoColor))
.padding(4.dp),
contentAlignment = Alignment.Center,
) {
Image(
painter = painterResource(id = logoRes),
contentDescription = null,
)
}
Box( Box(
modifier = Modifier modifier = Modifier
.height(48.dp) .height(48.dp)
@ -185,7 +163,7 @@ private fun TrackInfoItem(
Box( Box(
modifier = Modifier modifier = Modifier
.padding(top = 12.dp) .padding(top = 12.dp)
.clip(RoundedCornerShape(12.dp)) .clip(MaterialTheme.shapes.medium)
.background(MaterialTheme.colorScheme.surface) .background(MaterialTheme.colorScheme.surface)
.padding(8.dp) .padding(8.dp)
.clip(RoundedCornerShape(6.dp)), .clip(RoundedCornerShape(6.dp)),
@ -209,7 +187,7 @@ private fun TrackInfoItem(
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
.alpha(if (score == null) UnsetStatusTextAlpha else 1f), .alpha(if (score == null) UnsetStatusTextAlpha else 1f),
text = score ?: stringResource(id = R.string.score), text = score ?: stringResource(R.string.score),
onClick = onScoreClick, onClick = onScoreClick,
) )
} }
@ -219,18 +197,16 @@ private fun TrackInfoItem(
Divider() Divider()
Row(modifier = Modifier.height(IntrinsicSize.Min)) { Row(modifier = Modifier.height(IntrinsicSize.Min)) {
TrackDetailsItem( TrackDetailsItem(
modifier = Modifier modifier = Modifier.weight(1F),
.weight(1F) text = startDate,
.alpha(if (startDate == null) UnsetStatusTextAlpha else 1f), placeholder = stringResource(R.string.track_started_reading_date),
text = startDate ?: stringResource(id = R.string.track_started_reading_date),
onClick = onStartDateClick, onClick = onStartDateClick,
) )
VerticalDivider() VerticalDivider()
TrackDetailsItem( TrackDetailsItem(
modifier = Modifier modifier = Modifier.weight(1F),
.weight(1F) text = endDate,
.alpha(if (endDate == null) UnsetStatusTextAlpha else 1f), placeholder = stringResource(R.string.track_finished_reading_date),
text = endDate ?: stringResource(id = R.string.track_finished_reading_date),
onClick = onEndDateClick, onClick = onEndDateClick,
) )
} }
@ -243,17 +219,19 @@ private fun TrackInfoItem(
@Composable @Composable
private fun TrackDetailsItem( private fun TrackDetailsItem(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
text: String, text: String?,
placeholder: String = "",
onClick: () -> Unit, onClick: () -> Unit,
) { ) {
Box( Box(
modifier = modifier modifier = modifier
.clickable(onClick = onClick) .clickable(onClick = onClick)
.alpha(if (text == null) UnsetStatusTextAlpha else 1f)
.padding(12.dp), .padding(12.dp),
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Text( Text(
text = text, text = text ?: placeholder,
maxLines = 1, maxLines = 1,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
) )
@ -262,33 +240,20 @@ private fun TrackDetailsItem(
@Composable @Composable
private fun TrackInfoItemEmpty( private fun TrackInfoItemEmpty(
@DrawableRes logoRes: Int, service: TrackService,
@ColorInt logoColor: Int,
onNewSearch: () -> Unit, onNewSearch: () -> Unit,
) { ) {
Row( Row(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Box( TrackLogoIcon(service)
modifier = Modifier
.clip(RoundedCornerShape(12.dp))
.size(48.dp)
.background(color = Color(logoColor))
.padding(4.dp),
contentAlignment = Alignment.Center,
) {
Image(
painter = painterResource(id = logoRes),
contentDescription = null,
)
}
TextButton( TextButton(
onClick = onNewSearch, onClick = onNewSearch,
modifier = Modifier modifier = Modifier
.padding(start = 16.dp) .padding(start = 16.dp)
.weight(1f), .weight(1f),
) { ) {
Text(text = stringResource(id = R.string.add_tracking)) Text(text = stringResource(R.string.add_tracking))
} }
} }
} }
@ -303,7 +268,7 @@ private fun TrackInfoItemMenu(
IconButton(onClick = { expanded = true }) { IconButton(onClick = { expanded = true }) {
Icon( Icon(
imageVector = Icons.Default.MoreVert, imageVector = Icons.Default.MoreVert,
contentDescription = stringResource(id = R.string.label_more), contentDescription = stringResource(R.string.label_more),
) )
} }
DropdownMenu( DropdownMenu(
@ -312,9 +277,6 @@ private fun TrackInfoItemMenu(
) { ) {
DropdownMenuItem( DropdownMenuItem(
text = { Text(stringResource(R.string.action_open_in_browser)) }, text = { Text(stringResource(R.string.action_open_in_browser)) },
leadingIcon = {
Icon(imageVector = Icons.Default.OpenInBrowser, contentDescription = null)
},
onClick = { onClick = {
onOpenInBrowser() onOpenInBrowser()
expanded = false expanded = false
@ -322,9 +284,6 @@ private fun TrackInfoItemMenu(
) )
DropdownMenuItem( DropdownMenuItem(
text = { Text(stringResource(R.string.action_remove)) }, text = { Text(stringResource(R.string.action_remove)) },
leadingIcon = {
Icon(imageVector = Icons.Default.Delete, contentDescription = null)
},
onClick = { onClick = {
onRemoved() onRemoved()
expanded = false expanded = false

View File

@ -50,7 +50,7 @@ fun TrackStatusSelector(
) { ) {
BaseSelector( BaseSelector(
contentPadding = contentPadding, contentPadding = contentPadding,
title = stringResource(id = R.string.status), title = stringResource(R.string.status),
content = { content = {
val state = rememberLazyListState() val state = rememberLazyListState()
ScrollbarLazyColumn(state = state) { ScrollbarLazyColumn(state = state) {
@ -100,7 +100,7 @@ fun TrackChapterSelector(
) { ) {
BaseSelector( BaseSelector(
contentPadding = contentPadding, contentPadding = contentPadding,
title = stringResource(id = R.string.chapters), title = stringResource(R.string.chapters),
content = { content = {
WheelTextPicker( WheelTextPicker(
modifier = Modifier.align(Alignment.Center), modifier = Modifier.align(Alignment.Center),
@ -128,7 +128,7 @@ fun TrackScoreSelector(
) { ) {
BaseSelector( BaseSelector(
contentPadding = contentPadding, contentPadding = contentPadding,
title = stringResource(id = R.string.score), title = stringResource(R.string.score),
content = { content = {
WheelTextPicker( WheelTextPicker(
modifier = Modifier.align(Alignment.Center), modifier = Modifier.align(Alignment.Center),
@ -185,7 +185,7 @@ fun TrackDateSelector(
thirdButton = if (onRemove != null) { thirdButton = if (onRemove != null) {
{ {
TextButton(onClick = onRemove) { TextButton(onClick = onRemove) {
Text(text = stringResource(id = R.string.action_remove)) Text(text = stringResource(R.string.action_remove))
} }
} }
} else { } else {
@ -224,10 +224,10 @@ private fun BaseSelector(
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
} }
TextButton(onClick = onDismissRequest) { TextButton(onClick = onDismissRequest) {
Text(text = stringResource(id = android.R.string.cancel)) Text(text = stringResource(android.R.string.cancel))
} }
TextButton(onClick = onConfirm) { TextButton(onClick = onConfirm) {
Text(text = stringResource(id = android.R.string.ok)) Text(text = stringResource(android.R.string.ok))
} }
} }
}, },

View File

@ -165,7 +165,7 @@ fun TrackServiceSearch(
.fillMaxWidth(), .fillMaxWidth(),
elevation = ButtonDefaults.elevatedButtonElevation(), elevation = ButtonDefaults.elevatedButtonElevation(),
) { ) {
Text(text = stringResource(id = R.string.action_track)) Text(text = stringResource(R.string.action_track))
} }
} }
}, },
@ -206,7 +206,7 @@ fun TrackServiceSearch(
EmptyScreen( EmptyScreen(
modifier = Modifier.padding(innerPadding), modifier = Modifier.padding(innerPadding),
message = queryResult.exceptionOrNull()?.message message = queryResult.exceptionOrNull()?.message
?: stringResource(id = R.string.unknown_error), ?: stringResource(R.string.unknown_error),
) )
} }
} }
@ -264,19 +264,19 @@ private fun SearchResultItem(
) )
if (type.isNotBlank()) { if (type.isNotBlank()) {
SearchResultItemDetails( SearchResultItemDetails(
title = stringResource(id = R.string.track_type), title = stringResource(R.string.track_type),
text = type, text = type,
) )
} }
if (startDate.isNotBlank()) { if (startDate.isNotBlank()) {
SearchResultItemDetails( SearchResultItemDetails(
title = stringResource(id = R.string.track_start_date), title = stringResource(R.string.track_start_date),
text = startDate, text = startDate,
) )
} }
if (status.isNotBlank()) { if (status.isNotBlank()) {
SearchResultItemDetails( SearchResultItemDetails(
title = stringResource(id = R.string.track_status), title = stringResource(R.string.track_status),
text = status, text = status,
) )
} }

View File

@ -156,9 +156,7 @@ internal fun PreferenceItem(
.collectAsState() .collectAsState()
item.service.run { item.service.run {
TrackingPreferenceWidget( TrackingPreferenceWidget(
title = item.title, service = this,
logoRes = getLogo(),
logoColor = getLogoColor(),
checked = uName.isNotEmpty(), checked = uName.isNotEmpty(),
onClick = { if (isLogged) item.logout() else item.login() }, onClick = { if (isLogged) item.logout() else item.login() },
) )

View File

@ -96,7 +96,7 @@ sealed class Preference {
v.map { e[it] } v.map { e[it] }
.takeIf { it.isNotEmpty() } .takeIf { it.isNotEmpty() }
?.joinToString() ?.joinToString()
} ?: stringResource(id = R.string.none) } ?: stringResource(R.string.none)
subtitle?.format(combined) subtitle?.format(combined)
}, },
override val icon: ImageVector? = null, override val icon: ImageVector? = null,

View File

@ -23,7 +23,7 @@ fun PreferenceScaffold(
Scaffold( Scaffold(
topBar = { topBar = {
TopAppBar( TopAppBar(
title = { Text(text = stringResource(id = titleRes)) }, title = { Text(text = stringResource(titleRes)) },
navigationIcon = { navigationIcon = {
if (onBackPressed != null) { if (onBackPressed != null) {
IconButton(onClick = onBackPressed) { IconButton(onClick = onBackPressed) {

View File

@ -52,7 +52,7 @@ internal fun InfoWidget(text: String) {
private fun InfoWidgetPreview() { private fun InfoWidgetPreview() {
TachiyomiTheme { TachiyomiTheme {
Surface { Surface {
InfoWidget(text = stringResource(id = R.string.download_ahead_info)) InfoWidget(text = stringResource(R.string.download_ahead_info))
} }
} }
} }

View File

@ -1,9 +1,5 @@
package eu.kanade.presentation.more.settings.widget package eu.kanade.presentation.more.settings.widget
import androidx.annotation.ColorInt
import androidx.annotation.DrawableRes
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@ -19,18 +15,17 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import eu.kanade.presentation.components.TrackLogoIcon
import eu.kanade.presentation.more.settings.LocalPreferenceHighlighted import eu.kanade.presentation.more.settings.LocalPreferenceHighlighted
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.track.TrackService
@Composable @Composable
fun TrackingPreferenceWidget( fun TrackingPreferenceWidget(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
title: String, service: TrackService,
@DrawableRes logoRes: Int,
@ColorInt logoColor: Int,
checked: Boolean, checked: Boolean,
onClick: (() -> Unit)? = null, onClick: (() -> Unit)? = null,
) { ) {
@ -43,20 +38,9 @@ fun TrackingPreferenceWidget(
.padding(horizontal = PrefsHorizontalPadding, vertical = 8.dp), .padding(horizontal = PrefsHorizontalPadding, vertical = 8.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
) { ) {
Box( TrackLogoIcon(service)
modifier = Modifier
.size(48.dp)
.background(color = Color(logoColor), shape = MaterialTheme.shapes.small)
.padding(4.dp),
contentAlignment = Alignment.Center,
) {
Image(
painter = painterResource(id = logoRes),
contentDescription = null,
)
}
Text( Text(
text = title, text = stringResource(service.nameRes()),
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
.padding(horizontal = 16.dp), .padding(horizontal = 16.dp),

View File

@ -244,7 +244,7 @@ class LocalSource(
val comicInfo = AndroidXmlReader(stream, StandardCharsets.UTF_8.name()).use { val comicInfo = AndroidXmlReader(stream, StandardCharsets.UTF_8.name()).use {
xml.decodeFromReader<ComicInfo>(it) xml.decodeFromReader<ComicInfo>(it)
} }
manga.copyFromComicInfo(comicInfo) manga.copyFromComicInfo(comicInfo)
} }

View File

@ -427,9 +427,9 @@ private data class TrackDateSelectorScreen(
TrackDateSelector( TrackDateSelector(
contentPadding = LocalNavigatorContentPadding.current, contentPadding = LocalNavigatorContentPadding.current,
title = if (start) { title = if (start) {
stringResource(id = R.string.track_started_reading_date) stringResource(R.string.track_started_reading_date)
} else { } else {
stringResource(id = R.string.track_finished_reading_date) stringResource(R.string.track_finished_reading_date)
}, },
selection = state.selection, selection = state.selection,
onSelectionChange = sm::setSelection, onSelectionChange = sm::setSelection,
@ -509,7 +509,7 @@ private data class TrackDateRemoverScreen(
}, },
title = { title = {
Text( Text(
text = stringResource(id = R.string.track_remove_date_conf_title), text = stringResource(R.string.track_remove_date_conf_title),
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
) )
}, },
@ -517,9 +517,9 @@ private data class TrackDateRemoverScreen(
val serviceName = stringResource(sm.getServiceNameRes()) val serviceName = stringResource(sm.getServiceNameRes())
Text( Text(
text = if (start) { text = if (start) {
stringResource(id = R.string.track_remove_start_date_conf_text, serviceName) stringResource(R.string.track_remove_start_date_conf_text, serviceName)
} else { } else {
stringResource(id = R.string.track_remove_finish_date_conf_text, serviceName) stringResource(R.string.track_remove_finish_date_conf_text, serviceName)
}, },
) )
}, },
@ -529,7 +529,7 @@ private data class TrackDateRemoverScreen(
horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.End), horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.End),
) { ) {
TextButton(onClick = navigator::pop) { TextButton(onClick = navigator::pop) {
Text(text = stringResource(id = android.R.string.cancel)) Text(text = stringResource(android.R.string.cancel))
} }
FilledTonalButton( FilledTonalButton(
onClick = { sm.removeDate(); navigator.popUntilRoot() }, onClick = { sm.removeDate(); navigator.popUntilRoot() },
@ -538,7 +538,7 @@ private data class TrackDateRemoverScreen(
contentColor = MaterialTheme.colorScheme.onErrorContainer, contentColor = MaterialTheme.colorScheme.onErrorContainer,
), ),
) { ) {
Text(text = stringResource(id = R.string.action_remove)) Text(text = stringResource(R.string.action_remove))
} }
} }
}, },