Reorganize UI packages
This commit is contained in:
@@ -63,7 +63,7 @@ import it.vfsfitvnm.vimusic.ui.components.collapsedAnchor
|
|||||||
import it.vfsfitvnm.vimusic.ui.components.dismissedAnchor
|
import it.vfsfitvnm.vimusic.ui.components.dismissedAnchor
|
||||||
import it.vfsfitvnm.vimusic.ui.components.expandedAnchor
|
import it.vfsfitvnm.vimusic.ui.components.expandedAnchor
|
||||||
import it.vfsfitvnm.vimusic.ui.components.rememberBottomSheetState
|
import it.vfsfitvnm.vimusic.ui.components.rememberBottomSheetState
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.HomeScreen
|
import it.vfsfitvnm.vimusic.ui.screens.home.HomeScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.IntentUriScreen
|
import it.vfsfitvnm.vimusic.ui.screens.IntentUriScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Appearance
|
import it.vfsfitvnm.vimusic.ui.styling.Appearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||||
@@ -71,7 +71,7 @@ import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
|||||||
import it.vfsfitvnm.vimusic.ui.styling.colorPaletteOf
|
import it.vfsfitvnm.vimusic.ui.styling.colorPaletteOf
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.dynamicColorPaletteOf
|
import it.vfsfitvnm.vimusic.ui.styling.dynamicColorPaletteOf
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.typographyOf
|
import it.vfsfitvnm.vimusic.ui.styling.typographyOf
|
||||||
import it.vfsfitvnm.vimusic.ui.views.PlayerView
|
import it.vfsfitvnm.vimusic.ui.screens.player.PlayerView
|
||||||
import it.vfsfitvnm.vimusic.utils.colorPaletteModeKey
|
import it.vfsfitvnm.vimusic.utils.colorPaletteModeKey
|
||||||
import it.vfsfitvnm.vimusic.utils.colorPaletteNameKey
|
import it.vfsfitvnm.vimusic.utils.colorPaletteNameKey
|
||||||
import it.vfsfitvnm.vimusic.utils.getEnum
|
import it.vfsfitvnm.vimusic.utils.getEnum
|
||||||
|
|||||||
@@ -9,17 +9,11 @@ import it.vfsfitvnm.route.Route1
|
|||||||
import it.vfsfitvnm.route.RouteHandlerScope
|
import it.vfsfitvnm.route.RouteHandlerScope
|
||||||
import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
||||||
|
|
||||||
val aboutRoute = Route0("aboutRoute")
|
|
||||||
val albumRoute = Route1<String?>("albumRoute")
|
val albumRoute = Route1<String?>("albumRoute")
|
||||||
val appearanceSettingsRoute = Route0("appearanceSettingsRoute")
|
|
||||||
val artistRoute = Route1<String?>("artistRoute")
|
val artistRoute = Route1<String?>("artistRoute")
|
||||||
val backupAndRestoreRoute = Route0("backupAndRestoreRoute")
|
|
||||||
val builtInPlaylistRoute = Route1<BuiltInPlaylist>("builtInPlaylistRoute")
|
val builtInPlaylistRoute = Route1<BuiltInPlaylist>("builtInPlaylistRoute")
|
||||||
val cacheSettingsRoute = Route0("cacheSettingsRoute")
|
|
||||||
val intentUriRoute = Route1<Uri?>("intentUriRoute")
|
val intentUriRoute = Route1<Uri?>("intentUriRoute")
|
||||||
val localPlaylistRoute = Route1<Long?>("localPlaylistRoute")
|
val localPlaylistRoute = Route1<Long?>("localPlaylistRoute")
|
||||||
val otherSettingsRoute = Route0("otherSettingsRoute")
|
|
||||||
val playerSettingsRoute = Route0("playerSettingsRoute")
|
|
||||||
val playlistRoute = Route1<String?>("playlistRoute")
|
val playlistRoute = Route1<String?>("playlistRoute")
|
||||||
val searchResultRoute = Route1<String>("searchResultRoute")
|
val searchResultRoute = Route1<String>("searchResultRoute")
|
||||||
val searchRoute = Route1<String>("searchRoute")
|
val searchRoute = Route1<String>("searchRoute")
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens
|
package it.vfsfitvnm.vimusic.ui.screens.home
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
@@ -11,10 +11,19 @@ import it.vfsfitvnm.vimusic.R
|
|||||||
import it.vfsfitvnm.vimusic.models.SearchQuery
|
import it.vfsfitvnm.vimusic.models.SearchQuery
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.vfsfitvnm.vimusic.query
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
||||||
|
import it.vfsfitvnm.vimusic.ui.screens.BuiltInPlaylistScreen
|
||||||
|
import it.vfsfitvnm.vimusic.ui.screens.IntentUriScreen
|
||||||
|
import it.vfsfitvnm.vimusic.ui.screens.LocalPlaylistScreen
|
||||||
|
import it.vfsfitvnm.vimusic.ui.screens.SearchResultScreen
|
||||||
|
import it.vfsfitvnm.vimusic.ui.screens.builtInPlaylistRoute
|
||||||
|
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
||||||
|
import it.vfsfitvnm.vimusic.ui.screens.intentUriRoute
|
||||||
|
import it.vfsfitvnm.vimusic.ui.screens.localPlaylistRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.search.SearchScreen
|
import it.vfsfitvnm.vimusic.ui.screens.search.SearchScreen
|
||||||
|
import it.vfsfitvnm.vimusic.ui.screens.searchResultRoute
|
||||||
|
import it.vfsfitvnm.vimusic.ui.screens.searchRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.settings.SettingsScreen
|
import it.vfsfitvnm.vimusic.ui.screens.settings.SettingsScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.views.PlaylistsTab
|
import it.vfsfitvnm.vimusic.ui.screens.settingsRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.views.SongsTab
|
|
||||||
import it.vfsfitvnm.vimusic.utils.homeScreenTabIndexKey
|
import it.vfsfitvnm.vimusic.utils.homeScreenTabIndexKey
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||||
|
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.views
|
package it.vfsfitvnm.vimusic.ui.screens.home
|
||||||
|
|
||||||
import android.app.Application
|
|
||||||
import android.content.SharedPreferences
|
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.compose.animation.core.LinearEasing
|
import androidx.compose.animation.core.LinearEasing
|
||||||
import androidx.compose.animation.core.animateFloatAsState
|
import androidx.compose.animation.core.animateFloatAsState
|
||||||
@@ -37,9 +35,6 @@ import androidx.compose.ui.graphics.ColorFilter
|
|||||||
import androidx.compose.ui.graphics.graphicsLayer
|
import androidx.compose.ui.graphics.graphicsLayer
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.core.content.edit
|
|
||||||
import androidx.lifecycle.AndroidViewModel
|
|
||||||
import androidx.lifecycle.viewModelScope
|
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.vfsfitvnm.vimusic.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwarePaddingValues
|
import it.vfsfitvnm.vimusic.LocalPlayerAwarePaddingValues
|
||||||
@@ -48,69 +43,14 @@ import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
|||||||
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
import it.vfsfitvnm.vimusic.enums.SortOrder
|
||||||
import it.vfsfitvnm.vimusic.models.Playlist
|
import it.vfsfitvnm.vimusic.models.Playlist
|
||||||
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.vfsfitvnm.vimusic.query
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog
|
import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.utils.getEnum
|
import it.vfsfitvnm.vimusic.ui.views.BuiltInPlaylistItem
|
||||||
|
import it.vfsfitvnm.vimusic.ui.views.PlaylistPreviewItem
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.vfsfitvnm.vimusic.utils.medium
|
||||||
import it.vfsfitvnm.vimusic.utils.mutableStatePreferenceOf
|
|
||||||
import it.vfsfitvnm.vimusic.utils.playlistSortByKey
|
|
||||||
import it.vfsfitvnm.vimusic.utils.playlistSortOrderKey
|
|
||||||
import it.vfsfitvnm.vimusic.utils.preferences
|
|
||||||
import it.vfsfitvnm.vimusic.utils.putEnum
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.Job
|
|
||||||
import kotlinx.coroutines.flow.flowOn
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
|
|
||||||
class PlaylistsTabViewModel(application: Application) : AndroidViewModel(application) {
|
|
||||||
var items by mutableStateOf(emptyList<PlaylistPreview>())
|
|
||||||
private set
|
|
||||||
|
|
||||||
var sortBy by mutableStatePreferenceOf(
|
|
||||||
preferences.getEnum(
|
|
||||||
playlistSortByKey,
|
|
||||||
PlaylistSortBy.DateAdded
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
preferences.edit { putEnum(playlistSortByKey, it) }
|
|
||||||
collectItems(sortBy = it)
|
|
||||||
}
|
|
||||||
|
|
||||||
var sortOrder by mutableStatePreferenceOf(
|
|
||||||
preferences.getEnum(
|
|
||||||
playlistSortOrderKey,
|
|
||||||
SortOrder.Ascending
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
preferences.edit { putEnum(playlistSortOrderKey, it) }
|
|
||||||
collectItems(sortOrder = it)
|
|
||||||
}
|
|
||||||
|
|
||||||
private var job: Job? = null
|
|
||||||
|
|
||||||
private val preferences: SharedPreferences
|
|
||||||
get() = getApplication<Application>().preferences
|
|
||||||
|
|
||||||
init {
|
|
||||||
collectItems()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun collectItems(
|
|
||||||
sortBy: PlaylistSortBy = this.sortBy,
|
|
||||||
sortOrder: SortOrder = this.sortOrder
|
|
||||||
) {
|
|
||||||
job?.cancel()
|
|
||||||
job = viewModelScope.launch {
|
|
||||||
Database.playlistPreviews(sortBy, sortOrder).flowOn(Dispatchers.IO).collect {
|
|
||||||
items = it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@Composable
|
@Composable
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package it.vfsfitvnm.vimusic.ui.screens.home
|
||||||
|
|
||||||
|
import android.app.Application
|
||||||
|
import android.content.SharedPreferences
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
|
import androidx.core.content.edit
|
||||||
|
import androidx.lifecycle.AndroidViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import it.vfsfitvnm.vimusic.Database
|
||||||
|
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
||||||
|
import it.vfsfitvnm.vimusic.enums.SortOrder
|
||||||
|
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
||||||
|
import it.vfsfitvnm.vimusic.utils.getEnum
|
||||||
|
import it.vfsfitvnm.vimusic.utils.mutableStatePreferenceOf
|
||||||
|
import it.vfsfitvnm.vimusic.utils.playlistSortByKey
|
||||||
|
import it.vfsfitvnm.vimusic.utils.playlistSortOrderKey
|
||||||
|
import it.vfsfitvnm.vimusic.utils.preferences
|
||||||
|
import it.vfsfitvnm.vimusic.utils.putEnum
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.flow.flowOn
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
class PlaylistsTabViewModel(application: Application) : AndroidViewModel(application) {
|
||||||
|
var items by mutableStateOf(emptyList<PlaylistPreview>())
|
||||||
|
private set
|
||||||
|
|
||||||
|
var sortBy by mutableStatePreferenceOf(
|
||||||
|
preferences.getEnum(
|
||||||
|
playlistSortByKey,
|
||||||
|
PlaylistSortBy.DateAdded
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
preferences.edit { putEnum(playlistSortByKey, it) }
|
||||||
|
collectItems(sortBy = it)
|
||||||
|
}
|
||||||
|
|
||||||
|
var sortOrder by mutableStatePreferenceOf(
|
||||||
|
preferences.getEnum(
|
||||||
|
playlistSortOrderKey,
|
||||||
|
SortOrder.Ascending
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
preferences.edit { putEnum(playlistSortOrderKey, it) }
|
||||||
|
collectItems(sortOrder = it)
|
||||||
|
}
|
||||||
|
|
||||||
|
private var job: Job? = null
|
||||||
|
|
||||||
|
private val preferences: SharedPreferences
|
||||||
|
get() = getApplication<Application>().preferences
|
||||||
|
|
||||||
|
init {
|
||||||
|
collectItems()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun collectItems(
|
||||||
|
sortBy: PlaylistSortBy = this.sortBy,
|
||||||
|
sortOrder: SortOrder = this.sortOrder
|
||||||
|
) {
|
||||||
|
job?.cancel()
|
||||||
|
job = viewModelScope.launch {
|
||||||
|
Database.playlistPreviews(sortBy, sortOrder).flowOn(Dispatchers.IO).collect {
|
||||||
|
items = it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.views
|
package it.vfsfitvnm.vimusic.ui.screens.home
|
||||||
|
|
||||||
import android.app.Application
|
|
||||||
import android.content.SharedPreferences
|
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
@@ -25,8 +23,6 @@ import androidx.compose.foundation.lazy.itemsIndexed
|
|||||||
import androidx.compose.foundation.text.BasicText
|
import androidx.compose.foundation.text.BasicText
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Brush
|
import androidx.compose.ui.graphics.Brush
|
||||||
@@ -36,11 +32,7 @@ import androidx.compose.ui.graphics.graphicsLayer
|
|||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.core.content.edit
|
|
||||||
import androidx.lifecycle.AndroidViewModel
|
|
||||||
import androidx.lifecycle.viewModelScope
|
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import it.vfsfitvnm.vimusic.Database
|
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwarePaddingValues
|
import it.vfsfitvnm.vimusic.LocalPlayerAwarePaddingValues
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.vfsfitvnm.vimusic.R
|
||||||
@@ -53,54 +45,12 @@ import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu
|
|||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||||
|
import it.vfsfitvnm.vimusic.ui.views.SongItem
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.center
|
import it.vfsfitvnm.vimusic.utils.center
|
||||||
import it.vfsfitvnm.vimusic.utils.color
|
import it.vfsfitvnm.vimusic.utils.color
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
||||||
import it.vfsfitvnm.vimusic.utils.getEnum
|
|
||||||
import it.vfsfitvnm.vimusic.utils.mutableStatePreferenceOf
|
|
||||||
import it.vfsfitvnm.vimusic.utils.preferences
|
|
||||||
import it.vfsfitvnm.vimusic.utils.putEnum
|
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||||
import it.vfsfitvnm.vimusic.utils.songSortByKey
|
|
||||||
import it.vfsfitvnm.vimusic.utils.songSortOrderKey
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.Job
|
|
||||||
import kotlinx.coroutines.flow.flowOn
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
|
|
||||||
class SongsTabViewModel(application: Application) : AndroidViewModel(application) {
|
|
||||||
var items by mutableStateOf(emptyList<DetailedSong>())
|
|
||||||
private set
|
|
||||||
|
|
||||||
var sortBy by mutableStatePreferenceOf(preferences.getEnum(songSortByKey, SongSortBy.DateAdded)) {
|
|
||||||
preferences.edit { putEnum(songSortByKey, it) }
|
|
||||||
collectItems(sortBy = it)
|
|
||||||
}
|
|
||||||
|
|
||||||
var sortOrder by mutableStatePreferenceOf(preferences.getEnum(songSortOrderKey, SortOrder.Ascending)) {
|
|
||||||
preferences.edit { putEnum(songSortOrderKey, it) }
|
|
||||||
collectItems(sortOrder = it)
|
|
||||||
}
|
|
||||||
|
|
||||||
private var job: Job? = null
|
|
||||||
|
|
||||||
private val preferences: SharedPreferences
|
|
||||||
get() = getApplication<Application>().preferences
|
|
||||||
|
|
||||||
init {
|
|
||||||
collectItems()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun collectItems(sortBy: SongSortBy = this.sortBy, sortOrder: SortOrder = this.sortOrder) {
|
|
||||||
job?.cancel()
|
|
||||||
job = viewModelScope.launch {
|
|
||||||
Database.songs(sortBy, sortOrder).flowOn(Dispatchers.IO).collect {
|
|
||||||
items = it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
package it.vfsfitvnm.vimusic.ui.screens.home
|
||||||
|
|
||||||
|
import android.app.Application
|
||||||
|
import android.content.SharedPreferences
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
|
import androidx.core.content.edit
|
||||||
|
import androidx.lifecycle.AndroidViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import it.vfsfitvnm.vimusic.Database
|
||||||
|
import it.vfsfitvnm.vimusic.enums.SongSortBy
|
||||||
|
import it.vfsfitvnm.vimusic.enums.SortOrder
|
||||||
|
import it.vfsfitvnm.vimusic.models.DetailedSong
|
||||||
|
import it.vfsfitvnm.vimusic.utils.getEnum
|
||||||
|
import it.vfsfitvnm.vimusic.utils.mutableStatePreferenceOf
|
||||||
|
import it.vfsfitvnm.vimusic.utils.preferences
|
||||||
|
import it.vfsfitvnm.vimusic.utils.putEnum
|
||||||
|
import it.vfsfitvnm.vimusic.utils.songSortByKey
|
||||||
|
import it.vfsfitvnm.vimusic.utils.songSortOrderKey
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.flow.flowOn
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
class SongsTabViewModel(application: Application) : AndroidViewModel(application) {
|
||||||
|
var items by mutableStateOf(emptyList<DetailedSong>())
|
||||||
|
private set
|
||||||
|
|
||||||
|
var sortBy by mutableStatePreferenceOf(
|
||||||
|
preferences.getEnum(
|
||||||
|
songSortByKey,
|
||||||
|
SongSortBy.DateAdded
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
preferences.edit { putEnum(songSortByKey, it) }
|
||||||
|
collectItems(sortBy = it)
|
||||||
|
}
|
||||||
|
|
||||||
|
var sortOrder by mutableStatePreferenceOf(
|
||||||
|
preferences.getEnum(
|
||||||
|
songSortOrderKey,
|
||||||
|
SortOrder.Ascending
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
preferences.edit { putEnum(songSortOrderKey, it) }
|
||||||
|
collectItems(sortOrder = it)
|
||||||
|
}
|
||||||
|
|
||||||
|
private var job: Job? = null
|
||||||
|
|
||||||
|
private val preferences: SharedPreferences
|
||||||
|
get() = getApplication<Application>().preferences
|
||||||
|
|
||||||
|
init {
|
||||||
|
collectItems()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun collectItems(sortBy: SongSortBy = this.sortBy, sortOrder: SortOrder = this.sortOrder) {
|
||||||
|
job?.cancel()
|
||||||
|
job = viewModelScope.launch {
|
||||||
|
Database.songs(sortBy, sortOrder).flowOn(Dispatchers.IO).collect {
|
||||||
|
items = it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.views.player
|
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||||
|
|
||||||
import android.text.format.DateUtils
|
import android.text.format.DateUtils
|
||||||
import androidx.compose.animation.core.LinearEasing
|
import androidx.compose.animation.core.LinearEasing
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.views.player
|
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||||
|
|
||||||
import android.app.SearchManager
|
import android.app.SearchManager
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.views.player
|
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||||
|
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.animation.fadeIn
|
import androidx.compose.animation.fadeIn
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.views
|
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.animation.fadeIn
|
import androidx.compose.animation.fadeIn
|
||||||
@@ -45,6 +45,7 @@ import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
|||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.onOverlay
|
import it.vfsfitvnm.vimusic.ui.styling.onOverlay
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||||
|
import it.vfsfitvnm.vimusic.ui.views.SongItem
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.vfsfitvnm.vimusic.utils.medium
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberMediaItemIndex
|
import it.vfsfitvnm.vimusic.utils.rememberMediaItemIndex
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberShouldBePlaying
|
import it.vfsfitvnm.vimusic.utils.rememberShouldBePlaying
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.views
|
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
@@ -61,8 +61,6 @@ import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
|||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.collapsedPlayerProgressBar
|
import it.vfsfitvnm.vimusic.ui.styling.collapsedPlayerProgressBar
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.ui.views.player.Controls
|
|
||||||
import it.vfsfitvnm.vimusic.ui.views.player.Thumbnail
|
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberMediaItem
|
import it.vfsfitvnm.vimusic.utils.rememberMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberPositionAndDuration
|
import it.vfsfitvnm.vimusic.utils.rememberPositionAndDuration
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberShouldBePlaying
|
import it.vfsfitvnm.vimusic.utils.rememberShouldBePlaying
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.views.player
|
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||||
|
|
||||||
import android.text.format.Formatter
|
import android.text.format.Formatter
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.views.player
|
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||||
|
|
||||||
import androidx.compose.animation.AnimatedContent
|
import androidx.compose.animation.AnimatedContent
|
||||||
import androidx.compose.animation.AnimatedContentScope
|
import androidx.compose.animation.AnimatedContentScope
|
||||||
Reference in New Issue
Block a user