mirror of https://github.com/Ashinch/ReadYou.git
108 lines
4.3 KiB
Kotlin
108 lines
4.3 KiB
Kotlin
package me.ash.reader.ui.page.settings.accounts
|
|
|
|
import androidx.compose.animation.ExperimentalAnimationApi
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.foundation.lazy.LazyColumn
|
|
import androidx.compose.material.icons.Icons
|
|
import androidx.compose.material.icons.outlined.PersonAdd
|
|
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.graphics.painter.Painter
|
|
import androidx.compose.ui.graphics.vector.ImageVector
|
|
import androidx.compose.ui.platform.LocalContext
|
|
import androidx.compose.ui.res.stringResource
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.hilt.navigation.compose.hiltViewModel
|
|
import androidx.navigation.NavHostController
|
|
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
|
|
import me.ash.reader.R
|
|
import me.ash.reader.ui.component.base.*
|
|
import me.ash.reader.ui.ext.collectAsStateValue
|
|
import me.ash.reader.ui.page.common.RouteName
|
|
import me.ash.reader.ui.page.settings.SettingItem
|
|
import me.ash.reader.ui.theme.palette.onLight
|
|
|
|
@OptIn(ExperimentalAnimationApi::class)
|
|
@Composable
|
|
fun AccountsPage(
|
|
navController: NavHostController = rememberAnimatedNavController(),
|
|
viewModel: AccountViewModel = hiltViewModel(),
|
|
) {
|
|
val context = LocalContext.current
|
|
val uiState = viewModel.accountUiState.collectAsStateValue()
|
|
val accounts = viewModel.accounts.collectAsStateValue(initial = emptyList())
|
|
|
|
RYScaffold(
|
|
containerColor = MaterialTheme.colorScheme.surface onLight MaterialTheme.colorScheme.inverseOnSurface,
|
|
navigationIcon = {
|
|
FeedbackIconButton(
|
|
imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
|
|
contentDescription = stringResource(R.string.back),
|
|
tint = MaterialTheme.colorScheme.onSurface
|
|
) {
|
|
navController.popBackStack()
|
|
}
|
|
},
|
|
content = {
|
|
LazyColumn {
|
|
item {
|
|
DisplayText(text = stringResource(R.string.accounts), desc = "")
|
|
Spacer(modifier = Modifier.height(16.dp))
|
|
Subtitle(
|
|
modifier = Modifier.padding(horizontal = 24.dp),
|
|
text = stringResource(R.string.list),
|
|
)
|
|
}
|
|
accounts.forEach {
|
|
item {
|
|
SettingItem(
|
|
title = it.name,
|
|
desc = it.type.toDesc(context),
|
|
icon = it.type.toIcon().takeIf { it is ImageVector }?.let { it as ImageVector },
|
|
iconPainter = it.type.toIcon().takeIf { it is Painter }?.let { it as Painter },
|
|
onClick = {
|
|
navController.navigate("${RouteName.ACCOUNT_DETAILS}/${it.id}") {
|
|
launchSingleTop = true
|
|
}
|
|
},
|
|
) {}
|
|
}
|
|
}
|
|
item {
|
|
Tips(text = stringResource(R.string.accounts_tips))
|
|
Spacer(modifier = Modifier.height(24.dp))
|
|
}
|
|
item {
|
|
Subtitle(
|
|
modifier = Modifier.padding(horizontal = 24.dp),
|
|
text = stringResource(R.string.more),
|
|
)
|
|
SettingItem(
|
|
title = stringResource(R.string.add_accounts),
|
|
desc = stringResource(R.string.add_accounts_desc),
|
|
icon = Icons.Outlined.PersonAdd,
|
|
onClick = {
|
|
navController.navigate(RouteName.ADD_ACCOUNTS) {
|
|
launchSingleTop = true
|
|
}
|
|
},
|
|
) {}
|
|
}
|
|
item {
|
|
Spacer(modifier = Modifier.height(24.dp))
|
|
Spacer(modifier = Modifier.windowInsetsBottomHeight(WindowInsets.navigationBars))
|
|
}
|
|
}
|
|
}
|
|
)
|
|
}
|
|
|
|
@Preview
|
|
@Composable
|
|
fun AccountsPreview() {
|
|
AccountsPage()
|
|
}
|