Перевод
Мелкие шайтанские фокусы
This commit is contained in:
2
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
@@ -59,7 +59,7 @@ body:
|
|||||||
If your bug includes a crash, please use `adb logcat` or other ways to provide logs.
|
If your bug includes a crash, please use `adb logcat` or other ways to provide logs.
|
||||||
|
|
||||||
- type: input
|
- type: input
|
||||||
id: vimusic-version
|
id: muza-version
|
||||||
attributes:
|
attributes:
|
||||||
label: ViMusic version
|
label: ViMusic version
|
||||||
placeholder: |
|
placeholder: |
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ android {
|
|||||||
compileSdk = 33
|
compileSdk = 33
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "it.vfsfitvnm.vimusic"
|
applicationId = "it.hamy.muza"
|
||||||
minSdk = 21
|
minSdk = 21
|
||||||
targetSdk = 33
|
targetSdk = 33
|
||||||
versionCode = 20
|
versionCode = 20
|
||||||
@@ -22,7 +22,7 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace = "it.vfsfitvnm.vimusic"
|
namespace = "it.hamy.muza"
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
debug {
|
debug {
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic
|
package it.hamy.muza
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -31,28 +31,28 @@ import androidx.room.migration.Migration
|
|||||||
import androidx.sqlite.db.SimpleSQLiteQuery
|
import androidx.sqlite.db.SimpleSQLiteQuery
|
||||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
import androidx.sqlite.db.SupportSQLiteQuery
|
import androidx.sqlite.db.SupportSQLiteQuery
|
||||||
import it.vfsfitvnm.vimusic.enums.AlbumSortBy
|
import it.hamy.muza.enums.AlbumSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.ArtistSortBy
|
import it.hamy.muza.enums.ArtistSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
import it.hamy.muza.enums.PlaylistSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.SongSortBy
|
import it.hamy.muza.enums.SongSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
import it.hamy.muza.enums.SortOrder
|
||||||
import it.vfsfitvnm.vimusic.models.Album
|
import it.hamy.muza.models.Album
|
||||||
import it.vfsfitvnm.vimusic.models.Artist
|
import it.hamy.muza.models.Artist
|
||||||
import it.vfsfitvnm.vimusic.models.SongWithContentLength
|
import it.hamy.muza.models.SongWithContentLength
|
||||||
import it.vfsfitvnm.vimusic.models.Event
|
import it.hamy.muza.models.Event
|
||||||
import it.vfsfitvnm.vimusic.models.Format
|
import it.hamy.muza.models.Format
|
||||||
import it.vfsfitvnm.vimusic.models.Info
|
import it.hamy.muza.models.Info
|
||||||
import it.vfsfitvnm.vimusic.models.Lyrics
|
import it.hamy.muza.models.Lyrics
|
||||||
import it.vfsfitvnm.vimusic.models.Playlist
|
import it.hamy.muza.models.Playlist
|
||||||
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
import it.hamy.muza.models.PlaylistPreview
|
||||||
import it.vfsfitvnm.vimusic.models.PlaylistWithSongs
|
import it.hamy.muza.models.PlaylistWithSongs
|
||||||
import it.vfsfitvnm.vimusic.models.QueuedMediaItem
|
import it.hamy.muza.models.QueuedMediaItem
|
||||||
import it.vfsfitvnm.vimusic.models.SearchQuery
|
import it.hamy.muza.models.SearchQuery
|
||||||
import it.vfsfitvnm.vimusic.models.Song
|
import it.hamy.muza.models.Song
|
||||||
import it.vfsfitvnm.vimusic.models.SongAlbumMap
|
import it.hamy.muza.models.SongAlbumMap
|
||||||
import it.vfsfitvnm.vimusic.models.SongArtistMap
|
import it.hamy.muza.models.SongArtistMap
|
||||||
import it.vfsfitvnm.vimusic.models.SongPlaylistMap
|
import it.hamy.muza.models.SongPlaylistMap
|
||||||
import it.vfsfitvnm.vimusic.models.SortedSongPlaylistMap
|
import it.hamy.muza.models.SortedSongPlaylistMap
|
||||||
import kotlin.jvm.Throws
|
import kotlin.jvm.Throws
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic
|
package it.hamy.muza
|
||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -58,42 +58,42 @@ import androidx.media3.common.MediaItem
|
|||||||
import androidx.media3.common.Player
|
import androidx.media3.common.Player
|
||||||
import com.valentinilk.shimmer.LocalShimmerTheme
|
import com.valentinilk.shimmer.LocalShimmerTheme
|
||||||
import com.valentinilk.shimmer.defaultShimmerTheme
|
import com.valentinilk.shimmer.defaultShimmerTheme
|
||||||
import it.vfsfitvnm.compose.persist.PersistMap
|
import it.hamy.compose.persist.PersistMap
|
||||||
import it.vfsfitvnm.compose.persist.PersistMapOwner
|
import it.hamy.compose.persist.PersistMapOwner
|
||||||
import it.vfsfitvnm.innertube.Innertube
|
import it.hamy.innertube.Innertube
|
||||||
import it.vfsfitvnm.innertube.models.bodies.BrowseBody
|
import it.hamy.innertube.models.bodies.BrowseBody
|
||||||
import it.vfsfitvnm.innertube.requests.playlistPage
|
import it.hamy.innertube.requests.playlistPage
|
||||||
import it.vfsfitvnm.innertube.requests.song
|
import it.hamy.innertube.requests.song
|
||||||
import it.vfsfitvnm.vimusic.enums.ColorPaletteMode
|
import it.hamy.muza.enums.ColorPaletteMode
|
||||||
import it.vfsfitvnm.vimusic.enums.ColorPaletteName
|
import it.hamy.muza.enums.ColorPaletteName
|
||||||
import it.vfsfitvnm.vimusic.enums.ThumbnailRoundness
|
import it.hamy.muza.enums.ThumbnailRoundness
|
||||||
import it.vfsfitvnm.vimusic.service.PlayerService
|
import it.hamy.muza.service.PlayerService
|
||||||
import it.vfsfitvnm.vimusic.ui.components.BottomSheetMenu
|
import it.hamy.muza.ui.components.BottomSheetMenu
|
||||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
import it.hamy.muza.ui.components.LocalMenuState
|
||||||
import it.vfsfitvnm.vimusic.ui.components.rememberBottomSheetState
|
import it.hamy.muza.ui.components.rememberBottomSheetState
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
import it.hamy.muza.ui.screens.albumRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.artistRoute
|
import it.hamy.muza.ui.screens.artistRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.home.HomeScreen
|
import it.hamy.muza.ui.screens.home.HomeScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.player.Player
|
import it.hamy.muza.ui.screens.player.Player
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.playlistRoute
|
import it.hamy.muza.ui.screens.playlistRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Appearance
|
import it.hamy.muza.ui.styling.Appearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.colorPaletteOf
|
import it.hamy.muza.ui.styling.colorPaletteOf
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.dynamicColorPaletteOf
|
import it.hamy.muza.ui.styling.dynamicColorPaletteOf
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.typographyOf
|
import it.hamy.muza.ui.styling.typographyOf
|
||||||
import it.vfsfitvnm.vimusic.utils.applyFontPaddingKey
|
import it.hamy.muza.utils.applyFontPaddingKey
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.hamy.muza.utils.asMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.colorPaletteModeKey
|
import it.hamy.muza.utils.colorPaletteModeKey
|
||||||
import it.vfsfitvnm.vimusic.utils.colorPaletteNameKey
|
import it.hamy.muza.utils.colorPaletteNameKey
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
import it.hamy.muza.utils.forcePlay
|
||||||
import it.vfsfitvnm.vimusic.utils.getEnum
|
import it.hamy.muza.utils.getEnum
|
||||||
import it.vfsfitvnm.vimusic.utils.intent
|
import it.hamy.muza.utils.intent
|
||||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid6
|
import it.hamy.muza.utils.isAtLeastAndroid6
|
||||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid8
|
import it.hamy.muza.utils.isAtLeastAndroid8
|
||||||
import it.vfsfitvnm.vimusic.utils.preferences
|
import it.hamy.muza.utils.preferences
|
||||||
import it.vfsfitvnm.vimusic.utils.thumbnailRoundnessKey
|
import it.hamy.muza.utils.thumbnailRoundnessKey
|
||||||
import it.vfsfitvnm.vimusic.utils.useSystemFontKey
|
import it.hamy.muza.utils.useSystemFontKey
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.flow.filterNotNull
|
import kotlinx.coroutines.flow.filterNotNull
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package it.vfsfitvnm.vimusic
|
package it.hamy.muza
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import coil.ImageLoader
|
import coil.ImageLoader
|
||||||
import coil.ImageLoaderFactory
|
import coil.ImageLoaderFactory
|
||||||
import coil.disk.DiskCache
|
import coil.disk.DiskCache
|
||||||
import it.vfsfitvnm.vimusic.enums.CoilDiskCacheMaxSize
|
import it.hamy.muza.enums.CoilDiskCacheMaxSize
|
||||||
import it.vfsfitvnm.vimusic.utils.coilDiskCacheMaxSizeKey
|
import it.hamy.muza.utils.coilDiskCacheMaxSizeKey
|
||||||
import it.vfsfitvnm.vimusic.utils.getEnum
|
import it.hamy.muza.utils.getEnum
|
||||||
import it.vfsfitvnm.vimusic.utils.preferences
|
import it.hamy.muza.utils.preferences
|
||||||
|
|
||||||
class MainApplication : Application(), ImageLoaderFactory {
|
class MainApplication : Application(), ImageLoaderFactory {
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
enum class AlbumSortBy {
|
enum class AlbumSortBy {
|
||||||
Title,
|
Title,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
enum class ArtistSortBy {
|
enum class ArtistSortBy {
|
||||||
Name,
|
Name,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
enum class BuiltInPlaylist {
|
enum class BuiltInPlaylist {
|
||||||
Favorites,
|
Favorites,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
enum class CoilDiskCacheMaxSize {
|
enum class CoilDiskCacheMaxSize {
|
||||||
`128MB`,
|
`128MB`,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
enum class ColorPaletteMode {
|
enum class ColorPaletteMode {
|
||||||
Light,
|
Light,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
enum class ColorPaletteName {
|
enum class ColorPaletteName {
|
||||||
Default,
|
Default,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
enum class ExoPlayerDiskCacheMaxSize {
|
enum class ExoPlayerDiskCacheMaxSize {
|
||||||
`32MB`,
|
`32MB`,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
enum class PlaylistSortBy {
|
enum class PlaylistSortBy {
|
||||||
Name,
|
Name,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
enum class SongSortBy {
|
enum class SongSortBy {
|
||||||
PlayTime,
|
PlayTime,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
enum class SortOrder {
|
enum class SortOrder {
|
||||||
Ascending,
|
Ascending,
|
||||||
@@ -1,12 +1,9 @@
|
|||||||
package it.vfsfitvnm.vimusic.enums
|
package it.hamy.muza.enums
|
||||||
|
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.runtime.ReadOnlyComposable
|
|
||||||
import androidx.compose.ui.graphics.RectangleShape
|
import androidx.compose.ui.graphics.RectangleShape
|
||||||
import androidx.compose.ui.graphics.Shape
|
import androidx.compose.ui.graphics.Shape
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
|
||||||
|
|
||||||
enum class ThumbnailRoundness {
|
enum class ThumbnailRoundness {
|
||||||
None,
|
None,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
data class Info(
|
data class Info(
|
||||||
val id: String,
|
val id: String,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.Embedded
|
import androidx.room.Embedded
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.Embedded
|
import androidx.room.Embedded
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.media3.common.MediaItem
|
import androidx.media3.common.MediaItem
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.Embedded
|
import androidx.room.Embedded
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.models
|
package it.hamy.muza.models
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.service
|
package it.hamy.muza.service
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
@@ -9,7 +9,7 @@ import androidx.core.graphics.applyCanvas
|
|||||||
import coil.imageLoader
|
import coil.imageLoader
|
||||||
import coil.request.Disposable
|
import coil.request.Disposable
|
||||||
import coil.request.ImageRequest
|
import coil.request.ImageRequest
|
||||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
import it.hamy.muza.utils.thumbnail
|
||||||
|
|
||||||
context(Context)
|
context(Context)
|
||||||
class BitmapProvider(
|
class BitmapProvider(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.service
|
package it.hamy.muza.service
|
||||||
|
|
||||||
import androidx.media3.common.PlaybackException
|
import androidx.media3.common.PlaybackException
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.service
|
package it.hamy.muza.service
|
||||||
|
|
||||||
import android.media.MediaDescription as BrowserMediaDescription
|
import android.media.MediaDescription as BrowserMediaDescription
|
||||||
import android.media.browse.MediaBrowser.MediaItem as BrowserMediaItem
|
import android.media.browse.MediaBrowser.MediaItem as BrowserMediaItem
|
||||||
@@ -17,17 +17,17 @@ import androidx.core.net.toUri
|
|||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import androidx.media3.common.Player
|
import androidx.media3.common.Player
|
||||||
import androidx.media3.datasource.cache.Cache
|
import androidx.media3.datasource.cache.Cache
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.models.Album
|
import it.hamy.muza.models.Album
|
||||||
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
import it.hamy.muza.models.PlaylistPreview
|
||||||
import it.vfsfitvnm.vimusic.models.Song
|
import it.hamy.muza.models.Song
|
||||||
import it.vfsfitvnm.vimusic.models.SongWithContentLength
|
import it.hamy.muza.models.SongWithContentLength
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.hamy.muza.utils.asMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
import it.hamy.muza.utils.forcePlayAtIndex
|
||||||
import it.vfsfitvnm.vimusic.utils.forceSeekToNext
|
import it.hamy.muza.utils.forceSeekToNext
|
||||||
import it.vfsfitvnm.vimusic.utils.forceSeekToPrevious
|
import it.hamy.muza.utils.forceSeekToPrevious
|
||||||
import it.vfsfitvnm.vimusic.utils.intent
|
import it.hamy.muza.utils.intent
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.service
|
package it.hamy.muza.service
|
||||||
|
|
||||||
import android.os.Binder as AndroidBinder
|
import android.os.Binder as AndroidBinder
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
@@ -67,45 +67,45 @@ import androidx.media3.exoplayer.source.MediaSource
|
|||||||
import androidx.media3.extractor.ExtractorsFactory
|
import androidx.media3.extractor.ExtractorsFactory
|
||||||
import androidx.media3.extractor.mkv.MatroskaExtractor
|
import androidx.media3.extractor.mkv.MatroskaExtractor
|
||||||
import androidx.media3.extractor.mp4.FragmentedMp4Extractor
|
import androidx.media3.extractor.mp4.FragmentedMp4Extractor
|
||||||
import it.vfsfitvnm.innertube.Innertube
|
import it.hamy.innertube.Innertube
|
||||||
import it.vfsfitvnm.innertube.models.NavigationEndpoint
|
import it.hamy.innertube.models.NavigationEndpoint
|
||||||
import it.vfsfitvnm.innertube.models.bodies.PlayerBody
|
import it.hamy.innertube.models.bodies.PlayerBody
|
||||||
import it.vfsfitvnm.innertube.requests.player
|
import it.hamy.innertube.requests.player
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.MainActivity
|
import it.hamy.muza.MainActivity
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.enums.ExoPlayerDiskCacheMaxSize
|
import it.hamy.muza.enums.ExoPlayerDiskCacheMaxSize
|
||||||
import it.vfsfitvnm.vimusic.models.Event
|
import it.hamy.muza.models.Event
|
||||||
import it.vfsfitvnm.vimusic.models.QueuedMediaItem
|
import it.hamy.muza.models.QueuedMediaItem
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.hamy.muza.query
|
||||||
import it.vfsfitvnm.vimusic.utils.InvincibleService
|
import it.hamy.muza.utils.InvincibleService
|
||||||
import it.vfsfitvnm.vimusic.utils.RingBuffer
|
import it.hamy.muza.utils.RingBuffer
|
||||||
import it.vfsfitvnm.vimusic.utils.TimerJob
|
import it.hamy.muza.utils.TimerJob
|
||||||
import it.vfsfitvnm.vimusic.utils.YouTubeRadio
|
import it.hamy.muza.utils.YouTubeRadio
|
||||||
import it.vfsfitvnm.vimusic.utils.activityPendingIntent
|
import it.hamy.muza.utils.activityPendingIntent
|
||||||
import it.vfsfitvnm.vimusic.utils.broadCastPendingIntent
|
import it.hamy.muza.utils.broadCastPendingIntent
|
||||||
import it.vfsfitvnm.vimusic.utils.exoPlayerDiskCacheMaxSizeKey
|
import it.hamy.muza.utils.exoPlayerDiskCacheMaxSizeKey
|
||||||
import it.vfsfitvnm.vimusic.utils.findNextMediaItemById
|
import it.hamy.muza.utils.findNextMediaItemById
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
|
import it.hamy.muza.utils.forcePlayFromBeginning
|
||||||
import it.vfsfitvnm.vimusic.utils.forceSeekToNext
|
import it.hamy.muza.utils.forceSeekToNext
|
||||||
import it.vfsfitvnm.vimusic.utils.forceSeekToPrevious
|
import it.hamy.muza.utils.forceSeekToPrevious
|
||||||
import it.vfsfitvnm.vimusic.utils.getEnum
|
import it.hamy.muza.utils.getEnum
|
||||||
import it.vfsfitvnm.vimusic.utils.intent
|
import it.hamy.muza.utils.intent
|
||||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid13
|
import it.hamy.muza.utils.isAtLeastAndroid13
|
||||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid6
|
import it.hamy.muza.utils.isAtLeastAndroid6
|
||||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid8
|
import it.hamy.muza.utils.isAtLeastAndroid8
|
||||||
import it.vfsfitvnm.vimusic.utils.isInvincibilityEnabledKey
|
import it.hamy.muza.utils.isInvincibilityEnabledKey
|
||||||
import it.vfsfitvnm.vimusic.utils.isShowingThumbnailInLockscreenKey
|
import it.hamy.muza.utils.isShowingThumbnailInLockscreenKey
|
||||||
import it.vfsfitvnm.vimusic.utils.mediaItems
|
import it.hamy.muza.utils.mediaItems
|
||||||
import it.vfsfitvnm.vimusic.utils.persistentQueueKey
|
import it.hamy.muza.utils.persistentQueueKey
|
||||||
import it.vfsfitvnm.vimusic.utils.preferences
|
import it.hamy.muza.utils.preferences
|
||||||
import it.vfsfitvnm.vimusic.utils.queueLoopEnabledKey
|
import it.hamy.muza.utils.queueLoopEnabledKey
|
||||||
import it.vfsfitvnm.vimusic.utils.resumePlaybackWhenDeviceConnectedKey
|
import it.hamy.muza.utils.resumePlaybackWhenDeviceConnectedKey
|
||||||
import it.vfsfitvnm.vimusic.utils.shouldBePlaying
|
import it.hamy.muza.utils.shouldBePlaying
|
||||||
import it.vfsfitvnm.vimusic.utils.skipSilenceKey
|
import it.hamy.muza.utils.skipSilenceKey
|
||||||
import it.vfsfitvnm.vimusic.utils.timer
|
import it.hamy.muza.utils.timer
|
||||||
import it.vfsfitvnm.vimusic.utils.trackLoopEnabledKey
|
import it.hamy.muza.utils.trackLoopEnabledKey
|
||||||
import it.vfsfitvnm.vimusic.utils.volumeNormalizationKey
|
import it.hamy.muza.utils.volumeNormalizationKey
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
@@ -791,7 +791,7 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene
|
|||||||
mediaItem?.let(Database::insert)
|
mediaItem?.let(Database::insert)
|
||||||
|
|
||||||
Database.insert(
|
Database.insert(
|
||||||
it.vfsfitvnm.vimusic.models.Format(
|
it.hamy.muza.models.Format(
|
||||||
songId = videoId,
|
songId = videoId,
|
||||||
itag = format.itag,
|
itag = format.itag,
|
||||||
mimeType = format.mimeType,
|
mimeType = format.mimeType,
|
||||||
@@ -991,10 +991,10 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene
|
|||||||
)
|
)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val pause = Action("it.vfsfitvnm.vimusic.pause")
|
val pause = Action("it.hamy.muza.pause")
|
||||||
val play = Action("it.vfsfitvnm.vimusic.play")
|
val play = Action("it.hamy.muza.play")
|
||||||
val next = Action("it.vfsfitvnm.vimusic.next")
|
val next = Action("it.hamy.muza.next")
|
||||||
val previous = Action("it.vfsfitvnm.vimusic.previous")
|
val previous = Action("it.hamy.muza.previous")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components
|
package it.hamy.muza.ui.components
|
||||||
|
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.animation.core.Animatable
|
import androidx.compose.animation.core.Animatable
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components
|
package it.hamy.muza.ui.components
|
||||||
|
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components
|
package it.hamy.muza.ui.components
|
||||||
|
|
||||||
import androidx.compose.animation.core.Animatable
|
import androidx.compose.animation.core.Animatable
|
||||||
import androidx.compose.foundation.Canvas
|
import androidx.compose.foundation.Canvas
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components
|
package it.hamy.muza.ui.components
|
||||||
|
|
||||||
import androidx.compose.animation.core.MutableTransitionState
|
import androidx.compose.animation.core.MutableTransitionState
|
||||||
import androidx.compose.animation.core.animateDp
|
import androidx.compose.animation.core.animateDp
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components
|
package it.hamy.muza.ui.components
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.compose.animation.core.tween
|
import androidx.compose.animation.core.tween
|
||||||
import androidx.compose.animation.fadeIn
|
import androidx.compose.animation.fadeIn
|
||||||
@@ -48,12 +48,12 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.compose.ui.window.DialogProperties
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.utils.center
|
import it.hamy.muza.utils.center
|
||||||
import it.vfsfitvnm.vimusic.utils.drawCircle
|
import it.hamy.muza.utils.drawCircle
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.hamy.muza.utils.medium
|
||||||
import it.vfsfitvnm.vimusic.utils.secondary
|
import it.hamy.muza.utils.secondary
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -62,8 +62,8 @@ fun TextFieldDialog(
|
|||||||
onDismiss: () -> Unit,
|
onDismiss: () -> Unit,
|
||||||
onDone: (String) -> Unit,
|
onDone: (String) -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
cancelText: String = "Cancel",
|
cancelText: String = "Отмена",
|
||||||
doneText: String = "Done",
|
doneText: String = "Готово",
|
||||||
initialTextInput: String = "",
|
initialTextInput: String = "",
|
||||||
singleLine: Boolean = true,
|
singleLine: Boolean = true,
|
||||||
maxLines: Int = 1,
|
maxLines: Int = 1,
|
||||||
@@ -167,8 +167,8 @@ fun ConfirmationDialog(
|
|||||||
onDismiss: () -> Unit,
|
onDismiss: () -> Unit,
|
||||||
onConfirm: () -> Unit,
|
onConfirm: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
cancelText: String = "Cancel",
|
cancelText: String = "Отменить",
|
||||||
confirmText: String = "Confirm",
|
confirmText: String = "Продолжить",
|
||||||
onCancel: () -> Unit = onDismiss
|
onCancel: () -> Unit = onDismiss
|
||||||
) {
|
) {
|
||||||
val (_, typography) = LocalAppearance.current
|
val (_, typography) = LocalAppearance.current
|
||||||
@@ -324,7 +324,7 @@ inline fun <T> ValueSelectorDialog(
|
|||||||
.padding(end = 24.dp)
|
.padding(end = 24.dp)
|
||||||
) {
|
) {
|
||||||
DialogTextButton(
|
DialogTextButton(
|
||||||
text = "Cancel",
|
text = "Отмена",
|
||||||
onClick = onDismiss,
|
onClick = onDismiss,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
)
|
)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
@@ -10,9 +10,9 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.utils.color
|
import it.hamy.muza.utils.color
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.hamy.muza.utils.medium
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DialogTextButton(
|
fun DialogTextButton(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
@@ -24,11 +24,11 @@ import androidx.compose.runtime.rememberCoroutineScope
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.utils.ScrollingInfo
|
import it.hamy.muza.utils.ScrollingInfo
|
||||||
import it.vfsfitvnm.vimusic.utils.scrollingInfo
|
import it.hamy.muza.utils.scrollingInfo
|
||||||
import it.vfsfitvnm.vimusic.utils.smoothScrollToTop
|
import it.hamy.muza.utils.smoothScrollToTop
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
@@ -16,10 +16,10 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
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 it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
import it.hamy.muza.ui.styling.shimmer
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.hamy.muza.utils.medium
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.BoxWithConstraints
|
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||||
@@ -14,11 +14,11 @@ import androidx.compose.ui.graphics.Shape
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
import com.valentinilk.shimmer.shimmer
|
import com.valentinilk.shimmer.shimmer
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
import it.hamy.muza.ui.styling.shimmer
|
||||||
import it.vfsfitvnm.vimusic.utils.isLandscape
|
import it.hamy.muza.utils.isLandscape
|
||||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
import it.hamy.muza.utils.thumbnail
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
inline fun LayoutWithAdaptiveThumbnail(
|
inline fun LayoutWithAdaptiveThumbnail(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
@@ -43,34 +43,33 @@ import androidx.compose.ui.res.painterResource
|
|||||||
import androidx.compose.ui.unit.IntOffset
|
import androidx.compose.ui.unit.IntOffset
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.media3.common.MediaItem
|
import androidx.media3.common.MediaItem
|
||||||
import it.vfsfitvnm.innertube.models.NavigationEndpoint
|
import it.hamy.innertube.models.NavigationEndpoint
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
import it.hamy.muza.LocalPlayerServiceBinder
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
import it.hamy.muza.enums.PlaylistSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
import it.hamy.muza.enums.SortOrder
|
||||||
import it.vfsfitvnm.vimusic.models.Info
|
import it.hamy.muza.models.Info
|
||||||
import it.vfsfitvnm.vimusic.models.Playlist
|
import it.hamy.muza.models.Playlist
|
||||||
import it.vfsfitvnm.vimusic.models.Song
|
import it.hamy.muza.models.Song
|
||||||
import it.vfsfitvnm.vimusic.models.SongPlaylistMap
|
import it.hamy.muza.models.SongPlaylistMap
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.hamy.muza.query
|
||||||
import it.vfsfitvnm.vimusic.transaction
|
import it.hamy.muza.transaction
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
import it.hamy.muza.ui.items.SongItem
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
import it.hamy.muza.ui.screens.albumRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.artistRoute
|
import it.hamy.muza.ui.screens.artistRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.favoritesIcon
|
import it.hamy.muza.ui.styling.favoritesIcon
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.utils.addNext
|
import it.hamy.muza.utils.addNext
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.hamy.muza.utils.asMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.enqueue
|
import it.hamy.muza.utils.enqueue
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
import it.hamy.muza.utils.forcePlay
|
||||||
import it.vfsfitvnm.vimusic.utils.formatAsDuration
|
import it.hamy.muza.utils.formatAsDuration
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.hamy.muza.utils.medium
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
import it.hamy.muza.utils.thumbnail
|
||||||
import kotlin.system.measureTimeMillis
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.flowOf
|
import kotlinx.coroutines.flow.flowOf
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
@@ -22,9 +22,9 @@ import androidx.compose.ui.draw.alpha
|
|||||||
import androidx.compose.ui.graphics.ColorFilter
|
import androidx.compose.ui.graphics.ColorFilter
|
||||||
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 it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.hamy.muza.utils.medium
|
||||||
import it.vfsfitvnm.vimusic.utils.secondary
|
import it.hamy.muza.utils.secondary
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
inline fun Menu(
|
inline fun Menu(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.compose.animation.animateColor
|
import androidx.compose.animation.animateColor
|
||||||
import androidx.compose.animation.core.animateFloat
|
import androidx.compose.animation.core.animateFloat
|
||||||
@@ -32,13 +32,13 @@ import androidx.compose.ui.graphics.graphicsLayer
|
|||||||
import androidx.compose.ui.layout.layout
|
import androidx.compose.ui.layout.layout
|
||||||
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 it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.utils.center
|
import it.hamy.muza.utils.center
|
||||||
import it.vfsfitvnm.vimusic.utils.color
|
import it.hamy.muza.utils.color
|
||||||
import it.vfsfitvnm.vimusic.utils.isLandscape
|
import it.hamy.muza.utils.isLandscape
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
inline fun NavigationRail(
|
inline fun NavigationRail(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
@@ -14,8 +14,8 @@ import androidx.compose.ui.draw.clip
|
|||||||
import androidx.compose.ui.graphics.ColorFilter
|
import androidx.compose.ui.graphics.ColorFilter
|
||||||
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 it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.primaryButton
|
import it.hamy.muza.ui.styling.primaryButton
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun PrimaryButton(
|
fun PrimaryButton(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.compose.animation.AnimatedContent
|
import androidx.compose.animation.AnimatedContent
|
||||||
import androidx.compose.animation.AnimatedContentScope
|
import androidx.compose.animation.AnimatedContentScope
|
||||||
@@ -15,7 +15,7 @@ import androidx.compose.foundation.layout.fillMaxSize
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.IntOffset
|
import androidx.compose.ui.unit.IntOffset
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
|
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@Composable
|
@Composable
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
@@ -14,8 +14,8 @@ import androidx.compose.ui.draw.clip
|
|||||||
import androidx.compose.ui.graphics.ColorFilter
|
import androidx.compose.ui.graphics.ColorFilter
|
||||||
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 it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.primaryButton
|
import it.hamy.muza.ui.styling.primaryButton
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SecondaryButton(
|
fun SecondaryButton(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
@@ -9,9 +9,9 @@ import androidx.compose.runtime.Composable
|
|||||||
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.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.primaryButton
|
import it.hamy.muza.ui.styling.primaryButton
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.hamy.muza.utils.medium
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SecondaryTextButton(
|
fun SecondaryTextButton(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.compose.animation.animateColor
|
import androidx.compose.animation.animateColor
|
||||||
import androidx.compose.animation.core.animateDp
|
import androidx.compose.animation.core.animateDp
|
||||||
@@ -14,8 +14,8 @@ import androidx.compose.ui.geometry.center
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.Shadow
|
import androidx.compose.ui.graphics.Shadow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.utils.drawCircle
|
import it.hamy.muza.utils.drawCircle
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Switch(
|
fun Switch(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.components.themed
|
package it.hamy.muza.ui.components.themed
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
@@ -10,8 +10,8 @@ import androidx.compose.runtime.remember
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
import it.hamy.muza.ui.styling.shimmer
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.items
|
package it.hamy.muza.ui.items
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
@@ -13,14 +13,14 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
import it.vfsfitvnm.vimusic.models.Album
|
import it.hamy.muza.models.Album
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
import it.hamy.muza.ui.styling.shimmer
|
||||||
import it.vfsfitvnm.vimusic.utils.secondary
|
import it.hamy.muza.utils.secondary
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
import it.hamy.muza.utils.thumbnail
|
||||||
import it.vfsfitvnm.innertube.Innertube
|
import it.hamy.innertube.Innertube
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AlbumItem(
|
fun AlbumItem(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.items
|
package it.hamy.muza.ui.items
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
@@ -15,14 +15,14 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
import it.vfsfitvnm.vimusic.models.Artist
|
import it.hamy.muza.models.Artist
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
import it.hamy.muza.ui.styling.shimmer
|
||||||
import it.vfsfitvnm.vimusic.utils.secondary
|
import it.hamy.muza.utils.secondary
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
import it.hamy.muza.utils.thumbnail
|
||||||
import it.vfsfitvnm.innertube.Innertube
|
import it.hamy.innertube.Innertube
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ArtistItem(
|
fun ArtistItem(
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.items
|
package it.hamy.muza.ui.items
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.ColumnScope
|
import androidx.compose.foundation.layout.ColumnScope
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.RowScope
|
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
@@ -13,7 +12,7 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
inline fun ItemContainer(
|
inline fun ItemContainer(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.items
|
package it.hamy.muza.ui.items
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
@@ -27,19 +27,19 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
import it.hamy.muza.models.PlaylistPreview
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.onOverlay
|
import it.hamy.muza.ui.styling.onOverlay
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.overlay
|
import it.hamy.muza.ui.styling.overlay
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
import it.hamy.muza.ui.styling.shimmer
|
||||||
import it.vfsfitvnm.vimusic.utils.color
|
import it.hamy.muza.utils.color
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.hamy.muza.utils.medium
|
||||||
import it.vfsfitvnm.vimusic.utils.secondary
|
import it.hamy.muza.utils.secondary
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
import it.hamy.muza.utils.thumbnail
|
||||||
import it.vfsfitvnm.innertube.Innertube
|
import it.hamy.innertube.Innertube
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.items
|
package it.hamy.muza.ui.items
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
@@ -19,15 +19,15 @@ import androidx.compose.ui.unit.Dp
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.media3.common.MediaItem
|
import androidx.media3.common.MediaItem
|
||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
import it.hamy.muza.ui.styling.shimmer
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.hamy.muza.utils.medium
|
||||||
import it.vfsfitvnm.vimusic.utils.secondary
|
import it.hamy.muza.utils.secondary
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
import it.hamy.muza.utils.thumbnail
|
||||||
import it.vfsfitvnm.innertube.Innertube
|
import it.hamy.innertube.Innertube
|
||||||
import it.vfsfitvnm.vimusic.models.Song
|
import it.hamy.muza.models.Song
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SongItem(
|
fun SongItem(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.items
|
package it.hamy.muza.ui.items
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
@@ -16,16 +16,16 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.onOverlay
|
import it.hamy.muza.ui.styling.onOverlay
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.overlay
|
import it.hamy.muza.ui.styling.overlay
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
import it.hamy.muza.ui.styling.shimmer
|
||||||
import it.vfsfitvnm.vimusic.utils.color
|
import it.hamy.muza.utils.color
|
||||||
import it.vfsfitvnm.vimusic.utils.medium
|
import it.hamy.muza.utils.medium
|
||||||
import it.vfsfitvnm.vimusic.utils.secondary
|
import it.hamy.muza.utils.secondary
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
import it.vfsfitvnm.innertube.Innertube
|
import it.hamy.innertube.Innertube
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun VideoItem(
|
fun VideoItem(
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens
|
package it.hamy.muza.ui.screens
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import it.vfsfitvnm.compose.routing.Route0
|
import it.hamy.compose.routing.Route0
|
||||||
import it.vfsfitvnm.compose.routing.Route1
|
import it.hamy.compose.routing.Route1
|
||||||
import it.vfsfitvnm.compose.routing.RouteHandlerScope
|
import it.hamy.compose.routing.RouteHandlerScope
|
||||||
import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
import it.hamy.muza.enums.BuiltInPlaylist
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.album.AlbumScreen
|
import it.hamy.muza.ui.screens.album.AlbumScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.artist.ArtistScreen
|
import it.hamy.muza.ui.screens.artist.ArtistScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.playlist.PlaylistScreen
|
import it.hamy.muza.ui.screens.playlist.PlaylistScreen
|
||||||
|
|
||||||
val albumRoute = Route1<String?>("albumRoute")
|
val albumRoute = Route1<String?>("albumRoute")
|
||||||
val artistRoute = Route1<String?>("artistRoute")
|
val artistRoute = Route1<String?>("artistRoute")
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.album
|
package it.hamy.muza.ui.screens.album
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
@@ -17,30 +17,30 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.valentinilk.shimmer.shimmer
|
import com.valentinilk.shimmer.shimmer
|
||||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
import it.hamy.compose.persist.PersistMapCleanup
|
||||||
import it.vfsfitvnm.compose.persist.persist
|
import it.hamy.compose.persist.persist
|
||||||
import it.vfsfitvnm.innertube.Innertube
|
import it.hamy.innertube.Innertube
|
||||||
import it.vfsfitvnm.innertube.models.bodies.BrowseBody
|
import it.hamy.innertube.models.bodies.BrowseBody
|
||||||
import it.vfsfitvnm.innertube.requests.albumPage
|
import it.hamy.innertube.requests.albumPage
|
||||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
import it.hamy.compose.routing.RouteHandler
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.models.Album
|
import it.hamy.muza.models.Album
|
||||||
import it.vfsfitvnm.vimusic.models.SongAlbumMap
|
import it.hamy.muza.models.SongAlbumMap
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.hamy.muza.query
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
import it.hamy.muza.ui.components.themed.Header
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderPlaceholder
|
import it.hamy.muza.ui.components.themed.HeaderPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
import it.hamy.muza.ui.components.themed.Scaffold
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.adaptiveThumbnailContent
|
import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent
|
||||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItem
|
import it.hamy.muza.ui.items.AlbumItem
|
||||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder
|
import it.hamy.muza.ui.items.AlbumItemPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
import it.hamy.muza.ui.screens.albumRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
import it.hamy.muza.ui.screens.globalRoutes
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.searchresult.ItemsPage
|
import it.hamy.muza.ui.screens.searchresult.ItemsPage
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.hamy.muza.utils.asMediaItem
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
@@ -122,7 +122,7 @@ fun AlbumScreen(browseId: String) {
|
|||||||
val (colorPalette) = LocalAppearance.current
|
val (colorPalette) = LocalAppearance.current
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
Header(title = album?.title ?: "Unknown") {
|
Header(title = album?.title ?: "Неизвестный") {
|
||||||
textButton?.invoke()
|
textButton?.invoke()
|
||||||
|
|
||||||
Spacer(
|
Spacer(
|
||||||
@@ -182,8 +182,8 @@ fun AlbumScreen(browseId: String) {
|
|||||||
tabIndex = tabIndex,
|
tabIndex = tabIndex,
|
||||||
onTabChanged = { tabIndex = it },
|
onTabChanged = { tabIndex = it },
|
||||||
tabColumnContent = { Item ->
|
tabColumnContent = { Item ->
|
||||||
Item(0, "Songs", R.drawable.musical_notes)
|
Item(0, "Песни", R.drawable.musical_notes)
|
||||||
Item(1, "Other versions", R.drawable.disc)
|
Item(1, "Другие версии", R.drawable.disc)
|
||||||
}
|
}
|
||||||
) { currentTabIndex ->
|
) { currentTabIndex ->
|
||||||
saveableStateHolder.SaveableStateProvider(key = currentTabIndex) {
|
saveableStateHolder.SaveableStateProvider(key = currentTabIndex) {
|
||||||
@@ -203,7 +203,7 @@ fun AlbumScreen(browseId: String) {
|
|||||||
headerContent = headerContent,
|
headerContent = headerContent,
|
||||||
initialPlaceholderCount = 1,
|
initialPlaceholderCount = 1,
|
||||||
continuationPlaceholderCount = 1,
|
continuationPlaceholderCount = 1,
|
||||||
emptyItemsText = "This album doesn't have any alternative version",
|
emptyItemsText = "Этот альбом не имеет других версий",
|
||||||
itemsPageProvider = albumPage?.let {
|
itemsPageProvider = albumPage?.let {
|
||||||
({
|
({
|
||||||
Result.success(
|
Result.success(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.album
|
package it.hamy.muza.ui.screens.album
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
@@ -22,30 +22,30 @@ 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.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import it.vfsfitvnm.compose.persist.persistList
|
import it.hamy.compose.persist.persistList
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
import it.hamy.muza.LocalPlayerServiceBinder
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.models.Song
|
import it.hamy.muza.models.Song
|
||||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
import it.hamy.muza.ui.components.LocalMenuState
|
||||||
import it.vfsfitvnm.vimusic.ui.components.ShimmerHost
|
import it.hamy.muza.ui.components.ShimmerHost
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail
|
import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
import it.hamy.muza.ui.items.SongItem
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.hamy.muza.utils.asMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.center
|
import it.hamy.muza.utils.center
|
||||||
import it.vfsfitvnm.vimusic.utils.color
|
import it.hamy.muza.utils.color
|
||||||
import it.vfsfitvnm.vimusic.utils.enqueue
|
import it.hamy.muza.utils.enqueue
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
import it.hamy.muza.utils.forcePlayAtIndex
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
|
import it.hamy.muza.utils.forcePlayFromBeginning
|
||||||
import it.vfsfitvnm.vimusic.utils.isLandscape
|
import it.hamy.muza.utils.isLandscape
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
|
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@@ -86,7 +86,7 @@ fun AlbumSongs(
|
|||||||
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
||||||
headerContent {
|
headerContent {
|
||||||
SecondaryTextButton(
|
SecondaryTextButton(
|
||||||
text = "Enqueue",
|
text = "В очередь",
|
||||||
enabled = songs.isNotEmpty(),
|
enabled = songs.isNotEmpty(),
|
||||||
onClick = {
|
onClick = {
|
||||||
binder?.player?.enqueue(songs.map(Song::asMediaItem))
|
binder?.player?.enqueue(songs.map(Song::asMediaItem))
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.artist
|
package it.hamy.muza.ui.screens.artist
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
@@ -19,27 +19,27 @@ import androidx.compose.runtime.getValue
|
|||||||
import androidx.compose.runtime.setValue
|
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 it.vfsfitvnm.compose.persist.persist
|
import it.hamy.compose.persist.persist
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
import it.hamy.muza.LocalPlayerServiceBinder
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.models.Song
|
import it.hamy.muza.models.Song
|
||||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
import it.hamy.muza.ui.components.LocalMenuState
|
||||||
import it.vfsfitvnm.vimusic.ui.components.ShimmerHost
|
import it.hamy.muza.ui.components.ShimmerHost
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail
|
import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
import it.hamy.muza.ui.items.SongItem
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.hamy.muza.utils.asMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.enqueue
|
import it.hamy.muza.utils.enqueue
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
import it.hamy.muza.utils.forcePlayAtIndex
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
|
import it.hamy.muza.utils.forcePlayFromBeginning
|
||||||
|
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@@ -81,7 +81,7 @@ fun ArtistLocalSongs(
|
|||||||
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
||||||
headerContent {
|
headerContent {
|
||||||
SecondaryTextButton(
|
SecondaryTextButton(
|
||||||
text = "Enqueue",
|
text = "В очередь",
|
||||||
enabled = !songs.isNullOrEmpty(),
|
enabled = !songs.isNullOrEmpty(),
|
||||||
onClick = {
|
onClick = {
|
||||||
binder?.player?.enqueue(songs!!.map(Song::asMediaItem))
|
binder?.player?.enqueue(songs!!.map(Song::asMediaItem))
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.artist
|
package it.hamy.muza.ui.screens.artist
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
@@ -26,31 +26,31 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.innertube.Innertube
|
import it.hamy.innertube.Innertube
|
||||||
import it.vfsfitvnm.innertube.models.NavigationEndpoint
|
import it.hamy.innertube.models.NavigationEndpoint
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
import it.hamy.muza.LocalPlayerServiceBinder
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
import it.hamy.muza.ui.components.LocalMenuState
|
||||||
import it.vfsfitvnm.vimusic.ui.components.ShimmerHost
|
import it.hamy.muza.ui.components.ShimmerHost
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail
|
import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItem
|
import it.hamy.muza.ui.items.AlbumItem
|
||||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder
|
import it.hamy.muza.ui.items.AlbumItemPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
import it.hamy.muza.ui.items.SongItem
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.utils.align
|
import it.hamy.muza.utils.align
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.hamy.muza.utils.asMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.color
|
import it.hamy.muza.utils.color
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
import it.hamy.muza.utils.forcePlay
|
||||||
import it.vfsfitvnm.vimusic.utils.secondary
|
import it.hamy.muza.utils.secondary
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
|
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@@ -103,7 +103,7 @@ fun ArtistOverview(
|
|||||||
headerContent {
|
headerContent {
|
||||||
youtubeArtistPage?.shuffleEndpoint?.let { endpoint ->
|
youtubeArtistPage?.shuffleEndpoint?.let { endpoint ->
|
||||||
SecondaryTextButton(
|
SecondaryTextButton(
|
||||||
text = "Shuffle",
|
text = "Перемешать",
|
||||||
onClick = {
|
onClick = {
|
||||||
binder?.stopRadio()
|
binder?.stopRadio()
|
||||||
binder?.playRadio(endpoint)
|
binder?.playRadio(endpoint)
|
||||||
@@ -125,14 +125,14 @@ fun ArtistOverview(
|
|||||||
.padding(endPaddingValues)
|
.padding(endPaddingValues)
|
||||||
) {
|
) {
|
||||||
BasicText(
|
BasicText(
|
||||||
text = "Songs",
|
text = "Песни",
|
||||||
style = typography.m.semiBold,
|
style = typography.m.semiBold,
|
||||||
modifier = sectionTextModifier
|
modifier = sectionTextModifier
|
||||||
)
|
)
|
||||||
|
|
||||||
youtubeArtistPage.songsEndpoint?.let {
|
youtubeArtistPage.songsEndpoint?.let {
|
||||||
BasicText(
|
BasicText(
|
||||||
text = "View all",
|
text = "Все",
|
||||||
style = typography.xs.secondary,
|
style = typography.xs.secondary,
|
||||||
modifier = sectionTextModifier
|
modifier = sectionTextModifier
|
||||||
.clickable(onClick = onViewAllSongsClick),
|
.clickable(onClick = onViewAllSongsClick),
|
||||||
@@ -178,14 +178,14 @@ fun ArtistOverview(
|
|||||||
.padding(endPaddingValues)
|
.padding(endPaddingValues)
|
||||||
) {
|
) {
|
||||||
BasicText(
|
BasicText(
|
||||||
text = "Albums",
|
text = "Альбомы",
|
||||||
style = typography.m.semiBold,
|
style = typography.m.semiBold,
|
||||||
modifier = sectionTextModifier
|
modifier = sectionTextModifier
|
||||||
)
|
)
|
||||||
|
|
||||||
youtubeArtistPage.albumsEndpoint?.let {
|
youtubeArtistPage.albumsEndpoint?.let {
|
||||||
BasicText(
|
BasicText(
|
||||||
text = "View all",
|
text = "Все",
|
||||||
style = typography.xs.secondary,
|
style = typography.xs.secondary,
|
||||||
modifier = sectionTextModifier
|
modifier = sectionTextModifier
|
||||||
.clickable(onClick = onViewAllAlbumsClick),
|
.clickable(onClick = onViewAllAlbumsClick),
|
||||||
@@ -223,14 +223,14 @@ fun ArtistOverview(
|
|||||||
.padding(endPaddingValues)
|
.padding(endPaddingValues)
|
||||||
) {
|
) {
|
||||||
BasicText(
|
BasicText(
|
||||||
text = "Singles",
|
text = "Синглы",
|
||||||
style = typography.m.semiBold,
|
style = typography.m.semiBold,
|
||||||
modifier = sectionTextModifier
|
modifier = sectionTextModifier
|
||||||
)
|
)
|
||||||
|
|
||||||
youtubeArtistPage.singlesEndpoint?.let {
|
youtubeArtistPage.singlesEndpoint?.let {
|
||||||
BasicText(
|
BasicText(
|
||||||
text = "View all",
|
text = "Все",
|
||||||
style = typography.xs.secondary,
|
style = typography.xs.secondary,
|
||||||
modifier = sectionTextModifier
|
modifier = sectionTextModifier
|
||||||
.clickable(onClick = onViewAllSinglesClick),
|
.clickable(onClick = onViewAllSinglesClick),
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.artist
|
package it.hamy.muza.ui.screens.artist
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
@@ -17,41 +17,41 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.valentinilk.shimmer.shimmer
|
import com.valentinilk.shimmer.shimmer
|
||||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
import it.hamy.compose.persist.PersistMapCleanup
|
||||||
import it.vfsfitvnm.compose.persist.persist
|
import it.hamy.compose.persist.persist
|
||||||
import it.vfsfitvnm.innertube.Innertube
|
import it.hamy.innertube.Innertube
|
||||||
import it.vfsfitvnm.innertube.models.bodies.BrowseBody
|
import it.hamy.innertube.models.bodies.BrowseBody
|
||||||
import it.vfsfitvnm.innertube.models.bodies.ContinuationBody
|
import it.hamy.innertube.models.bodies.ContinuationBody
|
||||||
import it.vfsfitvnm.innertube.requests.artistPage
|
import it.hamy.innertube.requests.artistPage
|
||||||
import it.vfsfitvnm.innertube.requests.itemsPage
|
import it.hamy.innertube.requests.itemsPage
|
||||||
import it.vfsfitvnm.innertube.utils.from
|
import it.hamy.innertube.utils.from
|
||||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
import it.hamy.compose.routing.RouteHandler
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
import it.hamy.muza.LocalPlayerServiceBinder
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.models.Artist
|
import it.hamy.muza.models.Artist
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.hamy.muza.query
|
||||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
import it.hamy.muza.ui.components.LocalMenuState
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
import it.hamy.muza.ui.components.themed.Header
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderPlaceholder
|
import it.hamy.muza.ui.components.themed.HeaderPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
import it.hamy.muza.ui.components.themed.Scaffold
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.adaptiveThumbnailContent
|
import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent
|
||||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItem
|
import it.hamy.muza.ui.items.AlbumItem
|
||||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder
|
import it.hamy.muza.ui.items.AlbumItemPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
import it.hamy.muza.ui.items.SongItem
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
import it.hamy.muza.ui.screens.albumRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
import it.hamy.muza.ui.screens.globalRoutes
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.searchresult.ItemsPage
|
import it.hamy.muza.ui.screens.searchresult.ItemsPage
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.utils.artistScreenTabIndexKey
|
import it.hamy.muza.utils.artistScreenTabIndexKey
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.hamy.muza.utils.asMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
import it.hamy.muza.utils.forcePlay
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
import it.hamy.muza.utils.rememberPreference
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.builtinplaylist
|
package it.hamy.muza.ui.screens.builtinplaylist
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
@@ -6,12 +6,12 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
|
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
|
||||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
import it.hamy.compose.persist.PersistMapCleanup
|
||||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
import it.hamy.compose.routing.RouteHandler
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
import it.hamy.muza.enums.BuiltInPlaylist
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
import it.hamy.muza.ui.components.themed.Scaffold
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
import it.hamy.muza.ui.screens.globalRoutes
|
||||||
|
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@@ -38,8 +38,8 @@ fun BuiltInPlaylistScreen(builtInPlaylist: BuiltInPlaylist) {
|
|||||||
tabIndex = tabIndex,
|
tabIndex = tabIndex,
|
||||||
onTabChanged = onTabIndexChanged,
|
onTabChanged = onTabIndexChanged,
|
||||||
tabColumnContent = { Item ->
|
tabColumnContent = { Item ->
|
||||||
Item(0, "Favorites", R.drawable.heart)
|
Item(0, "Любимые", R.drawable.heart)
|
||||||
Item(1, "Offline", R.drawable.airplane)
|
Item(1, "Сохранённые", R.drawable.airplane)
|
||||||
}
|
}
|
||||||
) { currentTabIndex ->
|
) { currentTabIndex ->
|
||||||
saveableStateHolder.SaveableStateProvider(key = currentTabIndex) {
|
saveableStateHolder.SaveableStateProvider(key = currentTabIndex) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.builtinplaylist
|
package it.hamy.muza.ui.screens.builtinplaylist
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
@@ -20,28 +20,28 @@ import androidx.compose.runtime.getValue
|
|||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.compose.persist.persistList
|
import it.hamy.compose.persist.persistList
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
import it.hamy.muza.LocalPlayerServiceBinder
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
import it.hamy.muza.enums.BuiltInPlaylist
|
||||||
import it.vfsfitvnm.vimusic.models.Song
|
import it.hamy.muza.models.Song
|
||||||
import it.vfsfitvnm.vimusic.models.SongWithContentLength
|
import it.hamy.muza.models.SongWithContentLength
|
||||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
import it.hamy.muza.ui.components.LocalMenuState
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
import it.hamy.muza.ui.components.themed.Header
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu
|
import it.hamy.muza.ui.components.themed.InHistoryMediaItemMenu
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
import it.hamy.muza.ui.items.SongItem
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.hamy.muza.utils.asMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.enqueue
|
import it.hamy.muza.utils.enqueue
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
import it.hamy.muza.utils.forcePlayAtIndex
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
|
import it.hamy.muza.utils.forcePlayFromBeginning
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.flowOn
|
import kotlinx.coroutines.flow.flowOn
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
@@ -94,14 +94,14 @@ fun BuiltInPlaylistSongs(builtInPlaylist: BuiltInPlaylist) {
|
|||||||
) {
|
) {
|
||||||
Header(
|
Header(
|
||||||
title = when (builtInPlaylist) {
|
title = when (builtInPlaylist) {
|
||||||
BuiltInPlaylist.Favorites -> "Favorites"
|
BuiltInPlaylist.Favorites -> "Любимые"
|
||||||
BuiltInPlaylist.Offline -> "Offline"
|
BuiltInPlaylist.Offline -> "Сохранённые"
|
||||||
},
|
},
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(bottom = 8.dp)
|
.padding(bottom = 8.dp)
|
||||||
) {
|
) {
|
||||||
SecondaryTextButton(
|
SecondaryTextButton(
|
||||||
text = "Enqueue",
|
text = "В очередь",
|
||||||
enabled = songs.isNotEmpty(),
|
enabled = songs.isNotEmpty(),
|
||||||
onClick = {
|
onClick = {
|
||||||
binder?.player?.enqueue(songs.map(Song::asMediaItem))
|
binder?.player?.enqueue(songs.map(Song::asMediaItem))
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.home
|
package it.hamy.muza.ui.screens.home
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.animation.core.LinearEasing
|
import androidx.compose.animation.core.LinearEasing
|
||||||
@@ -15,34 +15,32 @@ import androidx.compose.foundation.layout.fillMaxSize
|
|||||||
import androidx.compose.foundation.layout.only
|
import androidx.compose.foundation.layout.only
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.LazyListState
|
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.graphicsLayer
|
import androidx.compose.ui.graphics.graphicsLayer
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.compose.persist.persist
|
import it.hamy.compose.persist.persist
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.enums.AlbumSortBy
|
import it.hamy.muza.enums.AlbumSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
import it.hamy.muza.enums.SortOrder
|
||||||
import it.vfsfitvnm.vimusic.models.Album
|
import it.hamy.muza.models.Album
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
import it.hamy.muza.ui.components.themed.Header
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItem
|
import it.hamy.muza.ui.items.AlbumItem
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.utils.albumSortByKey
|
import it.hamy.muza.utils.albumSortByKey
|
||||||
import it.vfsfitvnm.vimusic.utils.albumSortOrderKey
|
import it.hamy.muza.utils.albumSortOrderKey
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
import it.hamy.muza.utils.rememberPreference
|
||||||
|
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@@ -85,7 +83,7 @@ fun HomeAlbums(
|
|||||||
key = "header",
|
key = "header",
|
||||||
contentType = 0
|
contentType = 0
|
||||||
) {
|
) {
|
||||||
Header(title = "Albums") {
|
Header(title = "Альбомы") {
|
||||||
HeaderIconButton(
|
HeaderIconButton(
|
||||||
icon = R.drawable.calendar,
|
icon = R.drawable.calendar,
|
||||||
color = if (sortBy == AlbumSortBy.Year) colorPalette.text else colorPalette.textDisabled,
|
color = if (sortBy == AlbumSortBy.Year) colorPalette.text else colorPalette.textDisabled,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.home
|
package it.hamy.muza.ui.screens.home
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.animation.core.LinearEasing
|
import androidx.compose.animation.core.LinearEasing
|
||||||
@@ -28,23 +28,23 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.graphicsLayer
|
import androidx.compose.ui.graphics.graphicsLayer
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.compose.persist.persistList
|
import it.hamy.compose.persist.persistList
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.enums.ArtistSortBy
|
import it.hamy.muza.enums.ArtistSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
import it.hamy.muza.enums.SortOrder
|
||||||
import it.vfsfitvnm.vimusic.models.Artist
|
import it.hamy.muza.models.Artist
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
import it.hamy.muza.ui.components.themed.Header
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||||
import it.vfsfitvnm.vimusic.ui.items.ArtistItem
|
import it.hamy.muza.ui.items.ArtistItem
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.utils.artistSortByKey
|
import it.hamy.muza.utils.artistSortByKey
|
||||||
import it.vfsfitvnm.vimusic.utils.artistSortOrderKey
|
import it.hamy.muza.utils.artistSortOrderKey
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
import it.hamy.muza.utils.rememberPreference
|
||||||
|
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@@ -94,7 +94,7 @@ fun HomeArtistList(
|
|||||||
contentType = 0,
|
contentType = 0,
|
||||||
span = { GridItemSpan(maxLineSpan) }
|
span = { GridItemSpan(maxLineSpan) }
|
||||||
) {
|
) {
|
||||||
Header(title = "Artists") {
|
Header(title = "Исполнители") {
|
||||||
HeaderIconButton(
|
HeaderIconButton(
|
||||||
icon = R.drawable.text,
|
icon = R.drawable.text,
|
||||||
color = if (sortBy == ArtistSortBy.Name) colorPalette.text else colorPalette.textDisabled,
|
color = if (sortBy == ArtistSortBy.Name) colorPalette.text else colorPalette.textDisabled,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.home
|
package it.hamy.muza.ui.screens.home
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.animation.core.LinearEasing
|
import androidx.compose.animation.core.LinearEasing
|
||||||
@@ -30,28 +30,28 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.graphicsLayer
|
import androidx.compose.ui.graphics.graphicsLayer
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import it.vfsfitvnm.compose.persist.persistList
|
import it.hamy.compose.persist.persistList
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
import it.hamy.muza.enums.BuiltInPlaylist
|
||||||
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
import it.hamy.muza.enums.PlaylistSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
import it.hamy.muza.enums.SortOrder
|
||||||
import it.vfsfitvnm.vimusic.models.Playlist
|
import it.hamy.muza.models.Playlist
|
||||||
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
import it.hamy.muza.models.PlaylistPreview
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.hamy.muza.query
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
import it.hamy.muza.ui.components.themed.Header
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog
|
import it.hamy.muza.ui.components.themed.TextFieldDialog
|
||||||
import it.vfsfitvnm.vimusic.ui.items.PlaylistItem
|
import it.hamy.muza.ui.items.PlaylistItem
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.utils.playlistSortByKey
|
import it.hamy.muza.utils.playlistSortByKey
|
||||||
import it.vfsfitvnm.vimusic.utils.playlistSortOrderKey
|
import it.hamy.muza.utils.playlistSortOrderKey
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
import it.hamy.muza.utils.rememberPreference
|
||||||
|
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@@ -69,7 +69,7 @@ fun HomePlaylists(
|
|||||||
|
|
||||||
if (isCreatingANewPlaylist) {
|
if (isCreatingANewPlaylist) {
|
||||||
TextFieldDialog(
|
TextFieldDialog(
|
||||||
hintText = "Enter the playlist name",
|
hintText = "Введите название плейлиста",
|
||||||
onDismiss = {
|
onDismiss = {
|
||||||
isCreatingANewPlaylist = false
|
isCreatingANewPlaylist = false
|
||||||
},
|
},
|
||||||
@@ -116,9 +116,9 @@ fun HomePlaylists(
|
|||||||
.background(colorPalette.background0)
|
.background(colorPalette.background0)
|
||||||
) {
|
) {
|
||||||
item(key = "header", contentType = 0, span = { GridItemSpan(maxLineSpan) }) {
|
item(key = "header", contentType = 0, span = { GridItemSpan(maxLineSpan) }) {
|
||||||
Header(title = "Playlists") {
|
Header(title = "Плейлисты") {
|
||||||
SecondaryTextButton(
|
SecondaryTextButton(
|
||||||
text = "New playlist",
|
text = "Новый плейлист",
|
||||||
onClick = { isCreatingANewPlaylist = true }
|
onClick = { isCreatingANewPlaylist = true }
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -164,7 +164,7 @@ fun HomePlaylists(
|
|||||||
PlaylistItem(
|
PlaylistItem(
|
||||||
icon = R.drawable.heart,
|
icon = R.drawable.heart,
|
||||||
colorTint = colorPalette.red,
|
colorTint = colorPalette.red,
|
||||||
name = "Favorites",
|
name = "Любимые",
|
||||||
songCount = null,
|
songCount = null,
|
||||||
thumbnailSizeDp = thumbnailSizeDp,
|
thumbnailSizeDp = thumbnailSizeDp,
|
||||||
alternative = true,
|
alternative = true,
|
||||||
@@ -178,7 +178,7 @@ fun HomePlaylists(
|
|||||||
PlaylistItem(
|
PlaylistItem(
|
||||||
icon = R.drawable.airplane,
|
icon = R.drawable.airplane,
|
||||||
colorTint = colorPalette.blue,
|
colorTint = colorPalette.blue,
|
||||||
name = "Offline",
|
name = "Сохранённые",
|
||||||
songCount = null,
|
songCount = null,
|
||||||
thumbnailSizeDp = thumbnailSizeDp,
|
thumbnailSizeDp = thumbnailSizeDp,
|
||||||
alternative = true,
|
alternative = true,
|
||||||
@@ -1,41 +1,41 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.home
|
package it.hamy.muza.ui.screens.home
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
|
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
import it.hamy.compose.persist.PersistMapCleanup
|
||||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
import it.hamy.compose.routing.RouteHandler
|
||||||
import it.vfsfitvnm.compose.routing.defaultStacking
|
import it.hamy.compose.routing.defaultStacking
|
||||||
import it.vfsfitvnm.compose.routing.defaultStill
|
import it.hamy.compose.routing.defaultStill
|
||||||
import it.vfsfitvnm.compose.routing.defaultUnstacking
|
import it.hamy.compose.routing.defaultUnstacking
|
||||||
import it.vfsfitvnm.compose.routing.isStacking
|
import it.hamy.compose.routing.isStacking
|
||||||
import it.vfsfitvnm.compose.routing.isUnknown
|
import it.hamy.compose.routing.isUnknown
|
||||||
import it.vfsfitvnm.compose.routing.isUnstacking
|
import it.hamy.compose.routing.isUnstacking
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.models.SearchQuery
|
import it.hamy.muza.models.SearchQuery
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.hamy.muza.query
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
import it.hamy.muza.ui.components.themed.Scaffold
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
import it.hamy.muza.ui.screens.albumRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.artistRoute
|
import it.hamy.muza.ui.screens.artistRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.builtInPlaylistRoute
|
import it.hamy.muza.ui.screens.builtInPlaylistRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.builtinplaylist.BuiltInPlaylistScreen
|
import it.hamy.muza.ui.screens.builtinplaylist.BuiltInPlaylistScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
import it.hamy.muza.ui.screens.globalRoutes
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.localPlaylistRoute
|
import it.hamy.muza.ui.screens.localPlaylistRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.localplaylist.LocalPlaylistScreen
|
import it.hamy.muza.ui.screens.localplaylist.LocalPlaylistScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.playlistRoute
|
import it.hamy.muza.ui.screens.playlistRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.search.SearchScreen
|
import it.hamy.muza.ui.screens.search.SearchScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.searchResultRoute
|
import it.hamy.muza.ui.screens.searchResultRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.searchRoute
|
import it.hamy.muza.ui.screens.searchRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.searchresult.SearchResultScreen
|
import it.hamy.muza.ui.screens.searchresult.SearchResultScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.settings.SettingsScreen
|
import it.hamy.muza.ui.screens.settings.SettingsScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.settingsRoute
|
import it.hamy.muza.ui.screens.settingsRoute
|
||||||
import it.vfsfitvnm.vimusic.utils.homeScreenTabIndexKey
|
import it.hamy.muza.utils.homeScreenTabIndexKey
|
||||||
import it.vfsfitvnm.vimusic.utils.pauseSearchHistoryKey
|
import it.hamy.muza.utils.pauseSearchHistoryKey
|
||||||
import it.vfsfitvnm.vimusic.utils.preferences
|
import it.hamy.muza.utils.preferences
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
import it.hamy.muza.utils.rememberPreference
|
||||||
|
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@@ -119,11 +119,11 @@ fun HomeScreen(onPlaylistUrl: (String) -> Unit) {
|
|||||||
tabIndex = tabIndex,
|
tabIndex = tabIndex,
|
||||||
onTabChanged = onTabChanged,
|
onTabChanged = onTabChanged,
|
||||||
tabColumnContent = { Item ->
|
tabColumnContent = { Item ->
|
||||||
Item(0, "Quick picks", R.drawable.sparkles)
|
Item(0, "Обзор", R.drawable.sparkles)
|
||||||
Item(1, "Songs", R.drawable.musical_notes)
|
Item(1, "Песни", R.drawable.musical_notes)
|
||||||
Item(2, "Playlists", R.drawable.playlist)
|
Item(2, "Плейлисты", R.drawable.playlist)
|
||||||
Item(3, "Artists", R.drawable.person)
|
Item(3, "Исполнители", R.drawable.person)
|
||||||
Item(4, "Albums", R.drawable.disc)
|
Item(4, "Альбомы", R.drawable.disc)
|
||||||
}
|
}
|
||||||
) { currentTabIndex ->
|
) { currentTabIndex ->
|
||||||
saveableStateHolder.SaveableStateProvider(key = currentTabIndex) {
|
saveableStateHolder.SaveableStateProvider(key = currentTabIndex) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.screens.home
|
package it.hamy.muza.ui.screens.home
|
||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.animation.core.LinearEasing
|
import androidx.compose.animation.core.LinearEasing
|
||||||
@@ -31,33 +31,33 @@ import androidx.compose.ui.graphics.Color
|
|||||||
import androidx.compose.ui.graphics.graphicsLayer
|
import androidx.compose.ui.graphics.graphicsLayer
|
||||||
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 it.vfsfitvnm.compose.persist.persistList
|
import it.hamy.compose.persist.persistList
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.hamy.muza.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
import it.hamy.muza.LocalPlayerServiceBinder
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.hamy.muza.R
|
||||||
import it.vfsfitvnm.vimusic.enums.SongSortBy
|
import it.hamy.muza.enums.SongSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
import it.hamy.muza.enums.SortOrder
|
||||||
import it.vfsfitvnm.vimusic.models.Song
|
import it.hamy.muza.models.Song
|
||||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
import it.hamy.muza.ui.components.LocalMenuState
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
import it.hamy.muza.ui.components.themed.Header
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu
|
import it.hamy.muza.ui.components.themed.InHistoryMediaItemMenu
|
||||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
import it.hamy.muza.ui.items.SongItem
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.hamy.muza.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.hamy.muza.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.onOverlay
|
import it.hamy.muza.ui.styling.onOverlay
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.overlay
|
import it.hamy.muza.ui.styling.overlay
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.hamy.muza.ui.styling.px
|
||||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
import it.hamy.muza.utils.asMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.center
|
import it.hamy.muza.utils.center
|
||||||
import it.vfsfitvnm.vimusic.utils.color
|
import it.hamy.muza.utils.color
|
||||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
import it.hamy.muza.utils.forcePlayAtIndex
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
import it.hamy.muza.utils.rememberPreference
|
||||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
import it.hamy.muza.utils.semiBold
|
||||||
import it.vfsfitvnm.vimusic.utils.songSortByKey
|
import it.hamy.muza.utils.songSortByKey
|
||||||
import it.vfsfitvnm.vimusic.utils.songSortOrderKey
|
import it.hamy.muza.utils.songSortOrderKey
|
||||||
|
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@@ -102,7 +102,7 @@ fun HomeSongs(
|
|||||||
key = "header",
|
key = "header",
|
||||||
contentType = 0
|
contentType = 0
|
||||||
) {
|
) {
|
||||||
Header(title = "Songs") {
|
Header(title = "Песни") {
|
||||||
HeaderIconButton(
|
HeaderIconButton(
|
||||||
icon = R.drawable.trending,
|
icon = R.drawable.trending,
|
||||||
color = if (sortBy == SongSortBy.PlayTime) colorPalette.text else colorPalette.textDisabled,
|
color = if (sortBy == SongSortBy.PlayTime) colorPalette.text else colorPalette.textDisabled,
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user