From 5053ac7360f80ef045c0609aec8f2b2c129806ec Mon Sep 17 00:00:00 2001 From: Thomas Andres Gomez Date: Wed, 19 May 2021 10:36:22 +0200 Subject: [PATCH] Add some code for drawer. --- .../biblib/ui/composable/items/Image.kt | 3 +- .../composable/pages/DetailPageComposable.kt | 2 +- .../ui/composable/pages/HomePageComposable.kt | 15 ++++-- .../screen/LoginScreenComposable.kt | 10 ++-- .../composable/screen/MainScreenComposable.kt | 46 +++++++++++++++---- .../navigation/INavigationViewModel.kt | 7 ++- .../navigation/NavigationViewModel.kt | 5 +- 7 files changed, 60 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/items/Image.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/items/Image.kt index 0f24ff1..1bad7b8 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/composable/items/Image.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/items/Image.kt @@ -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, ) diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/pages/DetailPageComposable.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/pages/DetailPageComposable.kt index 9211806..7842237 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/composable/pages/DetailPageComposable.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/pages/DetailPageComposable.kt @@ -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, diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/pages/HomePageComposable.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/pages/HomePageComposable.kt index 6d3bd52..8966693 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/composable/pages/HomePageComposable.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/pages/HomePageComposable.kt @@ -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(null) } + currentPage = page as? Page.Home ?: currentPage + // https://issuetracker.google.com/issues/177245496 - val lazyBooks: LazyPagingItems = - booksViewModel.news.collectAsLazyPagingItems() + val data: LazyPagingItems = 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 diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/screen/LoginScreenComposable.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/screen/LoginScreenComposable.kt index caa6ebf..152ed26 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/composable/screen/LoginScreenComposable.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/screen/LoginScreenComposable.kt @@ -64,15 +64,12 @@ fun LoginScreenComposable( authenticationViewModel: IAuthenticationViewModel = viewModel(), bookViewModel: IBooksViewModel = viewModel() ) { + // 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) ) { diff --git a/app/src/main/java/com/pixelized/biblib/ui/composable/screen/MainScreenComposable.kt b/app/src/main/java/com/pixelized/biblib/ui/composable/screen/MainScreenComposable.kt index aa1a99b..0bf7a59 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/composable/screen/MainScreenComposable.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/composable/screen/MainScreenComposable.kt @@ -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() ) } diff --git a/app/src/main/java/com/pixelized/biblib/ui/viewmodel/navigation/INavigationViewModel.kt b/app/src/main/java/com/pixelized/biblib/ui/viewmodel/navigation/INavigationViewModel.kt index d5bf44b..15d3089 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/viewmodel/navigation/INavigationViewModel.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/viewmodel/navigation/INavigationViewModel.kt @@ -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 = MutableLiveData(screen) override val page: LiveData = MutableLiveData(page) diff --git a/app/src/main/java/com/pixelized/biblib/ui/viewmodel/navigation/NavigationViewModel.kt b/app/src/main/java/com/pixelized/biblib/ui/viewmodel/navigation/NavigationViewModel.kt index 8858ae9..c43430b 100644 --- a/app/src/main/java/com/pixelized/biblib/ui/viewmodel/navigation/NavigationViewModel.kt +++ b/app/src/main/java/com/pixelized/biblib/ui/viewmodel/navigation/NavigationViewModel.kt @@ -11,7 +11,7 @@ import java.util.* class NavigationViewModel : ViewModel(), INavigationViewModel { private val stack = Stack() private val _screen = MutableLiveData(Screen.SplashScreen) - private val _page = MutableLiveData(Page.HomePage) + private val _page = MutableLiveData() override val screen: LiveData get() = _screen override val page: LiveData 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 } }