mirror of
https://github.com/GrakovNe/lissen-android.git
synced 2026-08-07 05:41:52 -04:00
library screen
This commit is contained in:
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-4
@@ -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,
|
||||
) {
|
||||
|
||||
+8
-3
@@ -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()
|
||||
+1
-3
@@ -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
|
||||
|
||||
Reference in new issue
Block a user