Add a poorly done bottomsheet mail selector on the detail page.
This commit is contained in:
parent
6254ec4f02
commit
38c67504b2
5 changed files with 97 additions and 24 deletions
|
|
@ -1,4 +1,4 @@
|
|||
package com.pixelized.biblib.ui.composable.items
|
||||
package com.pixelized.biblib.ui.composable.common
|
||||
|
||||
import androidx.compose.animation.Crossfade
|
||||
import androidx.compose.runtime.*
|
||||
|
|
@ -10,11 +10,9 @@ import androidx.compose.ui.graphics.asImageBitmap
|
|||
import androidx.compose.ui.graphics.painter.BitmapPainter
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import com.pixelized.biblib.ui.theme.Animation
|
||||
import com.pixelized.biblib.utils.BitmapCache
|
||||
import com.pixelized.biblib.utils.injection.get
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import java.net.URL
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import androidx.compose.ui.tooling.preview.Preview
|
|||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.pixelized.biblib.R
|
||||
import com.pixelized.biblib.ui.composable.common.Image
|
||||
import com.pixelized.biblib.ui.data.BookThumbnailUio
|
||||
import com.pixelized.biblib.ui.theme.BibLibTheme
|
||||
import com.pixelized.biblib.ui.theme.Teal200
|
||||
|
|
|
|||
|
|
@ -2,9 +2,12 @@ package com.pixelized.biblib.ui.composable.pages
|
|||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.animation.animateContentSize
|
||||
import androidx.compose.animation.core.MutableTransitionState
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.animation.slideInVertically
|
||||
import androidx.compose.animation.slideOutVertically
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
|
|
@ -34,8 +37,10 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.pixelized.biblib.R
|
||||
import com.pixelized.biblib.ui.composable.common.HtmlText
|
||||
import com.pixelized.biblib.ui.composable.items.Image
|
||||
import com.pixelized.biblib.ui.composable.common.Image
|
||||
import com.pixelized.biblib.ui.data.BookUio
|
||||
import com.pixelized.biblib.ui.data.MailUio
|
||||
import com.pixelized.biblib.ui.theme.Animation
|
||||
import com.pixelized.biblib.ui.theme.BibLibTheme
|
||||
import com.pixelized.biblib.ui.theme.Teal200
|
||||
import com.pixelized.biblib.ui.viewmodel.book.BooksViewModel
|
||||
|
|
@ -48,6 +53,7 @@ import com.pixelized.biblib.utils.mock.BookMock
|
|||
|
||||
|
||||
@Composable
|
||||
@OptIn(ExperimentalAnimationApi::class)
|
||||
fun DetailPage(
|
||||
booksViewModel: IBooksViewModel = viewModel<BooksViewModel>(),
|
||||
userViewModel: IUserViewModel = viewModel<UserViewModel>(),
|
||||
|
|
@ -59,8 +65,11 @@ fun DetailPage(
|
|||
.fillMaxHeight(),
|
||||
elevation = 4.dp
|
||||
) {
|
||||
val bottomSheetVisibility = remember { MutableTransitionState(false) }
|
||||
|
||||
val book by booksViewModel.getBookDetail(bookId).observeAsState()
|
||||
val user by userViewModel.user.observeAsState()
|
||||
|
||||
book?.let {
|
||||
DetailPage(
|
||||
book = it,
|
||||
|
|
@ -69,32 +78,45 @@ fun DetailPage(
|
|||
when {
|
||||
emailCount == 1 -> {
|
||||
val email: String? = user?.amazonEmails?.firstOrNull()
|
||||
if (email != null) {
|
||||
booksViewModel.send(id = bookId, mail = email)
|
||||
}
|
||||
email?.let { mail -> booksViewModel.send(id = bookId, mail = mail) }
|
||||
}
|
||||
emailCount > 1 -> {
|
||||
// TODO choose email popup
|
||||
bottomSheetVisibility.targetState = true
|
||||
}
|
||||
else -> Unit // TODO warning popup, no email.
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
AnimatedVisibility(
|
||||
visibleState = bottomSheetVisibility,
|
||||
enter = slideInVertically(
|
||||
animationSpec = tween(Animation.MEDIUM_DURATION),
|
||||
initialOffsetY = { it },
|
||||
),
|
||||
exit = slideOutVertically(
|
||||
animationSpec = tween(Animation.MEDIUM_DURATION),
|
||||
targetOffsetY = { it },
|
||||
),
|
||||
) {
|
||||
SendMailBottomSheet(
|
||||
user?.amazonEmails?.map { MailUio(it) } ?: listOf(),
|
||||
onItemClick = { booksViewModel.send(id = bookId, mail = it.mail) },
|
||||
onOutsideClick = { bottomSheetVisibility.targetState = false }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@OptIn(ExperimentalAnimationApi::class)
|
||||
fun DetailPage(
|
||||
book: BookUio,
|
||||
onEpubClick: () -> Unit = {},
|
||||
onMobiClick: () -> Unit = {},
|
||||
onSendClick: () -> Unit = {},
|
||||
) {
|
||||
|
||||
val typography = MaterialTheme.typography
|
||||
val pouet = remember { MutableTransitionState(false) }
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
|
|
@ -179,13 +201,6 @@ fun DetailPage(
|
|||
modifier = Modifier.padding(bottom = 16.dp)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
AnimatedVisibility(
|
||||
visibleState = pouet,
|
||||
) {
|
||||
SendMailBottomSheet()
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
|
@ -229,15 +244,64 @@ private fun RowScope.Button(
|
|||
}
|
||||
|
||||
@Composable
|
||||
private fun SendMailBottomSheet() {
|
||||
val data = listOf("pouet", "pouet")
|
||||
LazyColumn(modifier = Modifier.fillMaxWidth()) {
|
||||
items(data.size) { index: Int ->
|
||||
Text(text = data[index])
|
||||
private fun SendMailBottomSheet(
|
||||
data: List<MailUio> = listOf(
|
||||
MailUio("R.Giskard.Reventlov.Kindle@gmailcom"),
|
||||
MailUio("R.Daneel.Olivaw.Kindle@gmailcom"),
|
||||
),
|
||||
onItemClick: (MailUio) -> Unit = {},
|
||||
onOutsideClick: () -> Unit = {},
|
||||
) {
|
||||
val typography = MaterialTheme.typography
|
||||
|
||||
Box(
|
||||
contentAlignment = Alignment.BottomCenter,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.fillMaxHeight()
|
||||
.clickable { onOutsideClick() },
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier.background(MaterialTheme.colors.background)
|
||||
) {
|
||||
Text(
|
||||
modifier = Modifier.padding(horizontal = 16.dp).padding(top = 8.dp),
|
||||
style = typography.caption,
|
||||
text = "Send this EBook to:",
|
||||
)
|
||||
LazyColumn(
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
items(data.size) { index: Int ->
|
||||
SendMailItem(uio = data[index], onClick = onItemClick)
|
||||
}
|
||||
}
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun SendMailItem(
|
||||
uio: MailUio,
|
||||
onClick: (MailUio) -> Unit = {},
|
||||
) {
|
||||
val typography = MaterialTheme.typography
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.height(48.dp)
|
||||
.fillMaxWidth()
|
||||
.clickable { onClick(uio) },
|
||||
contentAlignment = Alignment.CenterStart
|
||||
) {
|
||||
Text(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
style = typography.body1,
|
||||
text = uio.mail
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun DetailPageLightPreview() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
package com.pixelized.biblib.ui.data
|
||||
|
||||
data class MailUio(
|
||||
val mail: String,
|
||||
)
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.pixelized.biblib.utils.extention
|
||||
|
||||
import android.util.Log
|
||||
|
||||
fun logC(message: String): Int = Log.v("Composition", message)
|
||||
Loading…
Add table
Add a link
Reference in a new issue