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

View file

@ -18,7 +18,6 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.focusModifier
import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
@ -73,6 +72,7 @@ fun DetailPageComposable(book: BookUio) {
.wrapContentHeight() .wrapContentHeight()
.padding(vertical = 16.dp) .padding(vertical = 16.dp)
.clip(RoundedCornerShape(16.dp)), .clip(RoundedCornerShape(16.dp)),
placeHolderScale = ContentScale.FillWidth,
contentScale = ContentScale.FillWidth, contentScale = ContentScale.FillWidth,
placeHolder = painterResource(id = R.drawable.ic_launcher_foreground), placeHolder = painterResource(id = R.drawable.ic_launcher_foreground),
contentUrl = book.cover, 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.LazyColumn
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.runtime.Composable import androidx.compose.runtime.*
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.LazyPagingItems
@ -26,10 +26,17 @@ import com.pixelized.biblib.ui.viewmodel.navigation.INavigationViewModel.Navigab
fun HomePageComposable( fun HomePageComposable(
navigationViewModel: INavigationViewModel, navigationViewModel: INavigationViewModel,
booksViewModel: IBooksViewModel, booksViewModel: IBooksViewModel,
page: Page?,
) { ) {
var currentPage by remember { mutableStateOf<Page.Home?>(null) }
currentPage = page as? Page.Home ?: currentPage
// https://issuetracker.google.com/issues/177245496 // https://issuetracker.google.com/issues/177245496
val lazyBooks: LazyPagingItems<BookThumbnailUio> = val data: LazyPagingItems<BookThumbnailUio> = when(currentPage) {
booksViewModel.news.collectAsLazyPagingItems() is Page.Home.New -> booksViewModel.books.collectAsLazyPagingItems()
else -> booksViewModel.news.collectAsLazyPagingItems()
}
val lazyListState = rememberLazyListState() val lazyListState = rememberLazyListState()
val scrollableState = rememberScrollState() val scrollableState = rememberScrollState()
@ -39,7 +46,7 @@ fun HomePageComposable(
verticalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp),
state = lazyListState, state = lazyListState,
) { ) {
items(lazyBooks) { thumbnail -> items(data) { thumbnail ->
BookThumbnailComposable( BookThumbnailComposable(
thumbnail = thumbnail!!, thumbnail = thumbnail!!,
modifier = Modifier modifier = Modifier

View file

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

View file

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

View file

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

View file

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