Add some code for drawer.

This commit is contained in:
Thomas Andres Gomez 2021-05-19 10:36:22 +02:00
parent 83098df743
commit 5053ac7360
7 changed files with 60 additions and 28 deletions

View file

@ -21,6 +21,7 @@ fun Image(
modifier: Modifier = Modifier,
contentModifier: Modifier = Modifier,
alignment: Alignment = Alignment.Center,
placeHolderScale: ContentScale = ContentScale.Fit,
contentScale: ContentScale = ContentScale.Fit,
alpha: Float = DefaultAlpha,
colorFilter: ColorFilter? = null
@ -34,7 +35,7 @@ fun Image(
contentDescription = contentDescription,
modifier = contentModifier,
alignment = alignment,
contentScale = contentScale,
contentScale = placeHolderScale,
alpha = alpha,
colorFilter = colorFilter,
)

View file

@ -18,7 +18,6 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.focusModifier
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
@ -73,6 +72,7 @@ fun DetailPageComposable(book: BookUio) {
.wrapContentHeight()
.padding(vertical = 16.dp)
.clip(RoundedCornerShape(16.dp)),
placeHolderScale = ContentScale.FillWidth,
contentScale = ContentScale.FillWidth,
placeHolder = painterResource(id = R.drawable.ic_launcher_foreground),
contentUrl = book.cover,

View file

@ -9,7 +9,7 @@ import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.rememberScrollState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.paging.compose.LazyPagingItems
@ -26,10 +26,17 @@ import com.pixelized.biblib.ui.viewmodel.navigation.INavigationViewModel.Navigab
fun HomePageComposable(
navigationViewModel: INavigationViewModel,
booksViewModel: IBooksViewModel,
page: Page?,
) {
var currentPage by remember { mutableStateOf<Page.Home?>(null) }
currentPage = page as? Page.Home ?: currentPage
// https://issuetracker.google.com/issues/177245496
val lazyBooks: LazyPagingItems<BookThumbnailUio> =
booksViewModel.news.collectAsLazyPagingItems()
val data: LazyPagingItems<BookThumbnailUio> = when(currentPage) {
is Page.Home.New -> booksViewModel.books.collectAsLazyPagingItems()
else -> booksViewModel.news.collectAsLazyPagingItems()
}
val lazyListState = rememberLazyListState()
val scrollableState = rememberScrollState()
@ -39,7 +46,7 @@ fun HomePageComposable(
verticalArrangement = Arrangement.spacedBy(8.dp),
state = lazyListState,
) {
items(lazyBooks) { thumbnail ->
items(data) { thumbnail ->
BookThumbnailComposable(
thumbnail = thumbnail!!,
modifier = Modifier

View file

@ -64,15 +64,12 @@ fun LoginScreenComposable(
authenticationViewModel: IAuthenticationViewModel = viewModel<AuthenticationViewModel>(),
bookViewModel: IBooksViewModel = viewModel<BooksViewModel>()
) {
// TODO:
LaunchedEffect("merde") {
authenticationViewModel.clearState()
}
Box(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
) {
Box(modifier = Modifier.fillMaxSize()) {
authenticationViewModel.PrepareLoginWithGoogle()
LoginScreenNavigationComposable(
navigationViewModel,
@ -91,8 +88,7 @@ private fun LoginScreenContentComposable(
) {
Column(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(16.dp)
) {

View file

@ -45,11 +45,12 @@ fun MainScreenComposable(
// coroutine
val coroutineScope = rememberCoroutineScope()
// scaffold & toolbar
val canNavigateBack = page !is Page.HomePage
val canNavigateBack = page !is Page.Home
val scaffoldState = rememberScaffoldState()
// TODO:
LaunchedEffect(key1 = "MainScreen", block = {
navigationViewModel.navigateTo(Page.HomePage, true)
navigationViewModel.navigateTo(Page.Home.New, true)
})
Scaffold(
@ -65,11 +66,30 @@ fun MainScreenComposable(
}
)
},
drawerContent = { DrawerContentComposable() }
drawerContent = {
DrawerContentComposable(
onNewClick = {
coroutineScope.launch { scaffoldState.drawerState.close() }
},
onBookClick = {
coroutineScope.launch { scaffoldState.drawerState.close() }
},
onSeriesClick = {
coroutineScope.launch { scaffoldState.drawerState.close() }
},
onAuthorClick = {
coroutineScope.launch { scaffoldState.drawerState.close() }
},
onTagClick = {
coroutineScope.launch { scaffoldState.drawerState.close() }
},
)
}
) {
HomePageComposable(
navigationViewModel = navigationViewModel,
booksViewModel = booksViewModel,
page = page,
)
AnimatedVisibility(
@ -138,7 +158,13 @@ fun NavigationIcon(
}
@Composable
fun DrawerContentComposable() {
fun DrawerContentComposable(
onNewClick: () -> Unit,
onBookClick: () -> Unit,
onSeriesClick: () -> Unit,
onAuthorClick: () -> Unit,
onTagClick: () -> Unit,
) {
val typography = MaterialTheme.typography
Column(
modifier = Modifier
@ -168,27 +194,27 @@ fun DrawerContentComposable() {
DrawerLink(
text = "Nouveautés",
imageVector = Icons.Default.NewReleases,
onClick = {},
onClick = onNewClick,
)
DrawerLink(
text = "Livres",
imageVector = Icons.Default.AutoStories,
onClick = {},
onClick = onBookClick,
)
DrawerLink(
text = "Séries",
imageVector = Icons.Default.AutoAwesomeMotion,
onClick = {},
onClick = onSeriesClick,
)
DrawerLink(
text = "Auteurs",
imageVector = Icons.Default.SupervisorAccount,
onClick = {},
onClick = onAuthorClick,
)
DrawerLink(
text = "Étiquettes",
imageVector = Icons.Default.LocalOffer,
onClick = {},
onClick = onTagClick,
)
Spacer(modifier = Modifier.weight(1f))
Text(
@ -252,7 +278,7 @@ fun ToolbarComposableLightPreview() {
fun MainScreenComposablePreview() {
BibLibTheme {
MainScreenComposable(
INavigationViewModel.Mock(page = Page.HomePage),
INavigationViewModel.Mock(page = Page.Home.New),
IBooksViewModel.Mock()
)
}

View file

@ -19,14 +19,17 @@ interface INavigationViewModel {
}
sealed class Page : Navigable() {
object HomePage : Page()
sealed class Home : Page() {
object New: Home()
object All: Home()
}
data class Detail(val bookId: Int) : Page()
}
}
class Mock(
screen: Navigable.Screen = Navigable.Screen.SplashScreen,
page: Navigable.Page = Navigable.Page.HomePage
page: Navigable.Page = Navigable.Page.Home.New
) : INavigationViewModel {
override val screen: LiveData<Navigable.Screen> = MutableLiveData(screen)
override val page: LiveData<Navigable.Page> = MutableLiveData(page)

View file

@ -11,7 +11,7 @@ import java.util.*
class NavigationViewModel : ViewModel(), INavigationViewModel {
private val stack = Stack<Navigable?>()
private val _screen = MutableLiveData<Screen>(Screen.SplashScreen)
private val _page = MutableLiveData<Page>(Page.HomePage)
private val _page = MutableLiveData<Page>()
override val screen: LiveData<Screen> get() = _screen
override val page: LiveData<Page> get() = _page
@ -49,8 +49,7 @@ class NavigationViewModel : ViewModel(), INavigationViewModel {
return if (stack.isEmpty()) {
null
} else {
stack.pop()
while (stack.isNotEmpty() && stack.peek() == null) stack.pop()
do stack.pop() while (stack.isNotEmpty() && stack.peek() == null)
return if (stack.isNotEmpty()) stack.peek() else null
}
}