2022-04-27 20:36:16 +08:00
|
|
|
package eu.kanade.presentation.source
|
|
|
|
|
|
|
|
import androidx.compose.foundation.layout.WindowInsets
|
|
|
|
import androidx.compose.foundation.layout.asPaddingValues
|
|
|
|
import androidx.compose.foundation.layout.navigationBars
|
|
|
|
import androidx.compose.foundation.layout.padding
|
|
|
|
import androidx.compose.foundation.lazy.LazyColumn
|
|
|
|
import androidx.compose.foundation.lazy.items
|
|
|
|
import androidx.compose.material3.MaterialTheme
|
|
|
|
import androidx.compose.material3.Text
|
|
|
|
import androidx.compose.runtime.Composable
|
|
|
|
import androidx.compose.runtime.collectAsState
|
|
|
|
import androidx.compose.runtime.getValue
|
|
|
|
import androidx.compose.ui.Modifier
|
|
|
|
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
|
|
|
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
|
|
|
import androidx.compose.ui.res.stringResource
|
|
|
|
import androidx.compose.ui.unit.dp
|
|
|
|
import eu.kanade.domain.source.model.Source
|
|
|
|
import eu.kanade.presentation.components.EmptyScreen
|
2022-05-01 23:36:55 +08:00
|
|
|
import eu.kanade.presentation.components.ItemBadges
|
2022-04-27 20:36:16 +08:00
|
|
|
import eu.kanade.presentation.components.LoadingScreen
|
|
|
|
import eu.kanade.presentation.source.components.BaseSourceItem
|
|
|
|
import eu.kanade.presentation.theme.header
|
|
|
|
import eu.kanade.presentation.util.horizontalPadding
|
|
|
|
import eu.kanade.tachiyomi.R
|
2022-05-02 10:35:34 +08:00
|
|
|
import eu.kanade.tachiyomi.ui.browse.migration.sources.MigrateSourceState
|
2022-04-27 20:36:16 +08:00
|
|
|
import eu.kanade.tachiyomi.ui.browse.migration.sources.MigrationSourcesPresenter
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
fun MigrateSourceScreen(
|
|
|
|
nestedScrollInterop: NestedScrollConnection,
|
|
|
|
presenter: MigrationSourcesPresenter,
|
|
|
|
onClickItem: (Source) -> Unit,
|
|
|
|
onLongClickItem: (Source) -> Unit,
|
|
|
|
) {
|
|
|
|
val state by presenter.state.collectAsState()
|
2022-05-02 10:35:34 +08:00
|
|
|
when (state) {
|
|
|
|
is MigrateSourceState.Loading -> LoadingScreen()
|
|
|
|
is MigrateSourceState.Error -> Text(text = (state as MigrateSourceState.Error).error.message!!)
|
|
|
|
is MigrateSourceState.Success ->
|
2022-04-27 20:36:16 +08:00
|
|
|
MigrateSourceList(
|
|
|
|
nestedScrollInterop = nestedScrollInterop,
|
2022-05-02 10:35:34 +08:00
|
|
|
list = (state as MigrateSourceState.Success).sources,
|
2022-04-27 20:36:16 +08:00
|
|
|
onClickItem = onClickItem,
|
|
|
|
onLongClickItem = onLongClickItem,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
fun MigrateSourceList(
|
|
|
|
nestedScrollInterop: NestedScrollConnection,
|
|
|
|
list: List<Pair<Source, Long>>,
|
|
|
|
onClickItem: (Source) -> Unit,
|
|
|
|
onLongClickItem: (Source) -> Unit,
|
|
|
|
) {
|
2022-05-02 10:35:34 +08:00
|
|
|
if (list.isEmpty()) {
|
|
|
|
EmptyScreen(textResource = R.string.information_empty_library)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2022-04-27 20:36:16 +08:00
|
|
|
LazyColumn(
|
|
|
|
modifier = Modifier.nestedScroll(nestedScrollInterop),
|
|
|
|
contentPadding = WindowInsets.navigationBars.asPaddingValues(),
|
|
|
|
) {
|
|
|
|
item(key = "title") {
|
|
|
|
Text(
|
|
|
|
text = stringResource(id = R.string.migration_selection_prompt),
|
|
|
|
modifier = Modifier
|
|
|
|
.animateItemPlacement()
|
|
|
|
.padding(horizontal = horizontalPadding, vertical = 8.dp),
|
2022-05-11 05:54:52 +08:00
|
|
|
style = MaterialTheme.typography.header,
|
2022-04-27 20:36:16 +08:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
items(
|
|
|
|
items = list,
|
|
|
|
key = { (source, _) ->
|
|
|
|
source.id
|
2022-05-11 05:54:52 +08:00
|
|
|
},
|
2022-04-27 20:36:16 +08:00
|
|
|
) { (source, count) ->
|
|
|
|
MigrateSourceItem(
|
|
|
|
modifier = Modifier.animateItemPlacement(),
|
|
|
|
source = source,
|
|
|
|
count = count,
|
|
|
|
onClickItem = { onClickItem(source) },
|
2022-05-11 05:54:52 +08:00
|
|
|
onLongClickItem = { onLongClickItem(source) },
|
2022-04-27 20:36:16 +08:00
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
fun MigrateSourceItem(
|
|
|
|
modifier: Modifier = Modifier,
|
|
|
|
source: Source,
|
|
|
|
count: Long,
|
|
|
|
onClickItem: () -> Unit,
|
|
|
|
onLongClickItem: () -> Unit,
|
|
|
|
) {
|
|
|
|
BaseSourceItem(
|
|
|
|
modifier = modifier,
|
|
|
|
source = source,
|
2022-04-30 20:33:00 +08:00
|
|
|
showLanguageInContent = source.lang != "",
|
2022-04-27 20:36:16 +08:00
|
|
|
onClickItem = onClickItem,
|
|
|
|
onLongClickItem = onLongClickItem,
|
2022-05-01 23:36:55 +08:00
|
|
|
action = { ItemBadges(primaryText = "$count") },
|
2022-04-27 20:36:16 +08:00
|
|
|
)
|
|
|
|
}
|