library screen

This commit is contained in:
grakovne committed 2024-10-01 00:48:03 +02:00
1 parent 8bcdda1bc0
commit 5e60b1ae47
6 files changed
+35 -15

No files matched your search

@@ -5,12 +5,14 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.navigation.NavHostController
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import org.grakovne.lissen.persistence.preferences.LissenSharedPreferences
import org.grakovne.lissen.ui.screens.library.LibraryScreen
import org.grakovne.lissen.ui.screens.login.LoginScreen
import org.grakovne.lissen.ui.screens.player.composable.PlayerScreen
import org.grakovne.lissen.ui.screens.player.PlayerScreen
import org.grakovne.lissen.ui.screens.settings.SettingsScreen
import org.grakovne.lissen.viewmodel.PlayerViewModel
@@ -32,13 +34,19 @@ fun AppNavHost(navController: NavHostController) {
LibraryScreen(navController)
}
composable("player_screen") {
composable(
"player_screen/{libraryItemId}",
arguments = listOf(navArgument("libraryItemId") { type = NavType.StringType })
) { navigationStack ->
val libraryItemId = navigationStack.arguments?.getString("libraryItemId")
PlayerScreen(
viewModel = PlayerViewModel(),
navController = navController,
onBack = {
navController.popBackStack()
}
},
libraryItemId = libraryItemId
)
}
@@ -265,7 +265,7 @@ fun LibraryScreen(
if (books.isEmpty()) {
LibraryPlaceholderComposable(modifier = Modifier)
} else {
LibraryComposable(books = books, imageLoader = imageLoader, modifier = Modifier)
LibraryComposable(books = books, imageLoader = imageLoader, navController = navController)
}
}
}
@@ -34,6 +34,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import coil.ImageLoader
import coil.request.ImageRequest
import org.grakovne.lissen.R
@@ -45,22 +46,27 @@ import org.grakovne.lissen.ui.screens.AsyncShimmeringImage
fun LibraryComposable(
books: List<Book>,
imageLoader: ImageLoader,
modifier: Modifier = Modifier
navController: NavController
) {
books.forEach { book ->
LibraryItemComposable(book = book, imageLoader = imageLoader)
LibraryItemComposable(
book = book,
imageLoader = imageLoader,
navController = navController
)
}
}
@Composable
fun LibraryItemComposable(
book: Book,
imageLoader: ImageLoader
imageLoader: ImageLoader,
navController: NavController
) {
Row(
modifier = Modifier
.fillMaxWidth()
.clickable { /* TODO: Handle click */ }
.clickable { navController.navigate("player_screen/${book.id}") }
.padding(horizontal = 4.dp, vertical = 8.dp),
verticalAlignment = Alignment.CenterVertically,
) {
@@ -1,4 +1,4 @@
package org.grakovne.lissen.ui.screens.player.composable
package org.grakovne.lissen.ui.screens.player
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.animateContentSize
@@ -27,16 +27,22 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavController
import org.grakovne.lissen.ui.screens.player.composable.PlayerNavBarComposable
import org.grakovne.lissen.ui.screens.player.composable.PlayingQueueComposable
import org.grakovne.lissen.ui.screens.player.composable.TrackControlComposable
import org.grakovne.lissen.ui.screens.player.composable.TrackDetailsComposable
import org.grakovne.lissen.viewmodel.PlayerViewModel
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun PlayerScreen(
viewModel: PlayerViewModel,
navController: NavController,
viewModel: PlayerViewModel = hiltViewModel(),
onBack: () -> Unit,
libraryItemId: String?
) {
Scaffold(
topBar = {
@@ -91,7 +97,6 @@ fun PlayerScreen(
horizontalAlignment = Alignment.CenterHorizontally
) {
TrackDetailsComposable(
navController = navController,
viewModel = viewModel,
modifier = Modifier
.fillMaxWidth()
@@ -26,7 +26,6 @@ import org.grakovne.lissen.viewmodel.PlayerViewModel
@Composable
fun TrackDetailsComposable(
navController: NavController,
viewModel: PlayerViewModel,
modifier: Modifier = Modifier
) {
@@ -34,7 +33,6 @@ fun TrackDetailsComposable(
val playlist by viewModel.playlist.observeAsState(emptyList())
Image(
painter = painterResource(id = R.drawable.fallback_cover),
contentDescription = "Book Description",
modifier = modifier
@@ -45,7 +43,7 @@ fun TrackDetailsComposable(
detectVerticalDragGestures(
onVerticalDrag = { _, dragAmount ->
if (dragAmount > 0) {
navController.navigate("library_screen")
// move back
}
}
)
@@ -3,9 +3,12 @@ package org.grakovne.lissen.viewmodel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import org.grakovne.lissen.ui.screens.player.Track
import javax.inject.Inject
class PlayerViewModel : ViewModel() {
@HiltViewModel
class PlayerViewModel @Inject constructor() : ViewModel() {
private val _playingQueueExpanded = MutableLiveData(false)
val playingQueueExpanded = _playingQueueExpanded