Перевод
Мелкие шайтанские фокусы
This commit is contained in:
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.Context
|
||||
@@ -31,28 +31,28 @@ import androidx.room.migration.Migration
|
||||
import androidx.sqlite.db.SimpleSQLiteQuery
|
||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||
import androidx.sqlite.db.SupportSQLiteQuery
|
||||
import it.vfsfitvnm.vimusic.enums.AlbumSortBy
|
||||
import it.vfsfitvnm.vimusic.enums.ArtistSortBy
|
||||
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
||||
import it.vfsfitvnm.vimusic.enums.SongSortBy
|
||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
||||
import it.vfsfitvnm.vimusic.models.Album
|
||||
import it.vfsfitvnm.vimusic.models.Artist
|
||||
import it.vfsfitvnm.vimusic.models.SongWithContentLength
|
||||
import it.vfsfitvnm.vimusic.models.Event
|
||||
import it.vfsfitvnm.vimusic.models.Format
|
||||
import it.vfsfitvnm.vimusic.models.Info
|
||||
import it.vfsfitvnm.vimusic.models.Lyrics
|
||||
import it.vfsfitvnm.vimusic.models.Playlist
|
||||
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
||||
import it.vfsfitvnm.vimusic.models.PlaylistWithSongs
|
||||
import it.vfsfitvnm.vimusic.models.QueuedMediaItem
|
||||
import it.vfsfitvnm.vimusic.models.SearchQuery
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.models.SongAlbumMap
|
||||
import it.vfsfitvnm.vimusic.models.SongArtistMap
|
||||
import it.vfsfitvnm.vimusic.models.SongPlaylistMap
|
||||
import it.vfsfitvnm.vimusic.models.SortedSongPlaylistMap
|
||||
import it.hamy.muza.enums.AlbumSortBy
|
||||
import it.hamy.muza.enums.ArtistSortBy
|
||||
import it.hamy.muza.enums.PlaylistSortBy
|
||||
import it.hamy.muza.enums.SongSortBy
|
||||
import it.hamy.muza.enums.SortOrder
|
||||
import it.hamy.muza.models.Album
|
||||
import it.hamy.muza.models.Artist
|
||||
import it.hamy.muza.models.SongWithContentLength
|
||||
import it.hamy.muza.models.Event
|
||||
import it.hamy.muza.models.Format
|
||||
import it.hamy.muza.models.Info
|
||||
import it.hamy.muza.models.Lyrics
|
||||
import it.hamy.muza.models.Playlist
|
||||
import it.hamy.muza.models.PlaylistPreview
|
||||
import it.hamy.muza.models.PlaylistWithSongs
|
||||
import it.hamy.muza.models.QueuedMediaItem
|
||||
import it.hamy.muza.models.SearchQuery
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.models.SongAlbumMap
|
||||
import it.hamy.muza.models.SongArtistMap
|
||||
import it.hamy.muza.models.SongPlaylistMap
|
||||
import it.hamy.muza.models.SortedSongPlaylistMap
|
||||
import kotlin.jvm.Throws
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic
|
||||
package it.hamy.muza
|
||||
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
@@ -58,42 +58,42 @@ import androidx.media3.common.MediaItem
|
||||
import androidx.media3.common.Player
|
||||
import com.valentinilk.shimmer.LocalShimmerTheme
|
||||
import com.valentinilk.shimmer.defaultShimmerTheme
|
||||
import it.vfsfitvnm.compose.persist.PersistMap
|
||||
import it.vfsfitvnm.compose.persist.PersistMapOwner
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.bodies.BrowseBody
|
||||
import it.vfsfitvnm.innertube.requests.playlistPage
|
||||
import it.vfsfitvnm.innertube.requests.song
|
||||
import it.vfsfitvnm.vimusic.enums.ColorPaletteMode
|
||||
import it.vfsfitvnm.vimusic.enums.ColorPaletteName
|
||||
import it.vfsfitvnm.vimusic.enums.ThumbnailRoundness
|
||||
import it.vfsfitvnm.vimusic.service.PlayerService
|
||||
import it.vfsfitvnm.vimusic.ui.components.BottomSheetMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.rememberBottomSheetState
|
||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.artistRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.home.HomeScreen
|
||||
import it.vfsfitvnm.vimusic.ui.screens.player.Player
|
||||
import it.vfsfitvnm.vimusic.ui.screens.playlistRoute
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Appearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.colorPaletteOf
|
||||
import it.vfsfitvnm.vimusic.ui.styling.dynamicColorPaletteOf
|
||||
import it.vfsfitvnm.vimusic.ui.styling.typographyOf
|
||||
import it.vfsfitvnm.vimusic.utils.applyFontPaddingKey
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.colorPaletteModeKey
|
||||
import it.vfsfitvnm.vimusic.utils.colorPaletteNameKey
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
||||
import it.vfsfitvnm.vimusic.utils.getEnum
|
||||
import it.vfsfitvnm.vimusic.utils.intent
|
||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid6
|
||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid8
|
||||
import it.vfsfitvnm.vimusic.utils.preferences
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnailRoundnessKey
|
||||
import it.vfsfitvnm.vimusic.utils.useSystemFontKey
|
||||
import it.hamy.compose.persist.PersistMap
|
||||
import it.hamy.compose.persist.PersistMapOwner
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.bodies.BrowseBody
|
||||
import it.hamy.innertube.requests.playlistPage
|
||||
import it.hamy.innertube.requests.song
|
||||
import it.hamy.muza.enums.ColorPaletteMode
|
||||
import it.hamy.muza.enums.ColorPaletteName
|
||||
import it.hamy.muza.enums.ThumbnailRoundness
|
||||
import it.hamy.muza.service.PlayerService
|
||||
import it.hamy.muza.ui.components.BottomSheetMenu
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.rememberBottomSheetState
|
||||
import it.hamy.muza.ui.screens.albumRoute
|
||||
import it.hamy.muza.ui.screens.artistRoute
|
||||
import it.hamy.muza.ui.screens.home.HomeScreen
|
||||
import it.hamy.muza.ui.screens.player.Player
|
||||
import it.hamy.muza.ui.screens.playlistRoute
|
||||
import it.hamy.muza.ui.styling.Appearance
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.colorPaletteOf
|
||||
import it.hamy.muza.ui.styling.dynamicColorPaletteOf
|
||||
import it.hamy.muza.ui.styling.typographyOf
|
||||
import it.hamy.muza.utils.applyFontPaddingKey
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.colorPaletteModeKey
|
||||
import it.hamy.muza.utils.colorPaletteNameKey
|
||||
import it.hamy.muza.utils.forcePlay
|
||||
import it.hamy.muza.utils.getEnum
|
||||
import it.hamy.muza.utils.intent
|
||||
import it.hamy.muza.utils.isAtLeastAndroid6
|
||||
import it.hamy.muza.utils.isAtLeastAndroid8
|
||||
import it.hamy.muza.utils.preferences
|
||||
import it.hamy.muza.utils.thumbnailRoundnessKey
|
||||
import it.hamy.muza.utils.useSystemFontKey
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.flow.filterNotNull
|
||||
@@ -1,13 +1,13 @@
|
||||
package it.vfsfitvnm.vimusic
|
||||
package it.hamy.muza
|
||||
|
||||
import android.app.Application
|
||||
import coil.ImageLoader
|
||||
import coil.ImageLoaderFactory
|
||||
import coil.disk.DiskCache
|
||||
import it.vfsfitvnm.vimusic.enums.CoilDiskCacheMaxSize
|
||||
import it.vfsfitvnm.vimusic.utils.coilDiskCacheMaxSizeKey
|
||||
import it.vfsfitvnm.vimusic.utils.getEnum
|
||||
import it.vfsfitvnm.vimusic.utils.preferences
|
||||
import it.hamy.muza.enums.CoilDiskCacheMaxSize
|
||||
import it.hamy.muza.utils.coilDiskCacheMaxSizeKey
|
||||
import it.hamy.muza.utils.getEnum
|
||||
import it.hamy.muza.utils.preferences
|
||||
|
||||
class MainApplication : Application(), ImageLoaderFactory {
|
||||
override fun onCreate() {
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
enum class AlbumSortBy {
|
||||
Title,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
enum class ArtistSortBy {
|
||||
Name,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
enum class BuiltInPlaylist {
|
||||
Favorites,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
enum class CoilDiskCacheMaxSize {
|
||||
`128MB`,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
enum class ColorPaletteMode {
|
||||
Light,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
enum class ColorPaletteName {
|
||||
Default,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
enum class ExoPlayerDiskCacheMaxSize {
|
||||
`32MB`,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
enum class PlaylistSortBy {
|
||||
Name,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
enum class SongSortBy {
|
||||
PlayTime,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
enum class SortOrder {
|
||||
Ascending,
|
||||
@@ -1,12 +1,9 @@
|
||||
package it.vfsfitvnm.vimusic.enums
|
||||
package it.hamy.muza.enums
|
||||
|
||||
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.Shape
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
|
||||
enum class ThumbnailRoundness {
|
||||
None,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.models
|
||||
package it.hamy.muza.models
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
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.room.Entity
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.models
|
||||
package it.hamy.muza.models
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
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.room.Entity
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.models
|
||||
package it.hamy.muza.models
|
||||
|
||||
data class Info(
|
||||
val id: String,
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.models
|
||||
package it.hamy.muza.models
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
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.room.Entity
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.models
|
||||
package it.hamy.muza.models
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
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.room.Embedded
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.models
|
||||
package it.hamy.muza.models
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
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.room.Entity
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.models
|
||||
package it.hamy.muza.models
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
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.room.ColumnInfo
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.models
|
||||
package it.hamy.muza.models
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
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.room.ColumnInfo
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.models
|
||||
package it.hamy.muza.models
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
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.room.ColumnInfo
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.service
|
||||
package it.hamy.muza.service
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.Configuration
|
||||
@@ -9,7 +9,7 @@ import androidx.core.graphics.applyCanvas
|
||||
import coil.imageLoader
|
||||
import coil.request.Disposable
|
||||
import coil.request.ImageRequest
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
||||
import it.hamy.muza.utils.thumbnail
|
||||
|
||||
context(Context)
|
||||
class BitmapProvider(
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.service
|
||||
package it.hamy.muza.service
|
||||
|
||||
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.browse.MediaBrowser.MediaItem as BrowserMediaItem
|
||||
@@ -17,17 +17,17 @@ import androidx.core.net.toUri
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.media3.common.Player
|
||||
import androidx.media3.datasource.cache.Cache
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.Album
|
||||
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.models.SongWithContentLength
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
||||
import it.vfsfitvnm.vimusic.utils.forceSeekToNext
|
||||
import it.vfsfitvnm.vimusic.utils.forceSeekToPrevious
|
||||
import it.vfsfitvnm.vimusic.utils.intent
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.Album
|
||||
import it.hamy.muza.models.PlaylistPreview
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.models.SongWithContentLength
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.forcePlayAtIndex
|
||||
import it.hamy.muza.utils.forceSeekToNext
|
||||
import it.hamy.muza.utils.forceSeekToPrevious
|
||||
import it.hamy.muza.utils.intent
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
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.annotation.SuppressLint
|
||||
@@ -67,45 +67,45 @@ import androidx.media3.exoplayer.source.MediaSource
|
||||
import androidx.media3.extractor.ExtractorsFactory
|
||||
import androidx.media3.extractor.mkv.MatroskaExtractor
|
||||
import androidx.media3.extractor.mp4.FragmentedMp4Extractor
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.NavigationEndpoint
|
||||
import it.vfsfitvnm.innertube.models.bodies.PlayerBody
|
||||
import it.vfsfitvnm.innertube.requests.player
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.MainActivity
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.enums.ExoPlayerDiskCacheMaxSize
|
||||
import it.vfsfitvnm.vimusic.models.Event
|
||||
import it.vfsfitvnm.vimusic.models.QueuedMediaItem
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.utils.InvincibleService
|
||||
import it.vfsfitvnm.vimusic.utils.RingBuffer
|
||||
import it.vfsfitvnm.vimusic.utils.TimerJob
|
||||
import it.vfsfitvnm.vimusic.utils.YouTubeRadio
|
||||
import it.vfsfitvnm.vimusic.utils.activityPendingIntent
|
||||
import it.vfsfitvnm.vimusic.utils.broadCastPendingIntent
|
||||
import it.vfsfitvnm.vimusic.utils.exoPlayerDiskCacheMaxSizeKey
|
||||
import it.vfsfitvnm.vimusic.utils.findNextMediaItemById
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
|
||||
import it.vfsfitvnm.vimusic.utils.forceSeekToNext
|
||||
import it.vfsfitvnm.vimusic.utils.forceSeekToPrevious
|
||||
import it.vfsfitvnm.vimusic.utils.getEnum
|
||||
import it.vfsfitvnm.vimusic.utils.intent
|
||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid13
|
||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid6
|
||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid8
|
||||
import it.vfsfitvnm.vimusic.utils.isInvincibilityEnabledKey
|
||||
import it.vfsfitvnm.vimusic.utils.isShowingThumbnailInLockscreenKey
|
||||
import it.vfsfitvnm.vimusic.utils.mediaItems
|
||||
import it.vfsfitvnm.vimusic.utils.persistentQueueKey
|
||||
import it.vfsfitvnm.vimusic.utils.preferences
|
||||
import it.vfsfitvnm.vimusic.utils.queueLoopEnabledKey
|
||||
import it.vfsfitvnm.vimusic.utils.resumePlaybackWhenDeviceConnectedKey
|
||||
import it.vfsfitvnm.vimusic.utils.shouldBePlaying
|
||||
import it.vfsfitvnm.vimusic.utils.skipSilenceKey
|
||||
import it.vfsfitvnm.vimusic.utils.timer
|
||||
import it.vfsfitvnm.vimusic.utils.trackLoopEnabledKey
|
||||
import it.vfsfitvnm.vimusic.utils.volumeNormalizationKey
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.NavigationEndpoint
|
||||
import it.hamy.innertube.models.bodies.PlayerBody
|
||||
import it.hamy.innertube.requests.player
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.MainActivity
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.enums.ExoPlayerDiskCacheMaxSize
|
||||
import it.hamy.muza.models.Event
|
||||
import it.hamy.muza.models.QueuedMediaItem
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.utils.InvincibleService
|
||||
import it.hamy.muza.utils.RingBuffer
|
||||
import it.hamy.muza.utils.TimerJob
|
||||
import it.hamy.muza.utils.YouTubeRadio
|
||||
import it.hamy.muza.utils.activityPendingIntent
|
||||
import it.hamy.muza.utils.broadCastPendingIntent
|
||||
import it.hamy.muza.utils.exoPlayerDiskCacheMaxSizeKey
|
||||
import it.hamy.muza.utils.findNextMediaItemById
|
||||
import it.hamy.muza.utils.forcePlayFromBeginning
|
||||
import it.hamy.muza.utils.forceSeekToNext
|
||||
import it.hamy.muza.utils.forceSeekToPrevious
|
||||
import it.hamy.muza.utils.getEnum
|
||||
import it.hamy.muza.utils.intent
|
||||
import it.hamy.muza.utils.isAtLeastAndroid13
|
||||
import it.hamy.muza.utils.isAtLeastAndroid6
|
||||
import it.hamy.muza.utils.isAtLeastAndroid8
|
||||
import it.hamy.muza.utils.isInvincibilityEnabledKey
|
||||
import it.hamy.muza.utils.isShowingThumbnailInLockscreenKey
|
||||
import it.hamy.muza.utils.mediaItems
|
||||
import it.hamy.muza.utils.persistentQueueKey
|
||||
import it.hamy.muza.utils.preferences
|
||||
import it.hamy.muza.utils.queueLoopEnabledKey
|
||||
import it.hamy.muza.utils.resumePlaybackWhenDeviceConnectedKey
|
||||
import it.hamy.muza.utils.shouldBePlaying
|
||||
import it.hamy.muza.utils.skipSilenceKey
|
||||
import it.hamy.muza.utils.timer
|
||||
import it.hamy.muza.utils.trackLoopEnabledKey
|
||||
import it.hamy.muza.utils.volumeNormalizationKey
|
||||
import kotlin.math.roundToInt
|
||||
import kotlin.system.exitProcess
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -791,7 +791,7 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene
|
||||
mediaItem?.let(Database::insert)
|
||||
|
||||
Database.insert(
|
||||
it.vfsfitvnm.vimusic.models.Format(
|
||||
it.hamy.muza.models.Format(
|
||||
songId = videoId,
|
||||
itag = format.itag,
|
||||
mimeType = format.mimeType,
|
||||
@@ -991,10 +991,10 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene
|
||||
)
|
||||
|
||||
companion object {
|
||||
val pause = Action("it.vfsfitvnm.vimusic.pause")
|
||||
val play = Action("it.vfsfitvnm.vimusic.play")
|
||||
val next = Action("it.vfsfitvnm.vimusic.next")
|
||||
val previous = Action("it.vfsfitvnm.vimusic.previous")
|
||||
val pause = Action("it.hamy.muza.pause")
|
||||
val play = Action("it.hamy.muza.play")
|
||||
val next = Action("it.hamy.muza.next")
|
||||
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.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.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.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.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.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.fadeIn
|
||||
@@ -48,12 +48,12 @@ import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.center
|
||||
import it.vfsfitvnm.vimusic.utils.drawCircle
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.center
|
||||
import it.hamy.muza.utils.drawCircle
|
||||
import it.hamy.muza.utils.medium
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import kotlinx.coroutines.delay
|
||||
|
||||
@Composable
|
||||
@@ -62,8 +62,8 @@ fun TextFieldDialog(
|
||||
onDismiss: () -> Unit,
|
||||
onDone: (String) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
cancelText: String = "Cancel",
|
||||
doneText: String = "Done",
|
||||
cancelText: String = "Отмена",
|
||||
doneText: String = "Готово",
|
||||
initialTextInput: String = "",
|
||||
singleLine: Boolean = true,
|
||||
maxLines: Int = 1,
|
||||
@@ -167,8 +167,8 @@ fun ConfirmationDialog(
|
||||
onDismiss: () -> Unit,
|
||||
onConfirm: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
cancelText: String = "Cancel",
|
||||
confirmText: String = "Confirm",
|
||||
cancelText: String = "Отменить",
|
||||
confirmText: String = "Продолжить",
|
||||
onCancel: () -> Unit = onDismiss
|
||||
) {
|
||||
val (_, typography) = LocalAppearance.current
|
||||
@@ -324,7 +324,7 @@ inline fun <T> ValueSelectorDialog(
|
||||
.padding(end = 24.dp)
|
||||
) {
|
||||
DialogTextButton(
|
||||
text = "Cancel",
|
||||
text = "Отмена",
|
||||
onClick = onDismiss,
|
||||
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.clickable
|
||||
@@ -10,9 +10,9 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.medium
|
||||
|
||||
@Composable
|
||||
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.ExperimentalAnimationApi
|
||||
@@ -24,11 +24,11 @@ import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.utils.ScrollingInfo
|
||||
import it.vfsfitvnm.vimusic.utils.scrollingInfo
|
||||
import it.vfsfitvnm.vimusic.utils.smoothScrollToTop
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.utils.ScrollingInfo
|
||||
import it.hamy.muza.utils.scrollingInfo
|
||||
import it.hamy.muza.utils.smoothScrollToTop
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@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.layout.Arrangement
|
||||
@@ -16,10 +16,10 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.shimmer
|
||||
import it.hamy.muza.utils.medium
|
||||
import kotlin.random.Random
|
||||
|
||||
@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.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.layout.BoxWithConstraints
|
||||
@@ -14,11 +14,11 @@ import androidx.compose.ui.graphics.Shape
|
||||
import androidx.compose.ui.unit.dp
|
||||
import coil.compose.AsyncImage
|
||||
import com.valentinilk.shimmer.shimmer
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
||||
import it.vfsfitvnm.vimusic.utils.isLandscape
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.ui.styling.shimmer
|
||||
import it.hamy.muza.utils.isLandscape
|
||||
import it.hamy.muza.utils.thumbnail
|
||||
|
||||
@Composable
|
||||
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 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.dp
|
||||
import androidx.media3.common.MediaItem
|
||||
import it.vfsfitvnm.innertube.models.NavigationEndpoint
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
||||
import it.vfsfitvnm.vimusic.models.Info
|
||||
import it.vfsfitvnm.vimusic.models.Playlist
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.models.SongPlaylistMap
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.transaction
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.artistRoute
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.favoritesIcon
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.addNext
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.enqueue
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
||||
import it.vfsfitvnm.vimusic.utils.formatAsDuration
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
||||
import kotlin.system.measureTimeMillis
|
||||
import it.hamy.innertube.models.NavigationEndpoint
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.enums.PlaylistSortBy
|
||||
import it.hamy.muza.enums.SortOrder
|
||||
import it.hamy.muza.models.Info
|
||||
import it.hamy.muza.models.Playlist
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.models.SongPlaylistMap
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.transaction
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.screens.albumRoute
|
||||
import it.hamy.muza.ui.screens.artistRoute
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.favoritesIcon
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.addNext
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.enqueue
|
||||
import it.hamy.muza.utils.forcePlay
|
||||
import it.hamy.muza.utils.formatAsDuration
|
||||
import it.hamy.muza.utils.medium
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import it.hamy.muza.utils.thumbnail
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
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.compose.foundation.Image
|
||||
@@ -22,9 +22,9 @@ import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.medium
|
||||
import it.hamy.muza.utils.secondary
|
||||
|
||||
@Composable
|
||||
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.core.animateFloat
|
||||
@@ -32,13 +32,13 @@ import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.layout.layout
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.center
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.isLandscape
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.center
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.isLandscape
|
||||
import it.hamy.muza.utils.semiBold
|
||||
|
||||
@Composable
|
||||
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.compose.foundation.Image
|
||||
@@ -14,8 +14,8 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.primaryButton
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.primaryButton
|
||||
|
||||
@Composable
|
||||
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.AnimatedContentScope
|
||||
@@ -15,7 +15,7 @@ import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.IntOffset
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
|
||||
@ExperimentalAnimationApi
|
||||
@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.compose.foundation.Image
|
||||
@@ -14,8 +14,8 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.primaryButton
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.primaryButton
|
||||
|
||||
@Composable
|
||||
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.clickable
|
||||
@@ -9,9 +9,9 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.primaryButton
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.primaryButton
|
||||
import it.hamy.muza.utils.medium
|
||||
|
||||
@Composable
|
||||
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.core.animateDp
|
||||
@@ -14,8 +14,8 @@ import androidx.compose.ui.geometry.center
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.Shadow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.drawCircle
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.drawCircle
|
||||
|
||||
@Composable
|
||||
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.layout.Spacer
|
||||
@@ -10,8 +10,8 @@ import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.shimmer
|
||||
import kotlin.random.Random
|
||||
|
||||
@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.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 coil.compose.AsyncImage
|
||||
import it.vfsfitvnm.vimusic.models.Album
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.hamy.muza.models.Album
|
||||
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.shimmer
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import it.hamy.muza.utils.thumbnail
|
||||
import it.hamy.innertube.Innertube
|
||||
|
||||
@Composable
|
||||
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.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 coil.compose.AsyncImage
|
||||
import it.vfsfitvnm.vimusic.models.Artist
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.hamy.muza.models.Artist
|
||||
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.shimmer
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import it.hamy.muza.utils.thumbnail
|
||||
import it.hamy.innertube.Innertube
|
||||
|
||||
@Composable
|
||||
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.Column
|
||||
import androidx.compose.foundation.layout.ColumnScope
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.RowScope
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
@@ -13,7 +12,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
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
|
||||
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.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 coil.compose.AsyncImage
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.onOverlay
|
||||
import it.vfsfitvnm.vimusic.ui.styling.overlay
|
||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.models.PlaylistPreview
|
||||
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.onOverlay
|
||||
import it.hamy.muza.ui.styling.overlay
|
||||
import it.hamy.muza.ui.styling.shimmer
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.medium
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import it.hamy.muza.utils.thumbnail
|
||||
import it.hamy.innertube.Innertube
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
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.layout.Box
|
||||
@@ -19,15 +19,15 @@ import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.media3.common.MediaItem
|
||||
import coil.compose.AsyncImage
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.shimmer
|
||||
import it.hamy.muza.utils.medium
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import it.hamy.muza.utils.thumbnail
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.muza.models.Song
|
||||
|
||||
@Composable
|
||||
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.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 coil.compose.AsyncImage
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.onOverlay
|
||||
import it.vfsfitvnm.vimusic.ui.styling.overlay
|
||||
import it.vfsfitvnm.vimusic.ui.styling.shimmer
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.onOverlay
|
||||
import it.hamy.muza.ui.styling.overlay
|
||||
import it.hamy.muza.ui.styling.shimmer
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.medium
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import it.hamy.innertube.Innertube
|
||||
|
||||
@Composable
|
||||
fun VideoItem(
|
||||
@@ -1,16 +1,16 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens
|
||||
package it.hamy.muza.ui.screens
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.runtime.Composable
|
||||
import it.vfsfitvnm.compose.routing.Route0
|
||||
import it.vfsfitvnm.compose.routing.Route1
|
||||
import it.vfsfitvnm.compose.routing.RouteHandlerScope
|
||||
import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
||||
import it.vfsfitvnm.vimusic.ui.screens.album.AlbumScreen
|
||||
import it.vfsfitvnm.vimusic.ui.screens.artist.ArtistScreen
|
||||
import it.vfsfitvnm.vimusic.ui.screens.playlist.PlaylistScreen
|
||||
import it.hamy.compose.routing.Route0
|
||||
import it.hamy.compose.routing.Route1
|
||||
import it.hamy.compose.routing.RouteHandlerScope
|
||||
import it.hamy.muza.enums.BuiltInPlaylist
|
||||
import it.hamy.muza.ui.screens.album.AlbumScreen
|
||||
import it.hamy.muza.ui.screens.artist.ArtistScreen
|
||||
import it.hamy.muza.ui.screens.playlist.PlaylistScreen
|
||||
|
||||
val albumRoute = Route1<String?>("albumRoute")
|
||||
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 androidx.compose.animation.ExperimentalAnimationApi
|
||||
@@ -17,30 +17,30 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.valentinilk.shimmer.shimmer
|
||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
||||
import it.vfsfitvnm.compose.persist.persist
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.bodies.BrowseBody
|
||||
import it.vfsfitvnm.innertube.requests.albumPage
|
||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.Album
|
||||
import it.vfsfitvnm.vimusic.models.SongAlbumMap
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.adaptiveThumbnailContent
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
||||
import it.vfsfitvnm.vimusic.ui.screens.searchresult.ItemsPage
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.hamy.compose.persist.PersistMapCleanup
|
||||
import it.hamy.compose.persist.persist
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.bodies.BrowseBody
|
||||
import it.hamy.innertube.requests.albumPage
|
||||
import it.hamy.compose.routing.RouteHandler
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.Album
|
||||
import it.hamy.muza.models.SongAlbumMap
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||
import it.hamy.muza.ui.components.themed.HeaderPlaceholder
|
||||
import it.hamy.muza.ui.components.themed.Scaffold
|
||||
import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent
|
||||
import it.hamy.muza.ui.items.AlbumItem
|
||||
import it.hamy.muza.ui.items.AlbumItemPlaceholder
|
||||
import it.hamy.muza.ui.screens.albumRoute
|
||||
import it.hamy.muza.ui.screens.globalRoutes
|
||||
import it.hamy.muza.ui.screens.searchresult.ItemsPage
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.withContext
|
||||
@@ -122,7 +122,7 @@ fun AlbumScreen(browseId: String) {
|
||||
val (colorPalette) = LocalAppearance.current
|
||||
val context = LocalContext.current
|
||||
|
||||
Header(title = album?.title ?: "Unknown") {
|
||||
Header(title = album?.title ?: "Неизвестный") {
|
||||
textButton?.invoke()
|
||||
|
||||
Spacer(
|
||||
@@ -182,8 +182,8 @@ fun AlbumScreen(browseId: String) {
|
||||
tabIndex = tabIndex,
|
||||
onTabChanged = { tabIndex = it },
|
||||
tabColumnContent = { Item ->
|
||||
Item(0, "Songs", R.drawable.musical_notes)
|
||||
Item(1, "Other versions", R.drawable.disc)
|
||||
Item(0, "Песни", R.drawable.musical_notes)
|
||||
Item(1, "Другие версии", R.drawable.disc)
|
||||
}
|
||||
) { currentTabIndex ->
|
||||
saveableStateHolder.SaveableStateProvider(key = currentTabIndex) {
|
||||
@@ -203,7 +203,7 @@ fun AlbumScreen(browseId: String) {
|
||||
headerContent = headerContent,
|
||||
initialPlaceholderCount = 1,
|
||||
continuationPlaceholderCount = 1,
|
||||
emptyItemsText = "This album doesn't have any alternative version",
|
||||
emptyItemsText = "Этот альбом не имеет других версий",
|
||||
itemsPageProvider = albumPage?.let {
|
||||
({
|
||||
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.foundation.ExperimentalFoundationApi
|
||||
@@ -22,30 +22,30 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import it.vfsfitvnm.compose.persist.persistList
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.ShimmerHost
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.center
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.enqueue
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
|
||||
import it.vfsfitvnm.vimusic.utils.isLandscape
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.hamy.compose.persist.persistList
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.ShimmerHost
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.center
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.enqueue
|
||||
import it.hamy.muza.utils.forcePlayAtIndex
|
||||
import it.hamy.muza.utils.forcePlayFromBeginning
|
||||
import it.hamy.muza.utils.isLandscape
|
||||
import it.hamy.muza.utils.semiBold
|
||||
|
||||
@ExperimentalAnimationApi
|
||||
@ExperimentalFoundationApi
|
||||
@@ -86,7 +86,7 @@ fun AlbumSongs(
|
||||
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
||||
headerContent {
|
||||
SecondaryTextButton(
|
||||
text = "Enqueue",
|
||||
text = "В очередь",
|
||||
enabled = songs.isNotEmpty(),
|
||||
onClick = {
|
||||
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.foundation.ExperimentalFoundationApi
|
||||
@@ -19,27 +19,27 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import it.vfsfitvnm.compose.persist.persist
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.ShimmerHost
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.enqueue
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
|
||||
import it.hamy.compose.persist.persist
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.ShimmerHost
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.enqueue
|
||||
import it.hamy.muza.utils.forcePlayAtIndex
|
||||
import it.hamy.muza.utils.forcePlayFromBeginning
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -81,7 +81,7 @@ fun ArtistLocalSongs(
|
||||
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
||||
headerContent {
|
||||
SecondaryTextButton(
|
||||
text = "Enqueue",
|
||||
text = "В очередь",
|
||||
enabled = !songs.isNullOrEmpty(),
|
||||
onClick = {
|
||||
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.foundation.ExperimentalFoundationApi
|
||||
@@ -26,31 +26,31 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.NavigationEndpoint
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.ShimmerHost
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.align
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.NavigationEndpoint
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.ShimmerHost
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||
import it.hamy.muza.ui.items.AlbumItem
|
||||
import it.hamy.muza.ui.items.AlbumItemPlaceholder
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.align
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.forcePlay
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -103,7 +103,7 @@ fun ArtistOverview(
|
||||
headerContent {
|
||||
youtubeArtistPage?.shuffleEndpoint?.let { endpoint ->
|
||||
SecondaryTextButton(
|
||||
text = "Shuffle",
|
||||
text = "Перемешать",
|
||||
onClick = {
|
||||
binder?.stopRadio()
|
||||
binder?.playRadio(endpoint)
|
||||
@@ -125,14 +125,14 @@ fun ArtistOverview(
|
||||
.padding(endPaddingValues)
|
||||
) {
|
||||
BasicText(
|
||||
text = "Songs",
|
||||
text = "Песни",
|
||||
style = typography.m.semiBold,
|
||||
modifier = sectionTextModifier
|
||||
)
|
||||
|
||||
youtubeArtistPage.songsEndpoint?.let {
|
||||
BasicText(
|
||||
text = "View all",
|
||||
text = "Все",
|
||||
style = typography.xs.secondary,
|
||||
modifier = sectionTextModifier
|
||||
.clickable(onClick = onViewAllSongsClick),
|
||||
@@ -178,14 +178,14 @@ fun ArtistOverview(
|
||||
.padding(endPaddingValues)
|
||||
) {
|
||||
BasicText(
|
||||
text = "Albums",
|
||||
text = "Альбомы",
|
||||
style = typography.m.semiBold,
|
||||
modifier = sectionTextModifier
|
||||
)
|
||||
|
||||
youtubeArtistPage.albumsEndpoint?.let {
|
||||
BasicText(
|
||||
text = "View all",
|
||||
text = "Все",
|
||||
style = typography.xs.secondary,
|
||||
modifier = sectionTextModifier
|
||||
.clickable(onClick = onViewAllAlbumsClick),
|
||||
@@ -223,14 +223,14 @@ fun ArtistOverview(
|
||||
.padding(endPaddingValues)
|
||||
) {
|
||||
BasicText(
|
||||
text = "Singles",
|
||||
text = "Синглы",
|
||||
style = typography.m.semiBold,
|
||||
modifier = sectionTextModifier
|
||||
)
|
||||
|
||||
youtubeArtistPage.singlesEndpoint?.let {
|
||||
BasicText(
|
||||
text = "View all",
|
||||
text = "Все",
|
||||
style = typography.xs.secondary,
|
||||
modifier = sectionTextModifier
|
||||
.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 androidx.compose.animation.ExperimentalAnimationApi
|
||||
@@ -17,41 +17,41 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.valentinilk.shimmer.shimmer
|
||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
||||
import it.vfsfitvnm.compose.persist.persist
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.bodies.BrowseBody
|
||||
import it.vfsfitvnm.innertube.models.bodies.ContinuationBody
|
||||
import it.vfsfitvnm.innertube.requests.artistPage
|
||||
import it.vfsfitvnm.innertube.requests.itemsPage
|
||||
import it.vfsfitvnm.innertube.utils.from
|
||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.Artist
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.adaptiveThumbnailContent
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
||||
import it.vfsfitvnm.vimusic.ui.screens.searchresult.ItemsPage
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.artistScreenTabIndexKey
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.hamy.compose.persist.PersistMapCleanup
|
||||
import it.hamy.compose.persist.persist
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.bodies.BrowseBody
|
||||
import it.hamy.innertube.models.bodies.ContinuationBody
|
||||
import it.hamy.innertube.requests.artistPage
|
||||
import it.hamy.innertube.requests.itemsPage
|
||||
import it.hamy.innertube.utils.from
|
||||
import it.hamy.compose.routing.RouteHandler
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.Artist
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||
import it.hamy.muza.ui.components.themed.HeaderPlaceholder
|
||||
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.Scaffold
|
||||
import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent
|
||||
import it.hamy.muza.ui.items.AlbumItem
|
||||
import it.hamy.muza.ui.items.AlbumItemPlaceholder
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||
import it.hamy.muza.ui.screens.albumRoute
|
||||
import it.hamy.muza.ui.screens.globalRoutes
|
||||
import it.hamy.muza.ui.screens.searchresult.ItemsPage
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.artistScreenTabIndexKey
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.forcePlay
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.combine
|
||||
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.foundation.ExperimentalFoundationApi
|
||||
@@ -6,12 +6,12 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
|
||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
||||
import it.hamy.compose.persist.PersistMapCleanup
|
||||
import it.hamy.compose.routing.RouteHandler
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.enums.BuiltInPlaylist
|
||||
import it.hamy.muza.ui.components.themed.Scaffold
|
||||
import it.hamy.muza.ui.screens.globalRoutes
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -38,8 +38,8 @@ fun BuiltInPlaylistScreen(builtInPlaylist: BuiltInPlaylist) {
|
||||
tabIndex = tabIndex,
|
||||
onTabChanged = onTabIndexChanged,
|
||||
tabColumnContent = { Item ->
|
||||
Item(0, "Favorites", R.drawable.heart)
|
||||
Item(1, "Offline", R.drawable.airplane)
|
||||
Item(0, "Любимые", R.drawable.heart)
|
||||
Item(1, "Сохранённые", R.drawable.airplane)
|
||||
}
|
||||
) { 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.foundation.ExperimentalFoundationApi
|
||||
@@ -20,28 +20,28 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.compose.persist.persistList
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.models.SongWithContentLength
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.enqueue
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
|
||||
import it.hamy.compose.persist.persistList
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.enums.BuiltInPlaylist
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.models.SongWithContentLength
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.InHistoryMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.enqueue
|
||||
import it.hamy.muza.utils.forcePlayAtIndex
|
||||
import it.hamy.muza.utils.forcePlayFromBeginning
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.flowOn
|
||||
import kotlinx.coroutines.flow.map
|
||||
@@ -94,14 +94,14 @@ fun BuiltInPlaylistSongs(builtInPlaylist: BuiltInPlaylist) {
|
||||
) {
|
||||
Header(
|
||||
title = when (builtInPlaylist) {
|
||||
BuiltInPlaylist.Favorites -> "Favorites"
|
||||
BuiltInPlaylist.Offline -> "Offline"
|
||||
BuiltInPlaylist.Favorites -> "Любимые"
|
||||
BuiltInPlaylist.Offline -> "Сохранённые"
|
||||
},
|
||||
modifier = Modifier
|
||||
.padding(bottom = 8.dp)
|
||||
) {
|
||||
SecondaryTextButton(
|
||||
text = "Enqueue",
|
||||
text = "В очередь",
|
||||
enabled = songs.isNotEmpty(),
|
||||
onClick = {
|
||||
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.core.LinearEasing
|
||||
@@ -15,34 +15,32 @@ import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.only
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.LazyListState
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.compose.persist.persist
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.enums.AlbumSortBy
|
||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
||||
import it.vfsfitvnm.vimusic.models.Album
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItem
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.albumSortByKey
|
||||
import it.vfsfitvnm.vimusic.utils.albumSortOrderKey
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.hamy.compose.persist.persist
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.enums.AlbumSortBy
|
||||
import it.hamy.muza.enums.SortOrder
|
||||
import it.hamy.muza.models.Album
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||
import it.hamy.muza.ui.items.AlbumItem
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.albumSortByKey
|
||||
import it.hamy.muza.utils.albumSortOrderKey
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -85,7 +83,7 @@ fun HomeAlbums(
|
||||
key = "header",
|
||||
contentType = 0
|
||||
) {
|
||||
Header(title = "Albums") {
|
||||
Header(title = "Альбомы") {
|
||||
HeaderIconButton(
|
||||
icon = R.drawable.calendar,
|
||||
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.core.LinearEasing
|
||||
@@ -28,23 +28,23 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.compose.persist.persistList
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.enums.ArtistSortBy
|
||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
||||
import it.vfsfitvnm.vimusic.models.Artist
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
||||
import it.vfsfitvnm.vimusic.ui.items.ArtistItem
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.artistSortByKey
|
||||
import it.vfsfitvnm.vimusic.utils.artistSortOrderKey
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.hamy.compose.persist.persistList
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.enums.ArtistSortBy
|
||||
import it.hamy.muza.enums.SortOrder
|
||||
import it.hamy.muza.models.Artist
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||
import it.hamy.muza.ui.items.ArtistItem
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.artistSortByKey
|
||||
import it.hamy.muza.utils.artistSortOrderKey
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -94,7 +94,7 @@ fun HomeArtistList(
|
||||
contentType = 0,
|
||||
span = { GridItemSpan(maxLineSpan) }
|
||||
) {
|
||||
Header(title = "Artists") {
|
||||
Header(title = "Исполнители") {
|
||||
HeaderIconButton(
|
||||
icon = R.drawable.text,
|
||||
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.core.LinearEasing
|
||||
@@ -30,28 +30,28 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.compose.persist.persistList
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist
|
||||
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
||||
import it.vfsfitvnm.vimusic.models.Playlist
|
||||
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog
|
||||
import it.vfsfitvnm.vimusic.ui.items.PlaylistItem
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.playlistSortByKey
|
||||
import it.vfsfitvnm.vimusic.utils.playlistSortOrderKey
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.hamy.compose.persist.persistList
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.enums.BuiltInPlaylist
|
||||
import it.hamy.muza.enums.PlaylistSortBy
|
||||
import it.hamy.muza.enums.SortOrder
|
||||
import it.hamy.muza.models.Playlist
|
||||
import it.hamy.muza.models.PlaylistPreview
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||
import it.hamy.muza.ui.components.themed.TextFieldDialog
|
||||
import it.hamy.muza.ui.items.PlaylistItem
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.playlistSortByKey
|
||||
import it.hamy.muza.utils.playlistSortOrderKey
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
|
||||
@ExperimentalAnimationApi
|
||||
@ExperimentalFoundationApi
|
||||
@@ -69,7 +69,7 @@ fun HomePlaylists(
|
||||
|
||||
if (isCreatingANewPlaylist) {
|
||||
TextFieldDialog(
|
||||
hintText = "Enter the playlist name",
|
||||
hintText = "Введите название плейлиста",
|
||||
onDismiss = {
|
||||
isCreatingANewPlaylist = false
|
||||
},
|
||||
@@ -116,9 +116,9 @@ fun HomePlaylists(
|
||||
.background(colorPalette.background0)
|
||||
) {
|
||||
item(key = "header", contentType = 0, span = { GridItemSpan(maxLineSpan) }) {
|
||||
Header(title = "Playlists") {
|
||||
Header(title = "Плейлисты") {
|
||||
SecondaryTextButton(
|
||||
text = "New playlist",
|
||||
text = "Новый плейлист",
|
||||
onClick = { isCreatingANewPlaylist = true }
|
||||
)
|
||||
|
||||
@@ -164,7 +164,7 @@ fun HomePlaylists(
|
||||
PlaylistItem(
|
||||
icon = R.drawable.heart,
|
||||
colorTint = colorPalette.red,
|
||||
name = "Favorites",
|
||||
name = "Любимые",
|
||||
songCount = null,
|
||||
thumbnailSizeDp = thumbnailSizeDp,
|
||||
alternative = true,
|
||||
@@ -178,7 +178,7 @@ fun HomePlaylists(
|
||||
PlaylistItem(
|
||||
icon = R.drawable.airplane,
|
||||
colorTint = colorPalette.blue,
|
||||
name = "Offline",
|
||||
name = "Сохранённые",
|
||||
songCount = null,
|
||||
thumbnailSizeDp = thumbnailSizeDp,
|
||||
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.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
||||
import it.vfsfitvnm.compose.routing.defaultStacking
|
||||
import it.vfsfitvnm.compose.routing.defaultStill
|
||||
import it.vfsfitvnm.compose.routing.defaultUnstacking
|
||||
import it.vfsfitvnm.compose.routing.isStacking
|
||||
import it.vfsfitvnm.compose.routing.isUnknown
|
||||
import it.vfsfitvnm.compose.routing.isUnstacking
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.SearchQuery
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.artistRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.builtInPlaylistRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.builtinplaylist.BuiltInPlaylistScreen
|
||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
||||
import it.vfsfitvnm.vimusic.ui.screens.localPlaylistRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.localplaylist.LocalPlaylistScreen
|
||||
import it.vfsfitvnm.vimusic.ui.screens.playlistRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.search.SearchScreen
|
||||
import it.vfsfitvnm.vimusic.ui.screens.searchResultRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.searchRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.searchresult.SearchResultScreen
|
||||
import it.vfsfitvnm.vimusic.ui.screens.settings.SettingsScreen
|
||||
import it.vfsfitvnm.vimusic.ui.screens.settingsRoute
|
||||
import it.vfsfitvnm.vimusic.utils.homeScreenTabIndexKey
|
||||
import it.vfsfitvnm.vimusic.utils.pauseSearchHistoryKey
|
||||
import it.vfsfitvnm.vimusic.utils.preferences
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.hamy.compose.persist.PersistMapCleanup
|
||||
import it.hamy.compose.routing.RouteHandler
|
||||
import it.hamy.compose.routing.defaultStacking
|
||||
import it.hamy.compose.routing.defaultStill
|
||||
import it.hamy.compose.routing.defaultUnstacking
|
||||
import it.hamy.compose.routing.isStacking
|
||||
import it.hamy.compose.routing.isUnknown
|
||||
import it.hamy.compose.routing.isUnstacking
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.SearchQuery
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.ui.components.themed.Scaffold
|
||||
import it.hamy.muza.ui.screens.albumRoute
|
||||
import it.hamy.muza.ui.screens.artistRoute
|
||||
import it.hamy.muza.ui.screens.builtInPlaylistRoute
|
||||
import it.hamy.muza.ui.screens.builtinplaylist.BuiltInPlaylistScreen
|
||||
import it.hamy.muza.ui.screens.globalRoutes
|
||||
import it.hamy.muza.ui.screens.localPlaylistRoute
|
||||
import it.hamy.muza.ui.screens.localplaylist.LocalPlaylistScreen
|
||||
import it.hamy.muza.ui.screens.playlistRoute
|
||||
import it.hamy.muza.ui.screens.search.SearchScreen
|
||||
import it.hamy.muza.ui.screens.searchResultRoute
|
||||
import it.hamy.muza.ui.screens.searchRoute
|
||||
import it.hamy.muza.ui.screens.searchresult.SearchResultScreen
|
||||
import it.hamy.muza.ui.screens.settings.SettingsScreen
|
||||
import it.hamy.muza.ui.screens.settingsRoute
|
||||
import it.hamy.muza.utils.homeScreenTabIndexKey
|
||||
import it.hamy.muza.utils.pauseSearchHistoryKey
|
||||
import it.hamy.muza.utils.preferences
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -119,11 +119,11 @@ fun HomeScreen(onPlaylistUrl: (String) -> Unit) {
|
||||
tabIndex = tabIndex,
|
||||
onTabChanged = onTabChanged,
|
||||
tabColumnContent = { Item ->
|
||||
Item(0, "Quick picks", R.drawable.sparkles)
|
||||
Item(1, "Songs", R.drawable.musical_notes)
|
||||
Item(2, "Playlists", R.drawable.playlist)
|
||||
Item(3, "Artists", R.drawable.person)
|
||||
Item(4, "Albums", R.drawable.disc)
|
||||
Item(0, "Обзор", R.drawable.sparkles)
|
||||
Item(1, "Песни", R.drawable.musical_notes)
|
||||
Item(2, "Плейлисты", R.drawable.playlist)
|
||||
Item(3, "Исполнители", R.drawable.person)
|
||||
Item(4, "Альбомы", R.drawable.disc)
|
||||
}
|
||||
) { 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.core.LinearEasing
|
||||
@@ -31,33 +31,33 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.compose.persist.persistList
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.enums.SongSortBy
|
||||
import it.vfsfitvnm.vimusic.enums.SortOrder
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.onOverlay
|
||||
import it.vfsfitvnm.vimusic.ui.styling.overlay
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.center
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.vfsfitvnm.vimusic.utils.songSortByKey
|
||||
import it.vfsfitvnm.vimusic.utils.songSortOrderKey
|
||||
import it.hamy.compose.persist.persistList
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.enums.SongSortBy
|
||||
import it.hamy.muza.enums.SortOrder
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||
import it.hamy.muza.ui.components.themed.InHistoryMediaItemMenu
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.onOverlay
|
||||
import it.hamy.muza.ui.styling.overlay
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.center
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.forcePlayAtIndex
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import it.hamy.muza.utils.songSortByKey
|
||||
import it.hamy.muza.utils.songSortOrderKey
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -102,7 +102,7 @@ fun HomeSongs(
|
||||
key = "header",
|
||||
contentType = 0
|
||||
) {
|
||||
Header(title = "Songs") {
|
||||
Header(title = "Песни") {
|
||||
HeaderIconButton(
|
||||
icon = R.drawable.trending,
|
||||
color = if (sortBy == SongSortBy.PlayTime) 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.foundation.ExperimentalFoundationApi
|
||||
@@ -38,41 +38,41 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.compose.persist.persist
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.NavigationEndpoint
|
||||
import it.vfsfitvnm.innertube.models.bodies.NextBody
|
||||
import it.vfsfitvnm.innertube.requests.relatedPage
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.ShimmerHost
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.ArtistItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.ArtistItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.PlaylistItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.PlaylistItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.SnapLayoutInfoProvider
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.center
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
||||
import it.vfsfitvnm.vimusic.utils.isLandscape
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.hamy.compose.persist.persist
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.NavigationEndpoint
|
||||
import it.hamy.innertube.models.bodies.NextBody
|
||||
import it.hamy.innertube.requests.relatedPage
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.ShimmerHost
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||
import it.hamy.muza.ui.items.AlbumItem
|
||||
import it.hamy.muza.ui.items.AlbumItemPlaceholder
|
||||
import it.hamy.muza.ui.items.ArtistItem
|
||||
import it.hamy.muza.ui.items.ArtistItemPlaceholder
|
||||
import it.hamy.muza.ui.items.PlaylistItem
|
||||
import it.hamy.muza.ui.items.PlaylistItemPlaceholder
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.SnapLayoutInfoProvider
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.center
|
||||
import it.hamy.muza.utils.forcePlay
|
||||
import it.hamy.muza.utils.isLandscape
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@@ -152,7 +152,7 @@ fun QuickPicks(
|
||||
)
|
||||
) {
|
||||
Header(
|
||||
title = "Quick picks",
|
||||
title = "Обзор",
|
||||
modifier = Modifier
|
||||
.padding(endPaddingValues)
|
||||
)
|
||||
@@ -248,7 +248,7 @@ fun QuickPicks(
|
||||
|
||||
related.albums?.let { albums ->
|
||||
BasicText(
|
||||
text = "Related albums",
|
||||
text = "Похожие альбомы",
|
||||
style = typography.m.semiBold,
|
||||
modifier = sectionTextModifier
|
||||
)
|
||||
@@ -272,7 +272,7 @@ fun QuickPicks(
|
||||
|
||||
related.artists?.let { artists ->
|
||||
BasicText(
|
||||
text = "Similar artists",
|
||||
text = "Похожие исполнители",
|
||||
style = typography.m.semiBold,
|
||||
modifier = sectionTextModifier
|
||||
)
|
||||
@@ -296,7 +296,7 @@ fun QuickPicks(
|
||||
|
||||
related.playlists?.let { playlists ->
|
||||
BasicText(
|
||||
text = "Playlists you might like",
|
||||
text = "Плейлисты, которые вам понравятся",
|
||||
style = typography.m.semiBold,
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 16.dp)
|
||||
@@ -323,7 +323,7 @@ fun QuickPicks(
|
||||
Unit
|
||||
} ?: relatedPageResult?.exceptionOrNull()?.let {
|
||||
BasicText(
|
||||
text = "An error has occurred",
|
||||
text = "Упс, тут какая-то ошЫбочка...",
|
||||
style = typography.s.secondary.center,
|
||||
modifier = Modifier
|
||||
.align(Alignment.CenterHorizontally)
|
||||
@@ -1,14 +1,14 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.localplaylist
|
||||
package it.hamy.muza.ui.screens.localplaylist
|
||||
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
|
||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
||||
import it.hamy.compose.persist.PersistMapCleanup
|
||||
import it.hamy.compose.routing.RouteHandler
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.ui.components.themed.Scaffold
|
||||
import it.hamy.muza.ui.screens.globalRoutes
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -28,7 +28,7 @@ fun LocalPlaylistScreen(playlistId: Long) {
|
||||
tabIndex = 0,
|
||||
onTabChanged = { },
|
||||
tabColumnContent = { Item ->
|
||||
Item(0, "Songs", R.drawable.musical_notes)
|
||||
Item(0, "Песни", R.drawable.musical_notes)
|
||||
}
|
||||
) { currentTabIndex ->
|
||||
saveableStateHolder.SaveableStateProvider(currentTabIndex) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.localplaylist
|
||||
package it.hamy.muza.ui.screens.localplaylist
|
||||
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
@@ -23,44 +23,44 @@ import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.compose.persist.persist
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.bodies.BrowseBody
|
||||
import it.vfsfitvnm.innertube.requests.playlistPage
|
||||
import it.vfsfitvnm.compose.reordering.ReorderingLazyColumn
|
||||
import it.vfsfitvnm.compose.reordering.animateItemPlacement
|
||||
import it.vfsfitvnm.compose.reordering.draggedItem
|
||||
import it.vfsfitvnm.compose.reordering.rememberReorderingState
|
||||
import it.vfsfitvnm.compose.reordering.reorder
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.PlaylistWithSongs
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.models.SongPlaylistMap
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.transaction
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.ConfirmationDialog
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.IconButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.InPlaylistMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Menu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.MenuEntry
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.completed
|
||||
import it.vfsfitvnm.vimusic.utils.enqueue
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
|
||||
import it.hamy.compose.persist.persist
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.bodies.BrowseBody
|
||||
import it.hamy.innertube.requests.playlistPage
|
||||
import it.hamy.compose.reordering.ReorderingLazyColumn
|
||||
import it.hamy.compose.reordering.animateItemPlacement
|
||||
import it.hamy.compose.reordering.draggedItem
|
||||
import it.hamy.compose.reordering.rememberReorderingState
|
||||
import it.hamy.compose.reordering.reorder
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.PlaylistWithSongs
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.models.SongPlaylistMap
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.transaction
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.themed.ConfirmationDialog
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||
import it.hamy.muza.ui.components.themed.IconButton
|
||||
import it.hamy.muza.ui.components.themed.InPlaylistMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.Menu
|
||||
import it.hamy.muza.ui.components.themed.MenuEntry
|
||||
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||
import it.hamy.muza.ui.components.themed.TextFieldDialog
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.completed
|
||||
import it.hamy.muza.utils.enqueue
|
||||
import it.hamy.muza.utils.forcePlayAtIndex
|
||||
import it.hamy.muza.utils.forcePlayFromBeginning
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.filterNotNull
|
||||
import kotlinx.coroutines.runBlocking
|
||||
@@ -102,7 +102,7 @@ fun LocalPlaylistSongs(
|
||||
|
||||
if (isRenaming) {
|
||||
TextFieldDialog(
|
||||
hintText = "Enter the playlist name",
|
||||
hintText = "Введите название плейлиста",
|
||||
initialTextInput = playlistWithSongs?.playlist?.name ?: "",
|
||||
onDismiss = { isRenaming = false },
|
||||
onDone = { text ->
|
||||
@@ -119,7 +119,7 @@ fun LocalPlaylistSongs(
|
||||
|
||||
if (isDeleting) {
|
||||
ConfirmationDialog(
|
||||
text = "Do you really want to delete this playlist?",
|
||||
text = "Вы реально хотите удалить этот плейлист?",
|
||||
onDismiss = { isDeleting = false },
|
||||
onConfirm = {
|
||||
query {
|
||||
@@ -149,7 +149,7 @@ fun LocalPlaylistSongs(
|
||||
contentType = 0
|
||||
) {
|
||||
Header(
|
||||
title = playlistWithSongs?.playlist?.name ?: "Unknown",
|
||||
title = playlistWithSongs?.playlist?.name ?: "Неизвестный",
|
||||
modifier = Modifier
|
||||
.padding(bottom = 8.dp)
|
||||
) {
|
||||
@@ -179,7 +179,7 @@ fun LocalPlaylistSongs(
|
||||
playlistWithSongs?.playlist?.browseId?.let { browseId ->
|
||||
MenuEntry(
|
||||
icon = R.drawable.sync,
|
||||
text = "Sync",
|
||||
text = "Синхр.",
|
||||
onClick = {
|
||||
menuState.hide()
|
||||
transaction {
|
||||
@@ -210,7 +210,7 @@ fun LocalPlaylistSongs(
|
||||
|
||||
MenuEntry(
|
||||
icon = R.drawable.pencil,
|
||||
text = "Rename",
|
||||
text = "Переименовать",
|
||||
onClick = {
|
||||
menuState.hide()
|
||||
isRenaming = true
|
||||
@@ -219,7 +219,7 @@ fun LocalPlaylistSongs(
|
||||
|
||||
MenuEntry(
|
||||
icon = R.drawable.trash,
|
||||
text = "Delete",
|
||||
text = "Удалить",
|
||||
onClick = {
|
||||
menuState.hide()
|
||||
isDeleting = true
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||
package it.hamy.muza.ui.screens.player
|
||||
|
||||
import androidx.compose.animation.core.LinearEasing
|
||||
import androidx.compose.animation.core.animateDp
|
||||
@@ -35,23 +35,23 @@ import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.media3.common.C
|
||||
import androidx.media3.common.Player
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.ui.components.SeekBar
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.IconButton
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.favoritesIcon
|
||||
import it.vfsfitvnm.vimusic.utils.bold
|
||||
import it.vfsfitvnm.vimusic.utils.forceSeekToNext
|
||||
import it.vfsfitvnm.vimusic.utils.forceSeekToPrevious
|
||||
import it.vfsfitvnm.vimusic.utils.formatAsDuration
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.vfsfitvnm.vimusic.utils.trackLoopEnabledKey
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.ui.components.SeekBar
|
||||
import it.hamy.muza.ui.components.themed.IconButton
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.favoritesIcon
|
||||
import it.hamy.muza.utils.bold
|
||||
import it.hamy.muza.utils.forceSeekToNext
|
||||
import it.hamy.muza.utils.forceSeekToPrevious
|
||||
import it.hamy.muza.utils.formatAsDuration
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import it.hamy.muza.utils.trackLoopEnabledKey
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||
package it.hamy.muza.ui.screens.player
|
||||
|
||||
import android.app.SearchManager
|
||||
import android.content.ActivityNotFoundException
|
||||
@@ -49,32 +49,32 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.media3.common.C
|
||||
import androidx.media3.common.MediaMetadata
|
||||
import com.valentinilk.shimmer.shimmer
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.bodies.NextBody
|
||||
import it.vfsfitvnm.innertube.requests.lyrics
|
||||
import it.vfsfitvnm.kugou.KuGou
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.Lyrics
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Menu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.MenuEntry
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.DefaultDarkColorPalette
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.PureBlackColorPalette
|
||||
import it.vfsfitvnm.vimusic.ui.styling.onOverlayShimmer
|
||||
import it.vfsfitvnm.vimusic.utils.SynchronizedLyrics
|
||||
import it.vfsfitvnm.vimusic.utils.center
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.isShowingSynchronizedLyricsKey
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.vfsfitvnm.vimusic.utils.toast
|
||||
import it.vfsfitvnm.vimusic.utils.verticalFadingEdge
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.bodies.NextBody
|
||||
import it.hamy.innertube.requests.lyrics
|
||||
import it.hamy.kugou.KuGou
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.Lyrics
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.themed.Menu
|
||||
import it.hamy.muza.ui.components.themed.MenuEntry
|
||||
import it.hamy.muza.ui.components.themed.TextFieldDialog
|
||||
import it.hamy.muza.ui.components.themed.TextPlaceholder
|
||||
import it.hamy.muza.ui.styling.DefaultDarkColorPalette
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.PureBlackColorPalette
|
||||
import it.hamy.muza.ui.styling.onOverlayShimmer
|
||||
import it.hamy.muza.utils.SynchronizedLyrics
|
||||
import it.hamy.muza.utils.center
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.isShowingSynchronizedLyricsKey
|
||||
import it.hamy.muza.utils.medium
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
import it.hamy.muza.utils.toast
|
||||
import it.hamy.muza.utils.verticalFadingEdge
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.isActive
|
||||
@@ -169,7 +169,7 @@ fun Lyrics(
|
||||
|
||||
if (isEditing) {
|
||||
TextFieldDialog(
|
||||
hintText = "Enter the lyrics",
|
||||
hintText = "Введите текст песни",
|
||||
initialTextInput = text ?: "",
|
||||
singleLine = false,
|
||||
maxLines = 10,
|
||||
@@ -218,7 +218,7 @@ fun Lyrics(
|
||||
.align(Alignment.TopCenter)
|
||||
) {
|
||||
BasicText(
|
||||
text = "An error has occurred while fetching the ${if (isShowingSynchronizedLyrics) "synchronized " else ""}lyrics",
|
||||
text = "Произошла ошибка при синхронизации ${if (isShowingSynchronizedLyrics) "синхронизирован " else ""}текст песни",
|
||||
style = typography.xs.center.medium.color(PureBlackColorPalette.text),
|
||||
modifier = Modifier
|
||||
.background(Color.Black.copy(0.4f))
|
||||
@@ -235,7 +235,7 @@ fun Lyrics(
|
||||
.align(Alignment.TopCenter)
|
||||
) {
|
||||
BasicText(
|
||||
text = "${if (isShowingSynchronizedLyrics) "Synchronized l" else "L"}yrics are not available for this song",
|
||||
text = "${if (isShowingSynchronizedLyrics) "Синхронизирован текст" else "Т"}екст песни не доступен",
|
||||
style = typography.xs.center.medium.color(PureBlackColorPalette.text),
|
||||
modifier = Modifier
|
||||
.background(Color.Black.copy(0.4f))
|
||||
@@ -334,8 +334,8 @@ fun Lyrics(
|
||||
Menu {
|
||||
MenuEntry(
|
||||
icon = R.drawable.time,
|
||||
text = "Show ${if (isShowingSynchronizedLyrics) "un" else ""}synchronized lyrics",
|
||||
secondaryText = if (isShowingSynchronizedLyrics) null else "Provided by kugou.com",
|
||||
text = "Показать ${if (isShowingSynchronizedLyrics) "не" else ""}синхронизированный текст",
|
||||
secondaryText = if (isShowingSynchronizedLyrics) null else "при помощи kugou.com",
|
||||
onClick = {
|
||||
menuState.hide()
|
||||
isShowingSynchronizedLyrics =
|
||||
@@ -345,7 +345,7 @@ fun Lyrics(
|
||||
|
||||
MenuEntry(
|
||||
icon = R.drawable.pencil,
|
||||
text = "Edit lyrics",
|
||||
text = "Изменить текст песни",
|
||||
onClick = {
|
||||
menuState.hide()
|
||||
isEditing = true
|
||||
@@ -354,7 +354,7 @@ fun Lyrics(
|
||||
|
||||
MenuEntry(
|
||||
icon = R.drawable.search,
|
||||
text = "Search lyrics online",
|
||||
text = "Искать текст в интернете",
|
||||
onClick = {
|
||||
menuState.hide()
|
||||
val mediaMetadata = mediaMetadataProvider()
|
||||
@@ -364,19 +364,19 @@ fun Lyrics(
|
||||
Intent(Intent.ACTION_WEB_SEARCH).apply {
|
||||
putExtra(
|
||||
SearchManager.QUERY,
|
||||
"${mediaMetadata.title} ${mediaMetadata.artist} lyrics"
|
||||
"${mediaMetadata.title} ${mediaMetadata.artist} текст песни"
|
||||
)
|
||||
}
|
||||
)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
context.toast("Couldn't find an application to browse the Internet")
|
||||
context.toast("На вашем смартфоне не установлен поисковик!")
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
MenuEntry(
|
||||
icon = R.drawable.download,
|
||||
text = "Fetch lyrics again",
|
||||
text = "Обновить текст песни",
|
||||
enabled = lyrics != null,
|
||||
onClick = {
|
||||
menuState.hide()
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||
package it.hamy.muza.ui.screens.player
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.fadeIn
|
||||
@@ -20,11 +20,11 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.ui.styling.PureBlackColorPalette
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.center
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.hamy.muza.ui.styling.PureBlackColorPalette
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.center
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.medium
|
||||
|
||||
@Composable
|
||||
fun PlaybackError(
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||
package it.hamy.muza.ui.screens.player
|
||||
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Intent
|
||||
@@ -46,31 +46,31 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.media3.common.MediaItem
|
||||
import androidx.media3.common.Player
|
||||
import coil.compose.AsyncImage
|
||||
import it.vfsfitvnm.innertube.models.NavigationEndpoint
|
||||
import it.vfsfitvnm.compose.routing.OnGlobalRoute
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.service.PlayerService
|
||||
import it.vfsfitvnm.vimusic.ui.components.BottomSheet
|
||||
import it.vfsfitvnm.vimusic.ui.components.BottomSheetState
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.rememberBottomSheetState
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.BaseMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.IconButton
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.collapsedPlayerProgressBar
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.DisposableListener
|
||||
import it.vfsfitvnm.vimusic.utils.forceSeekToNext
|
||||
import it.vfsfitvnm.vimusic.utils.isLandscape
|
||||
import it.vfsfitvnm.vimusic.utils.positionAndDurationState
|
||||
import it.vfsfitvnm.vimusic.utils.seamlessPlay
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.vfsfitvnm.vimusic.utils.shouldBePlaying
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
||||
import it.vfsfitvnm.vimusic.utils.toast
|
||||
import it.hamy.innertube.models.NavigationEndpoint
|
||||
import it.hamy.compose.routing.OnGlobalRoute
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.service.PlayerService
|
||||
import it.hamy.muza.ui.components.BottomSheet
|
||||
import it.hamy.muza.ui.components.BottomSheetState
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.rememberBottomSheetState
|
||||
import it.hamy.muza.ui.components.themed.BaseMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.IconButton
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.collapsedPlayerProgressBar
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.DisposableListener
|
||||
import it.hamy.muza.utils.forceSeekToNext
|
||||
import it.hamy.muza.utils.isLandscape
|
||||
import it.hamy.muza.utils.positionAndDurationState
|
||||
import it.hamy.muza.utils.seamlessPlay
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
import it.hamy.muza.utils.shouldBePlaying
|
||||
import it.hamy.muza.utils.thumbnail
|
||||
import it.hamy.muza.utils.toast
|
||||
import kotlin.math.absoluteValue
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@@ -404,7 +404,7 @@ private fun PlayerMenu(
|
||||
}
|
||||
)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
context.toast("Couldn't find an application to equalize audio")
|
||||
context.toast("На вашем смартфоне не найдено эквалайзера")
|
||||
}
|
||||
},
|
||||
onShowSleepTimer = {},
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||
package it.hamy.muza.ui.screens.player
|
||||
|
||||
import androidx.compose.animation.AnimatedContent
|
||||
import androidx.compose.animation.AnimatedContentScope
|
||||
@@ -53,34 +53,34 @@ import androidx.media3.common.MediaItem
|
||||
import androidx.media3.common.Player
|
||||
import androidx.media3.common.Timeline
|
||||
import com.valentinilk.shimmer.shimmer
|
||||
import it.vfsfitvnm.compose.reordering.ReorderingLazyColumn
|
||||
import it.vfsfitvnm.compose.reordering.animateItemPlacement
|
||||
import it.vfsfitvnm.compose.reordering.draggedItem
|
||||
import it.vfsfitvnm.compose.reordering.rememberReorderingState
|
||||
import it.vfsfitvnm.compose.reordering.reorder
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.ui.components.BottomSheet
|
||||
import it.vfsfitvnm.vimusic.ui.components.BottomSheetState
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.MusicBars
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.IconButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.QueuedMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.onOverlay
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.DisposableListener
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.vfsfitvnm.vimusic.utils.queueLoopEnabledKey
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.vfsfitvnm.vimusic.utils.shouldBePlaying
|
||||
import it.vfsfitvnm.vimusic.utils.shuffleQueue
|
||||
import it.vfsfitvnm.vimusic.utils.smoothScrollToTop
|
||||
import it.vfsfitvnm.vimusic.utils.windows
|
||||
import it.hamy.compose.reordering.ReorderingLazyColumn
|
||||
import it.hamy.compose.reordering.animateItemPlacement
|
||||
import it.hamy.compose.reordering.draggedItem
|
||||
import it.hamy.compose.reordering.rememberReorderingState
|
||||
import it.hamy.compose.reordering.reorder
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.ui.components.BottomSheet
|
||||
import it.hamy.muza.ui.components.BottomSheetState
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.MusicBars
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.IconButton
|
||||
import it.hamy.muza.ui.components.themed.QueuedMediaItemMenu
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.onOverlay
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.DisposableListener
|
||||
import it.hamy.muza.utils.medium
|
||||
import it.hamy.muza.utils.queueLoopEnabledKey
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
import it.hamy.muza.utils.shouldBePlaying
|
||||
import it.hamy.muza.utils.shuffleQueue
|
||||
import it.hamy.muza.utils.smoothScrollToTop
|
||||
import it.hamy.muza.utils.windows
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@@ -331,7 +331,7 @@ fun Queue(
|
||||
.height(64.dp)
|
||||
) {
|
||||
BasicText(
|
||||
text = "${windows.size} songs",
|
||||
text = "${windows.size} песни",
|
||||
style = typography.xxs.medium,
|
||||
modifier = Modifier
|
||||
.background(
|
||||
@@ -361,7 +361,7 @@ fun Queue(
|
||||
.animateContentSize()
|
||||
) {
|
||||
BasicText(
|
||||
text = "Queue loop ",
|
||||
text = "Повтор очереди ",
|
||||
style = typography.xxs.medium,
|
||||
)
|
||||
|
||||
@@ -377,7 +377,7 @@ fun Queue(
|
||||
}
|
||||
) {
|
||||
BasicText(
|
||||
text = if (it) "on" else "off",
|
||||
text = if (it) "ВКЛ." else "ВЫКЛ.",
|
||||
style = typography.xxs.medium,
|
||||
)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||
package it.hamy.muza.ui.screens.player
|
||||
|
||||
import android.text.format.Formatter
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
@@ -27,17 +27,17 @@ import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.media3.datasource.cache.Cache
|
||||
import androidx.media3.datasource.cache.CacheSpan
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.bodies.PlayerBody
|
||||
import it.vfsfitvnm.innertube.requests.player
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.models.Format
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.onOverlay
|
||||
import it.vfsfitvnm.vimusic.ui.styling.overlay
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.bodies.PlayerBody
|
||||
import it.hamy.innertube.requests.player
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.models.Format
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.onOverlay
|
||||
import it.hamy.muza.ui.styling.overlay
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.medium
|
||||
import kotlin.math.roundToInt
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||
package it.hamy.muza.ui.screens.player
|
||||
|
||||
import androidx.compose.animation.AnimatedContent
|
||||
import androidx.compose.animation.AnimatedContentScope
|
||||
@@ -30,18 +30,18 @@ import androidx.media3.common.MediaItem
|
||||
import androidx.media3.common.PlaybackException
|
||||
import androidx.media3.common.Player
|
||||
import coil.compose.AsyncImage
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.service.LoginRequiredException
|
||||
import it.vfsfitvnm.vimusic.service.PlayableFormatNotFoundException
|
||||
import it.vfsfitvnm.vimusic.service.UnplayableException
|
||||
import it.vfsfitvnm.vimusic.service.VideoIdMismatchException
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.currentWindow
|
||||
import it.vfsfitvnm.vimusic.utils.DisposableListener
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnail
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.service.LoginRequiredException
|
||||
import it.hamy.muza.service.PlayableFormatNotFoundException
|
||||
import it.hamy.muza.service.UnplayableException
|
||||
import it.hamy.muza.service.VideoIdMismatchException
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.currentWindow
|
||||
import it.hamy.muza.utils.DisposableListener
|
||||
import it.hamy.muza.utils.thumbnail
|
||||
import java.net.UnknownHostException
|
||||
import java.nio.channels.UnresolvedAddressException
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.playlist
|
||||
package it.hamy.muza.ui.screens.playlist
|
||||
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
|
||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
||||
import it.hamy.compose.persist.PersistMapCleanup
|
||||
import it.hamy.compose.routing.RouteHandler
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.ui.components.themed.Scaffold
|
||||
import it.hamy.muza.ui.screens.globalRoutes
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -27,7 +27,7 @@ fun PlaylistScreen(browseId: String) {
|
||||
tabIndex = 0,
|
||||
onTabChanged = { },
|
||||
tabColumnContent = { Item ->
|
||||
Item(0, "Songs", R.drawable.musical_notes)
|
||||
Item(0, "Песни", R.drawable.musical_notes)
|
||||
}
|
||||
) { currentTabIndex ->
|
||||
saveableStateHolder.SaveableStateProvider(key = currentTabIndex) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.playlist
|
||||
package it.hamy.muza.ui.screens.playlist
|
||||
|
||||
import android.content.Intent
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
@@ -25,40 +25,40 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import com.valentinilk.shimmer.shimmer
|
||||
import it.vfsfitvnm.compose.persist.persist
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.bodies.BrowseBody
|
||||
import it.vfsfitvnm.innertube.requests.playlistPage
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.Playlist
|
||||
import it.vfsfitvnm.vimusic.models.SongPlaylistMap
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.transaction
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.ShimmerHost
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.HeaderPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.adaptiveThumbnailContent
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.completed
|
||||
import it.vfsfitvnm.vimusic.utils.enqueue
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
|
||||
import it.vfsfitvnm.vimusic.utils.isLandscape
|
||||
import it.hamy.compose.persist.persist
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.bodies.BrowseBody
|
||||
import it.hamy.innertube.requests.playlistPage
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.Playlist
|
||||
import it.hamy.muza.models.SongPlaylistMap
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.transaction
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.ShimmerHost
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.HeaderIconButton
|
||||
import it.hamy.muza.ui.components.themed.HeaderPlaceholder
|
||||
import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail
|
||||
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||
import it.hamy.muza.ui.components.themed.TextFieldDialog
|
||||
import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.completed
|
||||
import it.hamy.muza.utils.enqueue
|
||||
import it.hamy.muza.utils.forcePlayAtIndex
|
||||
import it.hamy.muza.utils.forcePlayFromBeginning
|
||||
import it.hamy.muza.utils.isLandscape
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
@@ -92,7 +92,7 @@ fun PlaylistSongList(
|
||||
|
||||
if (isImportingPlaylist) {
|
||||
TextFieldDialog(
|
||||
hintText = "Enter the playlist name",
|
||||
hintText = "Введите название плейлиста",
|
||||
initialTextInput = playlistPage?.title ?: "",
|
||||
onDismiss = { isImportingPlaylist = false },
|
||||
onDone = { text ->
|
||||
@@ -123,9 +123,9 @@ fun PlaylistSongList(
|
||||
.shimmer()
|
||||
)
|
||||
} else {
|
||||
Header(title = playlistPage?.title ?: "Unknown") {
|
||||
Header(title = playlistPage?.title ?: "Неизвестный") {
|
||||
SecondaryTextButton(
|
||||
text = "Enqueue",
|
||||
text = "В очередь",
|
||||
enabled = playlistPage?.songsPage?.items?.isNotEmpty() == true,
|
||||
onClick = {
|
||||
playlistPage?.songsPage?.items?.map(Innertube.SongItem::asMediaItem)?.let { mediaItems ->
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.search
|
||||
package it.hamy.muza.ui.screens.search
|
||||
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
@@ -22,25 +22,25 @@ import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.text.input.ImeAction
|
||||
import androidx.compose.ui.text.input.TextFieldValue
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import it.vfsfitvnm.compose.persist.persistList
|
||||
import it.vfsfitvnm.innertube.models.NavigationEndpoint
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.models.Song
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.align
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.hamy.compose.persist.persistList
|
||||
import it.hamy.innertube.models.NavigationEndpoint
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.models.Song
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.InHistoryMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.align
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.forcePlay
|
||||
import it.hamy.muza.utils.medium
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -95,7 +95,7 @@ fun LocalSongSearch(
|
||||
actionsContent = {
|
||||
if (textFieldValue.text.isNotEmpty()) {
|
||||
SecondaryTextButton(
|
||||
text = "Clear",
|
||||
text = "Очистить",
|
||||
onClick = { onTextFieldValueChanged(TextFieldValue()) }
|
||||
)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.search
|
||||
package it.hamy.muza.ui.screens.search
|
||||
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.Image
|
||||
@@ -43,26 +43,26 @@ import androidx.compose.ui.text.input.TextFieldValue
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.net.toUri
|
||||
import it.vfsfitvnm.compose.persist.persist
|
||||
import it.vfsfitvnm.compose.persist.persistList
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.bodies.SearchSuggestionsBody
|
||||
import it.vfsfitvnm.innertube.requests.searchSuggestions
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.models.SearchQuery
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.align
|
||||
import it.vfsfitvnm.vimusic.utils.center
|
||||
import it.vfsfitvnm.vimusic.utils.medium
|
||||
import it.vfsfitvnm.vimusic.utils.pauseSearchHistoryKey
|
||||
import it.vfsfitvnm.vimusic.utils.preferences
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.hamy.compose.persist.persist
|
||||
import it.hamy.compose.persist.persistList
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.bodies.SearchSuggestionsBody
|
||||
import it.hamy.innertube.requests.searchSuggestions
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.models.SearchQuery
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.SecondaryTextButton
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.align
|
||||
import it.hamy.muza.utils.center
|
||||
import it.hamy.muza.utils.medium
|
||||
import it.hamy.muza.utils.pauseSearchHistoryKey
|
||||
import it.hamy.muza.utils.preferences
|
||||
import it.hamy.muza.utils.secondary
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
|
||||
@@ -160,7 +160,7 @@ fun OnlineSearch(
|
||||
val isAlbum = playlistId.startsWith("OLAK5uy_")
|
||||
|
||||
SecondaryTextButton(
|
||||
text = "View ${if (isAlbum) "album" else "playlist"}",
|
||||
text = "Посмотреть ${if (isAlbum) "альбом" else "плейлист"}",
|
||||
onClick = { onViewPlaylist(textFieldValue.text) }
|
||||
)
|
||||
}
|
||||
@@ -172,7 +172,7 @@ fun OnlineSearch(
|
||||
|
||||
if (textFieldValue.text.isNotEmpty()) {
|
||||
SecondaryTextButton(
|
||||
text = "Clear",
|
||||
text = "Очистить",
|
||||
onClick = { onTextFieldValueChanged(TextFieldValue()) }
|
||||
)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.search
|
||||
package it.hamy.muza.ui.screens.search
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
@@ -16,13 +16,13 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.TextRange
|
||||
import androidx.compose.ui.text.input.TextFieldValue
|
||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.hamy.compose.persist.PersistMapCleanup
|
||||
import it.hamy.compose.routing.RouteHandler
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.ui.components.themed.Scaffold
|
||||
import it.hamy.muza.ui.screens.globalRoutes
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.secondary
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -66,7 +66,7 @@ fun SearchScreen(
|
||||
.align(Alignment.CenterEnd)
|
||||
) {
|
||||
BasicText(
|
||||
text = "Enter a name",
|
||||
text = "Найти...",
|
||||
maxLines = 1,
|
||||
style = LocalAppearance.current.typography.xxl.secondary
|
||||
)
|
||||
@@ -82,8 +82,8 @@ fun SearchScreen(
|
||||
tabIndex = tabIndex,
|
||||
onTabChanged = onTabChanged,
|
||||
tabColumnContent = { Item ->
|
||||
Item(0, "Online", R.drawable.globe)
|
||||
Item(1, "Library", R.drawable.library)
|
||||
Item(0, "Онлайн", R.drawable.globe)
|
||||
Item(1, "Библиотека", R.drawable.library)
|
||||
}
|
||||
) { currentTabIndex ->
|
||||
saveableStateHolder.SaveableStateProvider(currentTabIndex) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.searchresult
|
||||
package it.hamy.muza.ui.screens.searchresult
|
||||
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@@ -21,15 +21,15 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.runtime.snapshotFlow
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.compose.persist.persist
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.utils.plus
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.ui.components.ShimmerHost
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.center
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.hamy.compose.persist.persist
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.utils.plus
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.ui.components.ShimmerHost
|
||||
import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.center
|
||||
import it.hamy.muza.utils.secondary
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
@@ -43,7 +43,7 @@ inline fun <T : Innertube.Item> ItemsPage(
|
||||
modifier: Modifier = Modifier,
|
||||
initialPlaceholderCount: Int = 8,
|
||||
continuationPlaceholderCount: Int = 3,
|
||||
emptyItemsText: String = "No items found",
|
||||
emptyItemsText: String = "Ничего не нашлось",
|
||||
noinline itemsPageProvider: (suspend (String?) -> Result<Innertube.ItemsPage<T>?>?)? = null,
|
||||
) {
|
||||
val (_, typography) = LocalAppearance.current
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.searchresult
|
||||
package it.hamy.muza.ui.screens.searchresult
|
||||
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
@@ -11,40 +11,40 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.compose.persist.PersistMapCleanup
|
||||
import it.vfsfitvnm.compose.persist.persistMap
|
||||
import it.vfsfitvnm.innertube.Innertube
|
||||
import it.vfsfitvnm.innertube.models.bodies.ContinuationBody
|
||||
import it.vfsfitvnm.innertube.models.bodies.SearchBody
|
||||
import it.vfsfitvnm.innertube.requests.searchPage
|
||||
import it.vfsfitvnm.innertube.utils.from
|
||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.ArtistItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.ArtistItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.PlaylistItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.PlaylistItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.items.VideoItem
|
||||
import it.vfsfitvnm.vimusic.ui.items.VideoItemPlaceholder
|
||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.artistRoute
|
||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
||||
import it.vfsfitvnm.vimusic.ui.screens.playlistRoute
|
||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||
import it.vfsfitvnm.vimusic.utils.asMediaItem
|
||||
import it.vfsfitvnm.vimusic.utils.forcePlay
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.vfsfitvnm.vimusic.utils.searchResultScreenTabIndexKey
|
||||
import it.hamy.compose.persist.PersistMapCleanup
|
||||
import it.hamy.compose.persist.persistMap
|
||||
import it.hamy.innertube.Innertube
|
||||
import it.hamy.innertube.models.bodies.ContinuationBody
|
||||
import it.hamy.innertube.models.bodies.SearchBody
|
||||
import it.hamy.innertube.requests.searchPage
|
||||
import it.hamy.innertube.utils.from
|
||||
import it.hamy.compose.routing.RouteHandler
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.ui.components.LocalMenuState
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu
|
||||
import it.hamy.muza.ui.components.themed.Scaffold
|
||||
import it.hamy.muza.ui.items.AlbumItem
|
||||
import it.hamy.muza.ui.items.AlbumItemPlaceholder
|
||||
import it.hamy.muza.ui.items.ArtistItem
|
||||
import it.hamy.muza.ui.items.ArtistItemPlaceholder
|
||||
import it.hamy.muza.ui.items.PlaylistItem
|
||||
import it.hamy.muza.ui.items.PlaylistItemPlaceholder
|
||||
import it.hamy.muza.ui.items.SongItem
|
||||
import it.hamy.muza.ui.items.SongItemPlaceholder
|
||||
import it.hamy.muza.ui.items.VideoItem
|
||||
import it.hamy.muza.ui.items.VideoItemPlaceholder
|
||||
import it.hamy.muza.ui.screens.albumRoute
|
||||
import it.hamy.muza.ui.screens.artistRoute
|
||||
import it.hamy.muza.ui.screens.globalRoutes
|
||||
import it.hamy.muza.ui.screens.playlistRoute
|
||||
import it.hamy.muza.ui.styling.Dimensions
|
||||
import it.hamy.muza.ui.styling.px
|
||||
import it.hamy.muza.utils.asMediaItem
|
||||
import it.hamy.muza.utils.forcePlay
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
import it.hamy.muza.utils.searchResultScreenTabIndexKey
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -75,7 +75,7 @@ fun SearchResultScreen(query: String, onSearchAgain: () -> Unit) {
|
||||
)
|
||||
}
|
||||
|
||||
val emptyItemsText = "No results found. Please try a different query or category"
|
||||
val emptyItemsText = "Ничего не нашлось"
|
||||
|
||||
Scaffold(
|
||||
topIconButtonId = R.drawable.chevron_back,
|
||||
@@ -83,12 +83,12 @@ fun SearchResultScreen(query: String, onSearchAgain: () -> Unit) {
|
||||
tabIndex = tabIndex,
|
||||
onTabChanged = onTabIndexChanges,
|
||||
tabColumnContent = { Item ->
|
||||
Item(0, "Songs", R.drawable.musical_notes)
|
||||
Item(1, "Albums", R.drawable.disc)
|
||||
Item(2, "Artists", R.drawable.person)
|
||||
Item(3, "Videos", R.drawable.film)
|
||||
Item(4, "Playlists", R.drawable.playlist)
|
||||
Item(5, "Featured", R.drawable.playlist)
|
||||
Item(0, "Песни", R.drawable.musical_notes)
|
||||
Item(1, "Альбомы", R.drawable.disc)
|
||||
Item(2, "Исполнители", R.drawable.person)
|
||||
Item(3, "Видео", R.drawable.film)
|
||||
Item(4, "Плейлисты", R.drawable.playlist)
|
||||
Item(5, "Рекомендации", R.drawable.playlist)
|
||||
}
|
||||
) { tabIndex ->
|
||||
saveableStateHolder.SaveableStateProvider(tabIndex) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.settings
|
||||
package it.hamy.muza.ui.screens.settings
|
||||
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.background
|
||||
@@ -14,11 +14,11 @@ import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import it.vfsfitvnm.vimusic.BuildConfig
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.hamy.muza.BuildConfig
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.secondary
|
||||
|
||||
@ExperimentalAnimationApi
|
||||
@Composable
|
||||
@@ -37,40 +37,40 @@ fun About() {
|
||||
.asPaddingValues()
|
||||
)
|
||||
) {
|
||||
Header(title = "About") {
|
||||
Header(title = "Информация") {
|
||||
BasicText(
|
||||
text = "v${BuildConfig.VERSION_NAME} by vfsfitvnm",
|
||||
text = "v${BuildConfig.VERSION_NAME} by Hamy",
|
||||
style = typography.s.secondary
|
||||
)
|
||||
}
|
||||
|
||||
SettingsEntryGroupText(title = "SOCIAL")
|
||||
SettingsEntryGroupText(title = "СОЦИАЛЬНОЕ")
|
||||
|
||||
SettingsEntry(
|
||||
title = "GitHub",
|
||||
text = "View the source code",
|
||||
text = "Посмотреть исходный код",
|
||||
onClick = {
|
||||
uriHandler.openUri("https://github.com/vfsfitvnm/ViMusic")
|
||||
uriHandler.openUri("https://github.com/hammsterr/muza")
|
||||
}
|
||||
)
|
||||
|
||||
SettingsEntry(
|
||||
title = "Новости",
|
||||
text = "Следите за новостями в группе ВКонтакте",
|
||||
onClick = {
|
||||
uriHandler.openUri("https://vk.com/hamyack")
|
||||
}
|
||||
)
|
||||
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "TROUBLESHOOTING")
|
||||
SettingsEntryGroupText(title = "ДИАГНОСТИКА")
|
||||
|
||||
SettingsEntry(
|
||||
title = "Report an issue",
|
||||
text = "You will be redirected to GitHub",
|
||||
title = "Тех. поддержка",
|
||||
text = "Сообщайте об ошибках или пожеланиях",
|
||||
onClick = {
|
||||
uriHandler.openUri("https://github.com/vfsfitvnm/ViMusic/issues/new?assignees=&labels=bug&template=bug_report.yaml")
|
||||
}
|
||||
)
|
||||
|
||||
SettingsEntry(
|
||||
title = "Request a feature or suggest an idea",
|
||||
text = "You will be redirected to GitHub",
|
||||
onClick = {
|
||||
uriHandler.openUri("https://github.com/vfsfitvnm/ViMusic/issues/new?assignees=&labels=enhancement&template=feature_request.yaml")
|
||||
uriHandler.openUri("https://hamyack.pages.dev")
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.settings
|
||||
package it.hamy.muza.ui.screens.settings
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.ComponentName
|
||||
import android.content.pm.PackageManager
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
@@ -18,20 +21,23 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.enums.ColorPaletteMode
|
||||
import it.vfsfitvnm.vimusic.enums.ColorPaletteName
|
||||
import it.vfsfitvnm.vimusic.enums.ThumbnailRoundness
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.applyFontPaddingKey
|
||||
import it.vfsfitvnm.vimusic.utils.colorPaletteModeKey
|
||||
import it.vfsfitvnm.vimusic.utils.colorPaletteNameKey
|
||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid13
|
||||
import it.vfsfitvnm.vimusic.utils.isShowingThumbnailInLockscreenKey
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.vfsfitvnm.vimusic.utils.thumbnailRoundnessKey
|
||||
import it.vfsfitvnm.vimusic.utils.useSystemFontKey
|
||||
import androidx.core.content.ContextCompat
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.enums.ColorPaletteMode
|
||||
import it.hamy.muza.enums.ColorPaletteName
|
||||
import it.hamy.muza.enums.ThumbnailRoundness
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.applyFontPaddingKey
|
||||
import it.hamy.muza.utils.colorPaletteModeKey
|
||||
import it.hamy.muza.utils.colorPaletteNameKey
|
||||
import it.hamy.muza.utils.isAtLeastAndroid13
|
||||
import it.hamy.muza.utils.isShowingThumbnailInLockscreenKey
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
import it.hamy.muza.utils.thumbnailRoundnessKey
|
||||
import it.hamy.muza.utils.useSystemFontKey
|
||||
import it.hamy.muza.*
|
||||
|
||||
|
||||
@ExperimentalAnimationApi
|
||||
@Composable
|
||||
@@ -49,6 +55,7 @@ fun AppearanceSettings() {
|
||||
var isShowingThumbnailInLockscreen by rememberPreference(
|
||||
isShowingThumbnailInLockscreenKey,
|
||||
false
|
||||
|
||||
)
|
||||
|
||||
Column(
|
||||
@@ -62,18 +69,18 @@ fun AppearanceSettings() {
|
||||
.asPaddingValues()
|
||||
)
|
||||
) {
|
||||
Header(title = "Appearance")
|
||||
Header(title = "Внешний Вид")
|
||||
|
||||
SettingsEntryGroupText(title = "COLORS")
|
||||
SettingsEntryGroupText(title = "ЦВЕТА")
|
||||
|
||||
EnumValueSelectorSettingsEntry(
|
||||
title = "Theme",
|
||||
title = "Цвет темы",
|
||||
selectedValue = colorPaletteName,
|
||||
onValueSelected = { colorPaletteName = it }
|
||||
)
|
||||
|
||||
EnumValueSelectorSettingsEntry(
|
||||
title = "Theme mode",
|
||||
title = "Ночная тема",
|
||||
selectedValue = colorPaletteMode,
|
||||
isEnabled = colorPaletteName != ColorPaletteName.PureBlack,
|
||||
onValueSelected = { colorPaletteMode = it }
|
||||
@@ -81,17 +88,24 @@ fun AppearanceSettings() {
|
||||
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "SHAPES")
|
||||
SettingsEntryGroupText(title = "ФОРМЫ")
|
||||
|
||||
EnumValueSelectorSettingsEntry(
|
||||
title = "Thumbnail roundness",
|
||||
title = "Скругление",
|
||||
selectedValue = thumbnailRoundness,
|
||||
onValueSelected = { thumbnailRoundness = it },
|
||||
trailingContent = {
|
||||
Spacer(
|
||||
modifier = Modifier
|
||||
.border(width = 1.dp, color = colorPalette.accent, shape = thumbnailRoundness.shape())
|
||||
.background(color = colorPalette.background1, shape = thumbnailRoundness.shape())
|
||||
.border(
|
||||
width = 1.dp,
|
||||
color = colorPalette.accent,
|
||||
shape = thumbnailRoundness.shape()
|
||||
)
|
||||
.background(
|
||||
color = colorPalette.background1,
|
||||
shape = thumbnailRoundness.shape()
|
||||
)
|
||||
.size(36.dp)
|
||||
)
|
||||
}
|
||||
@@ -99,18 +113,18 @@ fun AppearanceSettings() {
|
||||
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "TEXT")
|
||||
SettingsEntryGroupText(title = "ТЕКСТ")
|
||||
|
||||
SwitchSettingEntry(
|
||||
title = "Use system font",
|
||||
text = "Use the font applied by the system",
|
||||
title = "Системный шрифт",
|
||||
text = "Использовать системный шрифт",
|
||||
isChecked = useSystemFont,
|
||||
onCheckedChange = { useSystemFont = it }
|
||||
)
|
||||
|
||||
SwitchSettingEntry(
|
||||
title = "Apply font padding",
|
||||
text = "Add spacing around texts",
|
||||
title = "Заполнение шрифта",
|
||||
text = "Увеличить пробелы текста",
|
||||
isChecked = applyFontPadding,
|
||||
onCheckedChange = { applyFontPadding = it }
|
||||
)
|
||||
@@ -118,14 +132,16 @@ fun AppearanceSettings() {
|
||||
if (!isAtLeastAndroid13) {
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "LOCKSCREEN")
|
||||
SettingsEntryGroupText(title = "ЭКРАН БЛОКИРОВКИ")
|
||||
|
||||
SwitchSettingEntry(
|
||||
title = "Show song cover",
|
||||
text = "Use the playing song cover as the lockscreen wallpaper",
|
||||
title = "Показывать обложку",
|
||||
text = "Использовать обложку в качестве обоев экрана блокировки",
|
||||
isChecked = isShowingThumbnailInLockscreen,
|
||||
onCheckedChange = { isShowingThumbnailInLockscreen = it }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.settings
|
||||
package it.hamy.muza.ui.screens.settings
|
||||
|
||||
import android.text.format.Formatter
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
@@ -20,15 +20,15 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import coil.Coil
|
||||
import coil.annotation.ExperimentalCoilApi
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.enums.CoilDiskCacheMaxSize
|
||||
import it.vfsfitvnm.vimusic.enums.ExoPlayerDiskCacheMaxSize
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.coilDiskCacheMaxSizeKey
|
||||
import it.vfsfitvnm.vimusic.utils.exoPlayerDiskCacheMaxSizeKey
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.enums.CoilDiskCacheMaxSize
|
||||
import it.hamy.muza.enums.ExoPlayerDiskCacheMaxSize
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.coilDiskCacheMaxSizeKey
|
||||
import it.hamy.muza.utils.exoPlayerDiskCacheMaxSizeKey
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
|
||||
@OptIn(ExperimentalCoilApi::class)
|
||||
@ExperimentalAnimationApi
|
||||
@@ -58,9 +58,9 @@ fun CacheSettings() {
|
||||
.asPaddingValues()
|
||||
)
|
||||
) {
|
||||
Header(title = "Cache")
|
||||
Header(title = "Кэш")
|
||||
|
||||
SettingsDescription(text = "When the cache runs out of space, the resources that haven't been accessed for the longest time are cleared")
|
||||
SettingsDescription(text = "Когда в кэше заканчивается свободное место, очищаются ресурсы, которые давно не используются.")
|
||||
|
||||
Coil.imageLoader(context).diskCache?.let { diskCache ->
|
||||
val diskCacheSize = remember(diskCache) {
|
||||
@@ -69,7 +69,7 @@ fun CacheSettings() {
|
||||
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "IMAGE CACHE")
|
||||
SettingsEntryGroupText(title = "КЭШ КАРТИНОК")
|
||||
|
||||
SettingsDescription(
|
||||
text = "${
|
||||
@@ -77,11 +77,11 @@ fun CacheSettings() {
|
||||
context,
|
||||
diskCacheSize
|
||||
)
|
||||
} used (${diskCacheSize * 100 / coilDiskCacheMaxSize.bytes.coerceAtLeast(1)}%)"
|
||||
} использовано (${diskCacheSize * 100 / coilDiskCacheMaxSize.bytes.coerceAtLeast(1)}%)"
|
||||
)
|
||||
|
||||
EnumValueSelectorSettingsEntry(
|
||||
title = "Max size",
|
||||
title = "Максимальный размер",
|
||||
selectedValue = coilDiskCacheMaxSize,
|
||||
onValueSelected = { coilDiskCacheMaxSize = it }
|
||||
)
|
||||
@@ -96,12 +96,12 @@ fun CacheSettings() {
|
||||
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "SONG CACHE")
|
||||
SettingsEntryGroupText(title = "КЭШ ПЕСЕН")
|
||||
|
||||
SettingsDescription(
|
||||
text = buildString {
|
||||
append(Formatter.formatShortFileSize(context, diskCacheSize))
|
||||
append(" used")
|
||||
append(" использовано")
|
||||
when (val size = exoPlayerDiskCacheMaxSize) {
|
||||
ExoPlayerDiskCacheMaxSize.Unlimited -> {}
|
||||
else -> append(" (${diskCacheSize * 100 / size.bytes}%)")
|
||||
@@ -110,7 +110,7 @@ fun CacheSettings() {
|
||||
)
|
||||
|
||||
EnumValueSelectorSettingsEntry(
|
||||
title = "Max size",
|
||||
title = "Максимальный размер",
|
||||
selectedValue = exoPlayerDiskCacheMaxSize,
|
||||
onValueSelected = { exoPlayerDiskCacheMaxSize = it }
|
||||
)
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.settings
|
||||
package it.hamy.muza.ui.screens.settings
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.ActivityNotFoundException
|
||||
@@ -20,16 +20,16 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.internal
|
||||
import it.vfsfitvnm.vimusic.path
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.service.PlayerService
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.intent
|
||||
import it.vfsfitvnm.vimusic.utils.toast
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.internal
|
||||
import it.hamy.muza.path
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.service.PlayerService
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.intent
|
||||
import it.hamy.muza.utils.toast
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
import java.text.SimpleDateFormat
|
||||
@@ -94,16 +94,16 @@ fun DatabaseSettings() {
|
||||
.asPaddingValues()
|
||||
)
|
||||
) {
|
||||
Header(title = "Database")
|
||||
Header(title = "Данные")
|
||||
|
||||
SettingsEntryGroupText(title = "CLEANUP")
|
||||
SettingsEntryGroupText(title = "ОЧИСТИТЬ")
|
||||
|
||||
SettingsEntry(
|
||||
title = "Reset quick picks",
|
||||
title = "Очистить воспроизведения",
|
||||
text = if (eventsCount > 0) {
|
||||
"Delete $eventsCount playback events"
|
||||
"Удалить $eventsCount событий воспроизведения"
|
||||
} else {
|
||||
"Quick picks are cleared"
|
||||
"Воспроизведения были удалены!"
|
||||
},
|
||||
isEnabled = eventsCount > 0,
|
||||
onClick = { query(Database::clearEvents) }
|
||||
@@ -111,34 +111,34 @@ fun DatabaseSettings() {
|
||||
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "BACKUP")
|
||||
SettingsEntryGroupText(title = "БЭКАП")
|
||||
|
||||
SettingsDescription(text = "Personal preferences (i.e. the theme mode) and the cache are excluded.")
|
||||
SettingsDescription(text = "Личные настройки (ночная тема и т.д.) и кэш исключаются")
|
||||
|
||||
SettingsEntry(
|
||||
title = "Backup",
|
||||
text = "Export the database to the external storage",
|
||||
title = "Бэкап",
|
||||
text = "Экспорт данных в локальное хранилище",
|
||||
onClick = {
|
||||
@SuppressLint("SimpleDateFormat")
|
||||
val dateFormat = SimpleDateFormat("yyyyMMddHHmmss")
|
||||
|
||||
try {
|
||||
backupLauncher.launch("vimusic_${dateFormat.format(Date())}.db")
|
||||
backupLauncher.launch("muza_${dateFormat.format(Date())}.db")
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
context.toast("Couldn't find an application to create documents")
|
||||
context.toast("не найдено приложения для создания документов")
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "RESTORE")
|
||||
SettingsEntryGroupText(title = "ВОССТАНОВЛЕНИЕ")
|
||||
|
||||
ImportantSettingsDescription(text = "Existing data will be overwritten.\n${context.applicationInfo.nonLocalizedLabel} will automatically close itself after restoring the database.")
|
||||
ImportantSettingsDescription(text = "Существующие настройки будут перезаписаны.\n${context.applicationInfo.nonLocalizedLabel} Будет перезапушена.")
|
||||
|
||||
SettingsEntry(
|
||||
title = "Restore",
|
||||
text = "Import the database from the external storage",
|
||||
title = "Восстановить",
|
||||
text = "импорт данных из локального хранилища",
|
||||
onClick = {
|
||||
try {
|
||||
restoreLauncher.launch(
|
||||
@@ -149,7 +149,7 @@ fun DatabaseSettings() {
|
||||
)
|
||||
)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
context.toast("Couldn't find an application to open documents")
|
||||
context.toast("не найдено приложения для открытия документов")
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.settings
|
||||
package it.hamy.muza.ui.screens.settings
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.ActivityNotFoundException
|
||||
@@ -28,19 +28,19 @@ import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import it.vfsfitvnm.vimusic.Database
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.query
|
||||
import it.vfsfitvnm.vimusic.service.PlayerMediaBrowserService
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid12
|
||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid6
|
||||
import it.vfsfitvnm.vimusic.utils.isIgnoringBatteryOptimizations
|
||||
import it.vfsfitvnm.vimusic.utils.isInvincibilityEnabledKey
|
||||
import it.vfsfitvnm.vimusic.utils.pauseSearchHistoryKey
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.vfsfitvnm.vimusic.utils.toast
|
||||
import it.hamy.muza.Database
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.query
|
||||
import it.hamy.muza.service.PlayerMediaBrowserService
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.isAtLeastAndroid12
|
||||
import it.hamy.muza.utils.isAtLeastAndroid6
|
||||
import it.hamy.muza.utils.isIgnoringBatteryOptimizations
|
||||
import it.hamy.muza.utils.isInvincibilityEnabledKey
|
||||
import it.hamy.muza.utils.pauseSearchHistoryKey
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
import it.hamy.muza.utils.toast
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
|
||||
@SuppressLint("BatteryLife")
|
||||
@@ -98,36 +98,36 @@ fun OtherSettings() {
|
||||
.asPaddingValues()
|
||||
)
|
||||
) {
|
||||
Header(title = "Other")
|
||||
Header(title = "Другое")
|
||||
|
||||
SettingsEntryGroupText(title = "ANDROID AUTO")
|
||||
SettingsEntryGroupText(title = "АНДРОИД АВТО")
|
||||
|
||||
SettingsDescription(text = "Remember to enable \"Unknown sources\" in the Developer Settings of Android Auto.")
|
||||
SettingsDescription(text = "Включите опцию \"неизвестные источники\" в настройках разработчика в Андроид Авто.")
|
||||
|
||||
SwitchSettingEntry(
|
||||
title = "Android Auto",
|
||||
text = "Enable Android Auto support",
|
||||
text = "Включить поддержку Андроид Авто",
|
||||
isChecked = isAndroidAutoEnabled,
|
||||
onCheckedChange = { isAndroidAutoEnabled = it }
|
||||
)
|
||||
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "SEARCH HISTORY")
|
||||
SettingsEntryGroupText(title = "ИСТОРИЯ ПОИСКА")
|
||||
|
||||
SwitchSettingEntry(
|
||||
title = "Pause search history",
|
||||
text = "Neither save new searched queries nor show history",
|
||||
title = "Приостановить историю",
|
||||
text = "Не сохранять историю поиска",
|
||||
isChecked = pauseSearchHistory,
|
||||
onCheckedChange = { pauseSearchHistory = it }
|
||||
)
|
||||
|
||||
SettingsEntry(
|
||||
title = "Clear search history",
|
||||
title = "Очистить историю поиска",
|
||||
text = if (queriesCount > 0) {
|
||||
"Delete $queriesCount search queries"
|
||||
"Удалить $queriesCount поисковых запросов"
|
||||
} else {
|
||||
"History is empty"
|
||||
"История чиста"
|
||||
},
|
||||
isEnabled = queriesCount > 0,
|
||||
onClick = { query(Database::clearQueries) }
|
||||
@@ -135,21 +135,21 @@ fun OtherSettings() {
|
||||
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "SERVICE LIFETIME")
|
||||
SettingsEntryGroupText(title = "ОПТИМИЗАЦИЯ БАТАРЕИ")
|
||||
|
||||
ImportantSettingsDescription(text = "If battery optimizations are applied, the playback notification can suddenly disappear when paused.")
|
||||
ImportantSettingsDescription(text = "Если включена экономия батареи, воспроизведение может внезапно остановиться!")
|
||||
|
||||
if (isAtLeastAndroid12) {
|
||||
SettingsDescription(text = "Since Android 12, disabling battery optimizations is required for the \"Invincible service\" option to take effect.")
|
||||
SettingsDescription(text = "Android 12+: Обязательно отключите экономию батареи, прежде чем включать опцию \"Invincible service\"!")
|
||||
}
|
||||
|
||||
SettingsEntry(
|
||||
title = "Ignore battery optimizations",
|
||||
title = "Игнор. экономии батареи ",
|
||||
isEnabled = !isIgnoringBatteryOptimizations,
|
||||
text = if (isIgnoringBatteryOptimizations) {
|
||||
"Already unrestricted"
|
||||
"Уже игнорируется"
|
||||
} else {
|
||||
"Disable background restrictions"
|
||||
"Отключить остановку приложения в фоне"
|
||||
},
|
||||
onClick = {
|
||||
if (!isAtLeastAndroid6) return@SettingsEntry
|
||||
@@ -166,7 +166,7 @@ fun OtherSettings() {
|
||||
Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)
|
||||
)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
context.toast("Couldn't find battery optimization settings, please whitelist ViMusic manually")
|
||||
context.toast("не найдено настроек батареи! Добавьте приложение в белый список вручную")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.settings
|
||||
package it.hamy.muza.ui.screens.settings
|
||||
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Intent
|
||||
@@ -20,17 +20,17 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Header
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid6
|
||||
import it.vfsfitvnm.vimusic.utils.persistentQueueKey
|
||||
import it.vfsfitvnm.vimusic.utils.rememberPreference
|
||||
import it.vfsfitvnm.vimusic.utils.resumePlaybackWhenDeviceConnectedKey
|
||||
import it.vfsfitvnm.vimusic.utils.skipSilenceKey
|
||||
import it.vfsfitvnm.vimusic.utils.toast
|
||||
import it.vfsfitvnm.vimusic.utils.volumeNormalizationKey
|
||||
import it.hamy.muza.LocalPlayerAwareWindowInsets
|
||||
import it.hamy.muza.LocalPlayerServiceBinder
|
||||
import it.hamy.muza.ui.components.themed.Header
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.isAtLeastAndroid6
|
||||
import it.hamy.muza.utils.persistentQueueKey
|
||||
import it.hamy.muza.utils.rememberPreference
|
||||
import it.hamy.muza.utils.resumePlaybackWhenDeviceConnectedKey
|
||||
import it.hamy.muza.utils.skipSilenceKey
|
||||
import it.hamy.muza.utils.toast
|
||||
import it.hamy.muza.utils.volumeNormalizationKey
|
||||
|
||||
@ExperimentalAnimationApi
|
||||
@Composable
|
||||
@@ -61,13 +61,13 @@ fun PlayerSettings() {
|
||||
.asPaddingValues()
|
||||
)
|
||||
) {
|
||||
Header(title = "Player & Audio")
|
||||
Header(title = "Плеер и Аудио")
|
||||
|
||||
SettingsEntryGroupText(title = "PLAYER")
|
||||
SettingsEntryGroupText(title = "Плеер")
|
||||
|
||||
SwitchSettingEntry(
|
||||
title = "Persistent queue",
|
||||
text = "Save and restore playing songs",
|
||||
title = "Постоянная очередь",
|
||||
text = "Сохранение и восстановление воспроизводимых песен",
|
||||
isChecked = persistentQueue,
|
||||
onCheckedChange = {
|
||||
persistentQueue = it
|
||||
@@ -76,8 +76,8 @@ fun PlayerSettings() {
|
||||
|
||||
if (isAtLeastAndroid6) {
|
||||
SwitchSettingEntry(
|
||||
title = "Resume playback",
|
||||
text = "When a wired or bluetooth device is connected",
|
||||
title = "Возобновление музыки",
|
||||
text = "При подключении bluetooth устройств",
|
||||
isChecked = resumePlaybackWhenDeviceConnected,
|
||||
onCheckedChange = {
|
||||
resumePlaybackWhenDeviceConnected = it
|
||||
@@ -87,11 +87,11 @@ fun PlayerSettings() {
|
||||
|
||||
SettingsGroupSpacer()
|
||||
|
||||
SettingsEntryGroupText(title = "AUDIO")
|
||||
SettingsEntryGroupText(title = "АУДИО")
|
||||
|
||||
SwitchSettingEntry(
|
||||
title = "Skip silence",
|
||||
text = "Skip silent parts during playback",
|
||||
title = "Пропускать тишину",
|
||||
text = "Пропускать тихие фрагменты песен",
|
||||
isChecked = skipSilence,
|
||||
onCheckedChange = {
|
||||
skipSilence = it
|
||||
@@ -99,8 +99,8 @@ fun PlayerSettings() {
|
||||
)
|
||||
|
||||
SwitchSettingEntry(
|
||||
title = "Loudness normalization",
|
||||
text = "Adjust the volume to a fixed level",
|
||||
title = "Нормализация звука",
|
||||
text = "Фиксированный уровень громкости",
|
||||
isChecked = volumeNormalization,
|
||||
onCheckedChange = {
|
||||
volumeNormalization = it
|
||||
@@ -108,8 +108,8 @@ fun PlayerSettings() {
|
||||
)
|
||||
|
||||
SettingsEntry(
|
||||
title = "Equalizer",
|
||||
text = "Interact with the system equalizer",
|
||||
title = "Эквалайзер",
|
||||
text = "Открыть системный эквалайзер",
|
||||
onClick = {
|
||||
val intent = Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL).apply {
|
||||
putExtra(AudioEffect.EXTRA_AUDIO_SESSION, binder?.player?.audioSessionId)
|
||||
@@ -120,7 +120,7 @@ fun PlayerSettings() {
|
||||
try {
|
||||
activityResultLauncher.launch(intent)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
context.toast("Couldn't find an application to equalize audio")
|
||||
context.toast("не найден эквалайзер")
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.screens.settings
|
||||
package it.hamy.muza.ui.screens.settings
|
||||
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
@@ -22,16 +22,16 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.unit.dp
|
||||
import it.vfsfitvnm.compose.routing.RouteHandler
|
||||
import it.vfsfitvnm.vimusic.R
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.Switch
|
||||
import it.vfsfitvnm.vimusic.ui.components.themed.ValueSelectorDialog
|
||||
import it.vfsfitvnm.vimusic.ui.screens.globalRoutes
|
||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||
import it.vfsfitvnm.vimusic.utils.color
|
||||
import it.vfsfitvnm.vimusic.utils.secondary
|
||||
import it.vfsfitvnm.vimusic.utils.semiBold
|
||||
import it.hamy.compose.routing.RouteHandler
|
||||
import it.hamy.muza.R
|
||||
import it.hamy.muza.ui.components.themed.Scaffold
|
||||
import it.hamy.muza.ui.components.themed.Switch
|
||||
import it.hamy.muza.ui.components.themed.ValueSelectorDialog
|
||||
import it.hamy.muza.ui.screens.globalRoutes
|
||||
import it.hamy.muza.ui.styling.LocalAppearance
|
||||
import it.hamy.muza.utils.color
|
||||
import it.hamy.muza.utils.secondary
|
||||
import it.hamy.muza.utils.semiBold
|
||||
|
||||
@ExperimentalFoundationApi
|
||||
@ExperimentalAnimationApi
|
||||
@@ -53,12 +53,12 @@ fun SettingsScreen() {
|
||||
tabIndex = tabIndex,
|
||||
onTabChanged = onTabChanged,
|
||||
tabColumnContent = { Item ->
|
||||
Item(0, "Appearance", R.drawable.color_palette)
|
||||
Item(1, "Player", R.drawable.play)
|
||||
Item(2, "Cache", R.drawable.server)
|
||||
Item(3, "Database", R.drawable.server)
|
||||
Item(4, "Other", R.drawable.shapes)
|
||||
Item(5, "About", R.drawable.information)
|
||||
Item(0, "Вид", R.drawable.color_palette)
|
||||
Item(1, "Плеер", R.drawable.play)
|
||||
Item(2, "Кэш", R.drawable.server)
|
||||
Item(3, "Данные", R.drawable.server)
|
||||
Item(4, "Другое", R.drawable.shapes)
|
||||
Item(5, "Инфо", R.drawable.information)
|
||||
}
|
||||
) { currentTabIndex ->
|
||||
saveableStateHolder.SaveableStateProvider(currentTabIndex) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package it.vfsfitvnm.vimusic.ui.styling
|
||||
package it.hamy.muza.ui.styling
|
||||
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
@@ -30,6 +30,7 @@ data class Appearance(
|
||||
RoundedCornerShape(2.dp) -> 2
|
||||
RoundedCornerShape(4.dp) -> 4
|
||||
RoundedCornerShape(8.dp) -> 8
|
||||
RoundedCornerShape(16.dp) -> 16
|
||||
else -> 0
|
||||
}
|
||||
)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user