├── .github
├── FUNDING.yml
└── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ └── feature_request.yml
├── .gitignore
├── LICENSE
├── README.md
├── app
├── .gitignore
├── CMakeLists.txt
├── build.gradle.kts
├── proguard-rules.pro
├── schemas
│ └── com.zionhuang.music.db.InternalDatabase
│ │ ├── 1.json
│ │ ├── 10.json
│ │ ├── 11.json
│ │ ├── 12.json
│ │ ├── 2.json
│ │ ├── 3.json
│ │ ├── 4.json
│ │ ├── 5.json
│ │ ├── 6.json
│ │ ├── 7.json
│ │ ├── 8.json
│ │ └── 9.json
└── src
│ ├── debug
│ └── res
│ │ ├── values
│ │ └── app_name.xml
│ │ └── xml-v25
│ │ └── shortcuts.xml
│ ├── foss
│ └── java
│ │ └── com
│ │ └── zionhuang
│ │ └── music
│ │ └── utils
│ │ ├── TranslationHelper.kt
│ │ └── Utils.kt
│ ├── full
│ └── java
│ │ └── com
│ │ └── zionhuang
│ │ └── music
│ │ └── utils
│ │ ├── TranslationHelper.kt
│ │ └── Utils.kt
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ ├── env.vault.example
│ └── po_token.html
│ ├── ic_launcher-playstore.png
│ ├── java
│ └── com
│ │ └── zionhuang
│ │ └── music
│ │ ├── App.kt
│ │ ├── MainActivity.kt
│ │ ├── MusicWidgetProvider.kt
│ │ ├── constants
│ │ ├── Dimensions.kt
│ │ ├── MediaSessionConstants.kt
│ │ ├── PreferenceKeys.kt
│ │ ├── Settings.kt
│ │ └── StatPeriod.kt
│ │ ├── db
│ │ ├── Converters.kt
│ │ ├── DatabaseDao.kt
│ │ ├── MusicDatabase.kt
│ │ └── entities
│ │ │ ├── Album.kt
│ │ │ ├── AlbumArtistMap.kt
│ │ │ ├── AlbumEntity.kt
│ │ │ ├── AlbumWithSongs.kt
│ │ │ ├── Artist.kt
│ │ │ ├── ArtistEntity.kt
│ │ │ ├── Event.kt
│ │ │ ├── EventWithSong.kt
│ │ │ ├── FormatEntity.kt
│ │ │ ├── LocalItem.kt
│ │ │ ├── LyricsEntity.kt
│ │ │ ├── Playlist.kt
│ │ │ ├── PlaylistEntity.kt
│ │ │ ├── PlaylistSong.kt
│ │ │ ├── PlaylistSongMap.kt
│ │ │ ├── PlaylistSongMapPreview.kt
│ │ │ ├── RelatedSongMap.kt
│ │ │ ├── SearchHistory.kt
│ │ │ ├── Song.kt
│ │ │ ├── SongAlbumMap.kt
│ │ │ ├── SongArtistMap.kt
│ │ │ ├── SongEntity.kt
│ │ │ ├── SortedSongAlbumMap.kt
│ │ │ └── SortedSongArtistMap.kt
│ │ ├── di
│ │ └── AppModule.kt
│ │ ├── extensions
│ │ ├── CoroutineExt.kt
│ │ ├── FileExt.kt
│ │ ├── ListExt.kt
│ │ ├── MediaItemExt.kt
│ │ ├── PlayerExt.kt
│ │ ├── StringExt.kt
│ │ └── UtilExt.kt
│ │ ├── lyrics
│ │ ├── KuGouLyricsProvider.kt
│ │ ├── LrcLibLyricsProvider.kt
│ │ ├── LyricsEntry.kt
│ │ ├── LyricsHelper.kt
│ │ ├── LyricsProvider.kt
│ │ ├── LyricsUtils.kt
│ │ ├── YouTubeLyricsProvider.kt
│ │ └── YouTubeSubtitleLyricsProvider.kt
│ │ ├── models
│ │ ├── ImageCache.kt
│ │ ├── ItemsPage.kt
│ │ ├── MediaMetadata.kt
│ │ ├── PersistQueue.kt
│ │ └── SimilarRecommendation.kt
│ │ ├── playback
│ │ ├── DownloadUtil.kt
│ │ ├── ExoDownloadService.kt
│ │ ├── MediaLibrarySessionCallback.kt
│ │ ├── MusicService.kt
│ │ ├── PlayerConnection.kt
│ │ ├── SleepTimer.kt
│ │ └── queues
│ │ │ ├── EmptyQueue.kt
│ │ │ ├── ListQueue.kt
│ │ │ ├── LocalAlbumRadio.kt
│ │ │ ├── Queue.kt
│ │ │ ├── YouTubeAlbumRadio.kt
│ │ │ └── YouTubeQueue.kt
│ │ ├── ui
│ │ ├── component
│ │ │ ├── AutoResizeText.kt
│ │ │ ├── BigSeekBar.kt
│ │ │ ├── BottomSheet.kt
│ │ │ ├── BottomSheetMenu.kt
│ │ │ ├── ChipsRow.kt
│ │ │ ├── Dialog.kt
│ │ │ ├── EmptyPlaceholder.kt
│ │ │ ├── GridMenu.kt
│ │ │ ├── HideOnScrollFAB.kt
│ │ │ ├── IconButton.kt
│ │ │ ├── Items.kt
│ │ │ ├── Library.kt
│ │ │ ├── Lyrics.kt
│ │ │ ├── NavigationTile.kt
│ │ │ ├── NavigationTitle.kt
│ │ │ ├── PlayerSlider.kt
│ │ │ ├── PlayingIndicator.kt
│ │ │ ├── Preference.kt
│ │ │ ├── SearchBar.kt
│ │ │ ├── SortHeader.kt
│ │ │ ├── iconFest.kt
│ │ │ └── shimmer
│ │ │ │ ├── ButtonPlaceholder.kt
│ │ │ │ ├── GridItemPlaceholder.kt
│ │ │ │ ├── ListItemPlaceholder.kt
│ │ │ │ ├── ShimmerHost.kt
│ │ │ │ └── TextPlaceholder.kt
│ │ ├── menu
│ │ │ ├── AddToPlaylistDialog.kt
│ │ │ ├── AlbumMenu.kt
│ │ │ ├── ArtistMenu.kt
│ │ │ ├── LyricsMenu.kt
│ │ │ ├── MediaMetadataMenu.kt
│ │ │ ├── PlayerMenu.kt
│ │ │ ├── PlaylistMenu.kt
│ │ │ ├── QueueSelectionMenu.kt
│ │ │ ├── SongMenu.kt
│ │ │ ├── SongSelectionMenu.kt
│ │ │ ├── YouTubeAlbumMenu.kt
│ │ │ ├── YouTubeArtistMenu.kt
│ │ │ ├── YouTubePlaylistMenu.kt
│ │ │ ├── YouTubeSongMenu.kt
│ │ │ └── YouTubeSongSelectionMenu.kt
│ │ ├── player
│ │ │ ├── MiniPlayer.kt
│ │ │ ├── PlaybackError.kt
│ │ │ ├── Player.kt
│ │ │ ├── Queue.kt
│ │ │ └── Thumbnail.kt
│ │ ├── screens
│ │ │ ├── AccountScreen.kt
│ │ │ ├── AlbumScreen.kt
│ │ │ ├── HistoryScreen.kt
│ │ │ ├── HomeScreen.kt
│ │ │ ├── LoginScreen.kt
│ │ │ ├── MoodAndGenresScreen.kt
│ │ │ ├── NavigationBuilder.kt
│ │ │ ├── NewReleaseScreen.kt
│ │ │ ├── NotificationSecreen.kt
│ │ │ ├── Screens.kt
│ │ │ ├── StatsScreen.kt
│ │ │ ├── YouTubeBrowseScreen.kt
│ │ │ ├── artist
│ │ │ │ ├── ArtistItemsScreen.kt
│ │ │ │ ├── ArtistScreen.kt
│ │ │ │ └── ArtistSongsScreen.kt
│ │ │ ├── library
│ │ │ │ ├── LibraryAlbumsScreen.kt
│ │ │ │ ├── LibraryArtistsScreen.kt
│ │ │ │ ├── LibraryPlaylistsScreen.kt
│ │ │ │ └── LibrarySongsScreen.kt
│ │ │ ├── playlist
│ │ │ │ ├── LocalPlaylistScreen.kt
│ │ │ │ └── OnlinePlaylistScreen.kt
│ │ │ ├── search
│ │ │ │ ├── LocalSearchScreen.kt
│ │ │ │ ├── OnlineSearchResult.kt
│ │ │ │ └── OnlineSearchScreen.kt
│ │ │ └── settings
│ │ │ │ ├── AboutScreen.kt
│ │ │ │ ├── AppearanceSettings.kt
│ │ │ │ ├── BackupAndRestore.kt
│ │ │ │ ├── ContentSettings.kt
│ │ │ │ ├── DataUpdate.kt
│ │ │ │ ├── DiscordLoginScreen.kt
│ │ │ │ ├── DiscordSettings.kt
│ │ │ │ ├── JossRedSettings.kt
│ │ │ │ ├── PlayerSettings.kt
│ │ │ │ ├── PrivacySettings.kt
│ │ │ │ ├── SettingsScreen.kt
│ │ │ │ └── StorageSettings.kt
│ │ ├── theme
│ │ │ └── Theme.kt
│ │ └── utils
│ │ │ ├── AppBar.kt
│ │ │ ├── FadingEdge.kt
│ │ │ ├── LazyGridSnapLayoutInfoProvider.kt
│ │ │ ├── NavControllerUtils.kt
│ │ │ ├── ScrollUtils.kt
│ │ │ ├── ShapeUtils.kt
│ │ │ ├── StringUtils.kt
│ │ │ └── YouTubeUtils.kt
│ │ ├── utils
│ │ ├── CoilBitmapLoader.kt
│ │ ├── ComposeDebugUtils.kt
│ │ ├── DataStore.kt
│ │ ├── DeepLinkHandler.kt
│ │ ├── DiscordRPC.kt
│ │ ├── NetworkUtils.kt
│ │ ├── NotificationPermissionActivity.kt
│ │ ├── SecureKeys.kt
│ │ ├── StringUtils.kt
│ │ ├── UpdateChecker.kt
│ │ ├── Updater.kt
│ │ ├── YTPlayerUtils.kt
│ │ └── potoken
│ │ │ ├── JavaScriptUtil.kt
│ │ │ ├── PoTokenException.kt
│ │ │ ├── PoTokenGenerator.kt
│ │ │ ├── PoTokenResult.kt
│ │ │ └── PoTokenWebView.kt
│ │ └── viewmodels
│ │ ├── AccountViewModel.kt
│ │ ├── AlbumViewModel.kt
│ │ ├── ArtistItemsViewModel.kt
│ │ ├── ArtistViewModel.kt
│ │ ├── BackupRestoreViewModel.kt
│ │ ├── HistoryViewModel.kt
│ │ ├── HomeViewModel.kt
│ │ ├── LibraryViewModels.kt
│ │ ├── LocalPlaylistViewModel.kt
│ │ ├── LocalSearchViewModel.kt
│ │ ├── LyricsMenuViewModel.kt
│ │ ├── MoodAndGenresViewModel.kt
│ │ ├── NewReleaseViewModel.kt
│ │ ├── OnlinePlaylistViewModel.kt
│ │ ├── OnlineSearchSuggestionViewModel.kt
│ │ ├── OnlineSearchViewModel.kt
│ │ ├── StatsViewModel.kt
│ │ └── YouTubeBrowseViewModel.kt
│ └── res
│ ├── drawable
│ ├── add.xml
│ ├── album.xml
│ ├── arrow_back.xml
│ ├── arrow_downward.xml
│ ├── arrow_forward.xml
│ ├── arrow_top_left.xml
│ ├── arrow_upward.xml
│ ├── artist.xml
│ ├── backup.xml
│ ├── bedtime.xml
│ ├── bookmark.xml
│ ├── bookmark_filled.xml
│ ├── buymeacoffee.xml
│ ├── cached.xml
│ ├── casino.xml
│ ├── clear_all.xml
│ ├── close.xml
│ ├── contrast.xml
│ ├── dark_mode.xml
│ ├── delete.xml
│ ├── delete_history.xml
│ ├── discord.xml
│ ├── discover_tune.xml
│ ├── download.xml
│ ├── drag_handle.xml
│ ├── edit.xml
│ ├── equalizer.xml
│ ├── error.xml
│ ├── expand_less.xml
│ ├── expand_more.xml
│ ├── explicit.xml
│ ├── facebook.xml
│ ├── fast_forward.xml
│ ├── favorite.xml
│ ├── favorite_border.xml
│ ├── format_align_center.xml
│ ├── format_align_left.xml
│ ├── ghost.xml
│ ├── github.xml
│ ├── google_play.xml
│ ├── gradient.xml
│ ├── graphic_eq.xml
│ ├── grid_view.xml
│ ├── heart_love_day.xml
│ ├── history.xml
│ ├── home.xml
│ ├── info.xml
│ ├── input.xml
│ ├── joss_music_logo.xml
│ ├── language.xml
│ ├── liberapay.xml
│ ├── library_add.xml
│ ├── library_add_check.xml
│ ├── library_music.xml
│ ├── list.xml
│ ├── location_on.xml
│ ├── lock.xml
│ ├── lock_open.xml
│ ├── lyrics.xml
│ ├── manage_search.xml
│ ├── mood.xml
│ ├── more_horiz.xml
│ ├── more_vert.xml
│ ├── music_note.xml
│ ├── navigate_next.xml
│ ├── offline.xml
│ ├── palette.xml
│ ├── pause.xml
│ ├── person.xml
│ ├── play.xml
│ ├── playlist_add.xml
│ ├── playlist_play.xml
│ ├── playlist_remove.xml
│ ├── queue_music.xml
│ ├── radio.xml
│ ├── radio_button_checked.xml
│ ├── radio_button_unchecked.xml
│ ├── remove.xml
│ ├── repeat.xml
│ ├── repeat_on.xml
│ ├── repeat_one.xml
│ ├── repeat_one_on.xml
│ ├── replay.xml
│ ├── restore.xml
│ ├── screenshot.xml
│ ├── search.xml
│ ├── search_off.xml
│ ├── security.xml
│ ├── settings.xml
│ ├── share.xml
│ ├── shortcut_albums.xml
│ ├── shortcut_playlists.xml
│ ├── shortcut_search.xml
│ ├── shortcut_songs.xml
│ ├── shuffle.xml
│ ├── shuffle_on.xml
│ ├── skip_next.xml
│ ├── skip_previous.xml
│ ├── sliders.xml
│ ├── slow_motion_video.xml
│ ├── small_icon.xml
│ ├── snowflake.xml
│ ├── speed.xml
│ ├── splashscreen.xml
│ ├── storage.xml
│ ├── sync.xml
│ ├── tab.xml
│ ├── timer.xml
│ ├── translate.xml
│ ├── trending_up.xml
│ ├── tune.xml
│ ├── update.xml
│ ├── volume_up.xml
│ └── wifi_proxy.xml
│ ├── layout
│ └── widget_layout.xml
│ ├── mipmap-anydpi-v26
│ └── ic_launcher.xml
│ ├── mipmap-hdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_background.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_monochrome.png
│ ├── mipmap-mdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_background.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_monochrome.png
│ ├── mipmap-xhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_background.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_monochrome.png
│ ├── mipmap-xxhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_background.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_monochrome.png
│ ├── mipmap-xxxhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_background.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_monochrome.png
│ ├── resources.properties
│ ├── values-ar
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-b+sr+Latn
│ └── strings.xml
│ ├── values-be
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-bg
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-bn-rIN
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-bn
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-bs
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-cs
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-de
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-el
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-es
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-et
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-fa
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-fi
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-fr
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-hi
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-hr
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-hu
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-in
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-it
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-ja
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-ko
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-ml
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-nb-rNO
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-ne
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-nl
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-or
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-pa
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-pl
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-pt-rBR
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-pt
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-ru
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-sv
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-ta
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-tr
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-uk
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-vi
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-zh-rCN
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values-zh-rTW
│ ├── strings-joss.xml
│ └── strings.xml
│ ├── values
│ ├── app_name.xml
│ ├── ic_launcher_background.xml
│ ├── strings-joss.xml
│ ├── strings.xml
│ ├── styles.xml
│ └── values.xml
│ ├── xml-v25
│ └── shortcuts.xml
│ └── xml
│ ├── automotive_app_desc.xml
│ ├── backup_rules.xml
│ ├── data_extraction_rules.xml
│ ├── gma_ad_services_config.xml
│ ├── provider_paths.xml
│ └── widget_provider.xml
├── assets
├── buymeacoffee.png
└── liberapay.png
├── build.gradle.kts
├── crowdin.yml
├── fastlane
└── metadata
│ └── android
│ ├── ar
│ ├── full_description.txt
│ └── short_description.txt
│ ├── bg
│ ├── full_description.txt
│ └── short_description.txt
│ ├── bs
│ ├── full_description.txt
│ └── short_description.txt
│ ├── cs-CZ
│ ├── full_description.txt
│ └── short_description.txt
│ ├── de-DE
│ ├── full_description.txt
│ └── short_description.txt
│ ├── el-GR
│ ├── full_description.txt
│ └── short_description.txt
│ ├── en-US
│ ├── changelogs
│ │ ├── 10.txt
│ │ ├── 11.txt
│ │ ├── 12.txt
│ │ ├── 13.txt
│ │ ├── 14.txt
│ │ ├── 15.txt
│ │ ├── 16.txt
│ │ ├── 17.txt
│ │ ├── 18.txt
│ │ ├── 19.txt
│ │ ├── 20.txt
│ │ ├── 21.txt
│ │ ├── 22.txt
│ │ ├── 23.txt
│ │ ├── 24.txt
│ │ ├── 25.txt
│ │ ├── 26.txt
│ │ ├── 5.txt
│ │ ├── 6.txt
│ │ ├── 7.txt
│ │ ├── 8.txt
│ │ └── 9.txt
│ ├── full_description.txt
│ ├── images
│ │ ├── icon.png
│ │ └── phoneScreenshots
│ │ │ ├── 01.png
│ │ │ ├── 02.png
│ │ │ ├── 03.png
│ │ │ ├── 04.png
│ │ │ └── 05.png
│ ├── short_description.txt
│ └── title.txt
│ ├── es
│ ├── changelogs
│ │ ├── 11.txt
│ │ ├── 12.txt
│ │ ├── 13.txt
│ │ ├── 14.txt
│ │ ├── 15.txt
│ │ ├── 16.txt
│ │ ├── 17.txt
│ │ ├── 18.txt
│ │ ├── 19.txt
│ │ ├── 20.txt
│ │ ├── 21.txt
│ │ ├── 22.txt
│ │ ├── 23.txt
│ │ ├── 24.txt
│ │ ├── 25.txt
│ │ ├── 26.txt
│ │ ├── 5.txt
│ │ ├── 6.txt
│ │ ├── 7.txt
│ │ ├── 8.txt
│ │ └── 9.txt
│ ├── full_description.txt
│ └── short_description.txt
│ ├── et
│ ├── full_description.txt
│ └── short_description.txt
│ ├── fi-FI
│ ├── full_description.txt
│ └── short_description.txt
│ ├── fr-FR
│ ├── full_description.txt
│ └── short_description.txt
│ ├── hi-IN
│ ├── full_description.txt
│ └── short_description.txt
│ ├── hr
│ ├── full_description.txt
│ └── short_description.txt
│ ├── id
│ ├── full_description.txt
│ └── short_description.txt
│ ├── it
│ ├── full_description.txt
│ ├── short_description.txt
│ └── title.txt
│ ├── ja
│ ├── full_description.txt
│ └── short_description.txt
│ ├── ko
│ ├── full_description.txt
│ └── short_description.txt
│ ├── nl-NL
│ ├── full_description.txt
│ └── short_description.txt
│ ├── no-NO
│ ├── full_description.txt
│ └── short_description.txt
│ ├── pa
│ ├── full_description.txt
│ └── short_description.txt
│ ├── pl-PL
│ ├── full_description.txt
│ └── short_description.txt
│ ├── pt-BR
│ ├── changelogs
│ │ ├── 19.txt
│ │ └── 23.txt
│ ├── full_description.txt
│ ├── short_description.txt
│ └── title.txt
│ ├── pt
│ ├── full_description.txt
│ └── short_description.txt
│ ├── ru-RU
│ ├── full_description.txt
│ ├── short_description.txt
│ └── title.txt
│ ├── sr
│ ├── full_description.txt
│ └── short_description.txt
│ ├── tr
│ ├── changelogs
│ │ ├── 11.txt
│ │ ├── 12.txt
│ │ ├── 13.txt
│ │ └── 14.txt
│ ├── full_description.txt
│ └── short_description.txt
│ ├── uk-UA
│ ├── full_description.txt
│ ├── short_description.txt
│ └── title.txt
│ ├── vi
│ ├── full_description.txt
│ └── short_description.txt
│ ├── zh-CN
│ ├── full_description.txt
│ ├── short_description.txt
│ └── title.txt
│ └── zh-TW
│ ├── full_description.txt
│ ├── short_description.txt
│ └── title.txt
├── gradle.properties
├── gradle
├── libs.versions.toml
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── innertube
├── .gitignore
├── build.gradle.kts
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── zionhuang
│ │ └── innertube
│ │ ├── InnerTube.kt
│ │ ├── NewPipe.kt
│ │ ├── YouTube.kt
│ │ ├── models
│ │ ├── AccountInfo.kt
│ │ ├── AutomixPreviewVideoRenderer.kt
│ │ ├── Badges.kt
│ │ ├── Button.kt
│ │ ├── Context.kt
│ │ ├── Continuation.kt
│ │ ├── ContinuationItemRenderer.kt
│ │ ├── Endpoint.kt
│ │ ├── GridRenderer.kt
│ │ ├── Icon.kt
│ │ ├── Menu.kt
│ │ ├── MusicCardShelfRenderer.kt
│ │ ├── MusicCarouselShelfRenderer.kt
│ │ ├── MusicDescriptionShelfRenderer.kt
│ │ ├── MusicEditablePlaylistDetailHeaderRenderer.kt
│ │ ├── MusicNavigationButtonRenderer.kt
│ │ ├── MusicPlaylistShelfRenderer.kt
│ │ ├── MusicQueueRenderer.kt
│ │ ├── MusicResponsiveHeaderRenderer.kt
│ │ ├── MusicResponsiveListItemRenderer.kt
│ │ ├── MusicShelfRenderer.kt
│ │ ├── MusicTwoRowItemRenderer.kt
│ │ ├── NavigationEndpoint.kt
│ │ ├── PlaylistPanelRenderer.kt
│ │ ├── PlaylistPanelVideoRenderer.kt
│ │ ├── ResponseContext.kt
│ │ ├── Runs.kt
│ │ ├── SearchSuggestions.kt
│ │ ├── SearchSuggestionsSectionRenderer.kt
│ │ ├── SectionListRenderer.kt
│ │ ├── SubscriptionButton.kt
│ │ ├── Tabs.kt
│ │ ├── ThumbnailRenderer.kt
│ │ ├── Thumbnails.kt
│ │ ├── TwoColumnBrowseResultsRenderer.kt
│ │ ├── YTItem.kt
│ │ ├── YouTubeClient.kt
│ │ ├── YouTubeLocale.kt
│ │ ├── body
│ │ │ ├── AccountMenuBody.kt
│ │ │ ├── BrowseBody.kt
│ │ │ ├── CreatePlaylistBody.kt
│ │ │ ├── EditPlaylistBody.kt
│ │ │ ├── GetQueueBody.kt
│ │ │ ├── GetSearchSuggestionsBody.kt
│ │ │ ├── GetTranscriptBody.kt
│ │ │ ├── LikeBody.kt
│ │ │ ├── NextBody.kt
│ │ │ ├── PlayerBody.kt
│ │ │ ├── PlaylistDeleteBody.kt
│ │ │ ├── SearchBody.kt
│ │ │ └── SubscribeBody.kt
│ │ └── response
│ │ │ ├── AccountMenuResponse.kt
│ │ │ ├── BrowseResponse.kt
│ │ │ ├── CreatePlaylistResponse.kt
│ │ │ ├── GetQueueResponse.kt
│ │ │ ├── GetSearchSuggestionsResponse.kt
│ │ │ ├── GetTranscriptResponse.kt
│ │ │ ├── NextResponse.kt
│ │ │ ├── PlayerResponse.kt
│ │ │ └── SearchResponse.kt
│ │ ├── pages
│ │ ├── AlbumPage.kt
│ │ ├── ArtistItemsContinuationPage.kt
│ │ ├── ArtistItemsPage.kt
│ │ ├── ArtistPage.kt
│ │ ├── BrowseResult.kt
│ │ ├── ExplorePage.kt
│ │ ├── HistoryPage.kt
│ │ ├── HomePage.kt
│ │ ├── LibraryContinuationPage.kt
│ │ ├── LibraryPage.kt
│ │ ├── MoodAndGenres.kt
│ │ ├── NewReleaseAlbumPage.kt
│ │ ├── NextPage.kt
│ │ ├── PageHelper.kt
│ │ ├── PlaylistContinuationPage.kt
│ │ ├── PlaylistPage.kt
│ │ ├── RelatedPage.kt
│ │ ├── SearchPage.kt
│ │ ├── SearchSuggestionPage.kt
│ │ └── SearchSummaryPage.kt
│ │ └── utils
│ │ └── Utils.kt
│ └── test
│ └── java
│ └── com
│ └── zionhuang
│ └── innertube
│ └── YouTubeTest.kt
├── jossredconnect
├── .gitignore
├── build.gradle.kts
└── src
│ └── main
│ └── java
│ └── com
│ └── josprox
│ └── jossredconnect
│ ├── JossRedClient.kt
│ ├── LICENSE_EXCEPTION.md
│ └── TERMS.md
├── kizzy
├── .gitignore
├── build.gradle.kts
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── my
│ └── kizzy
│ ├── gateway
│ ├── DiscordWebSocket.kt
│ └── entities
│ │ ├── HeartBeat.kt
│ │ ├── Identify.kt
│ │ ├── Payload.kt
│ │ ├── Ready.kt
│ │ ├── Resume.kt
│ │ ├── op
│ │ ├── OpCode.kt
│ │ └── OpCodesSerializer.kt
│ │ └── presence
│ │ ├── Activity.kt
│ │ ├── Assets.kt
│ │ ├── Metadata.kt
│ │ ├── Presence.kt
│ │ └── Timestamps.kt
│ ├── remote
│ ├── ApiResponse.kt
│ └── ApiService.kt
│ ├── repository
│ └── KizzyRepository.kt
│ ├── rpc
│ ├── KizzyRPC.kt
│ ├── RpcImage.kt
│ └── UserInfo.kt
│ └── utils
│ └── Ext.kt
├── kugou
├── .gitignore
├── build.gradle.kts
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── zionhuang
│ │ └── kugou
│ │ ├── KuGou.kt
│ │ └── models
│ │ ├── DownloadLyricsResponse.kt
│ │ ├── SearchLyricsResponse.kt
│ │ └── SearchSongResponse.kt
│ └── test
│ └── java
│ └── Test.kt
├── lint.xml
├── lrclib
├── .gitignore
├── build.gradle.kts
└── src
│ └── main
│ └── java
│ └── com
│ └── zionhuang
│ └── lrclib
│ ├── LrcLib.kt
│ └── models
│ └── Track.kt
├── material-color-utilities
├── .gitignore
├── build.gradle.kts
└── src
│ └── main
│ └── java
│ └── com
│ └── google
│ └── material
│ └── color
│ ├── LICENSE
│ ├── blend
│ └── Blend.java
│ ├── contrast
│ └── Contrast.java
│ ├── dislike
│ └── DislikeAnalyzer.java
│ ├── dynamiccolor
│ ├── ContrastCurve.java
│ ├── DynamicColor.java
│ ├── DynamicScheme.java
│ ├── MaterialDynamicColors.java
│ ├── ToneDeltaPair.java
│ ├── TonePolarity.java
│ └── Variant.java
│ ├── hct
│ ├── Cam16.java
│ ├── Hct.java
│ ├── HctSolver.java
│ └── ViewingConditions.java
│ ├── palettes
│ ├── CorePalette.java
│ ├── CorePalettes.java
│ └── TonalPalette.java
│ ├── quantize
│ ├── PointProvider.java
│ ├── PointProviderLab.java
│ ├── Quantizer.java
│ ├── QuantizerCelebi.java
│ ├── QuantizerMap.java
│ ├── QuantizerResult.java
│ ├── QuantizerWsmeans.java
│ └── QuantizerWu.java
│ ├── scheme
│ ├── Scheme.java
│ ├── SchemeContent.java
│ ├── SchemeExpressive.java
│ ├── SchemeFidelity.java
│ ├── SchemeFruitSalad.java
│ ├── SchemeMonochrome.java
│ ├── SchemeNeutral.java
│ ├── SchemeRainbow.java
│ ├── SchemeTonalSpot.java
│ └── SchemeVibrant.java
│ ├── score
│ └── Score.java
│ ├── temperature
│ └── TemperatureCache.java
│ └── utils
│ ├── ColorUtils.java
│ ├── MathUtils.java
│ └── StringUtils.java
└── settings.gradle.kts
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: zionhuang
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
13 | custom: ['https://www.buymeacoffee.com/zionhuang']
14 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/CMakeLists.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/CMakeLists.txt
--------------------------------------------------------------------------------
/app/src/debug/res/values/app_name.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Joss Music
4 |
--------------------------------------------------------------------------------
/app/src/foss/java/com/zionhuang/music/utils/TranslationHelper.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.utils
2 |
3 | import com.zionhuang.music.db.entities.LyricsEntity
4 |
5 | object TranslationHelper {
6 | suspend fun translate(lyrics: LyricsEntity): LyricsEntity = lyrics
7 | suspend fun clearModels() {}
8 | }
--------------------------------------------------------------------------------
/app/src/foss/java/com/zionhuang/music/utils/Utils.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.utils
2 |
3 | import com.zionhuang.music.MainActivity
4 | import java.lang.Exception
5 |
6 | fun reportException(throwable: Throwable) {
7 | throwable.printStackTrace()
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/full/java/com/zionhuang/music/utils/Utils.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.utils
2 |
3 | import com.google.firebase.crashlytics.ktx.crashlytics
4 | import com.google.firebase.ktx.Firebase
5 |
6 | fun reportException(throwable: Throwable) {
7 | Firebase.crashlytics.recordException(throwable)
8 | throwable.printStackTrace()
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/assets/env.vault.example:
--------------------------------------------------------------------------------
1 | # Aquí podrás configurar las variables de uso para conectar tus configuraciones.
2 |
3 | #Aquí va la url del sistema de actualización, necesitarás recibir en formato JSON una etiqueta "Version"
4 | UPDATER_URL="https://jossred.josprox.com/api/version/com.josprox.jossmusic"
5 | #Aquí debes poner el ID de tu adsense, este es solo para el banner
6 | YOUR_AD_UNIT_ID="ca-app-pub-3940256099942544/6300978111"
7 | #No olvides poner el onesignal.
8 | ONESIGNAL_APP_ID=""
9 |
10 | #Link oficial de la web:
11 | HOMEPAGE="https://jossmusic.me/"
12 |
13 | # Aquí va la clave de Joss Red Multimedia para el streaming
14 | STREAMING_HEAD_JOSSRED=""
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/constants/MediaSessionConstants.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.constants
2 |
3 | import android.os.Bundle
4 | import androidx.media3.session.SessionCommand
5 |
6 | object MediaSessionConstants {
7 | const val ACTION_TOGGLE_LIBRARY = "TOGGLE_LIBRARY"
8 | const val ACTION_TOGGLE_LIKE = "TOGGLE_LIKE"
9 | const val ACTION_TOGGLE_SHUFFLE = "TOGGLE_SHUFFLE"
10 | const val ACTION_TOGGLE_REPEAT_MODE = "TOGGLE_REPEAT_MODE"
11 | val CommandToggleLibrary = SessionCommand(ACTION_TOGGLE_LIBRARY, Bundle.EMPTY)
12 | val CommandToggleLike = SessionCommand(ACTION_TOGGLE_LIKE, Bundle.EMPTY)
13 | val CommandToggleShuffle = SessionCommand(ACTION_TOGGLE_SHUFFLE, Bundle.EMPTY)
14 | val CommandToggleRepeatMode = SessionCommand(ACTION_TOGGLE_REPEAT_MODE, Bundle.EMPTY)
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/constants/StatPeriod.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.constants
2 |
3 | import java.time.LocalDateTime
4 | import java.time.ZoneOffset
5 |
6 | enum class StatPeriod {
7 | `1_WEEK`, `1_MONTH`, `3_MONTH`, `6_MONTH`, `1_YEAR`, ALL;
8 |
9 | fun toTimeMillis(): Long =
10 | when (this) {
11 | `1_WEEK` -> LocalDateTime.now().minusWeeks(1).toInstant(ZoneOffset.UTC).toEpochMilli()
12 | `1_MONTH` -> LocalDateTime.now().minusMonths(1).toInstant(ZoneOffset.UTC).toEpochMilli()
13 | `3_MONTH` -> LocalDateTime.now().minusMonths(3).toInstant(ZoneOffset.UTC).toEpochMilli()
14 | `6_MONTH` -> LocalDateTime.now().minusMonths(6).toInstant(ZoneOffset.UTC).toEpochMilli()
15 | `1_YEAR` -> LocalDateTime.now().minusMonths(12).toInstant(ZoneOffset.UTC).toEpochMilli()
16 | ALL -> 0
17 | }
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/Converters.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db
2 |
3 | import androidx.room.TypeConverter
4 | import java.time.Instant
5 | import java.time.LocalDateTime
6 | import java.time.ZoneOffset
7 |
8 | class Converters {
9 | @TypeConverter
10 | fun fromTimestamp(value: Long?): LocalDateTime? =
11 | if (value != null) LocalDateTime.ofInstant(Instant.ofEpochMilli(value), ZoneOffset.UTC)
12 | else null
13 |
14 | @TypeConverter
15 | fun dateToTimestamp(date: LocalDateTime?): Long? =
16 | date?.atZone(ZoneOffset.UTC)?.toInstant()?.toEpochMilli()
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/Album.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.compose.runtime.Immutable
4 | import androidx.room.Embedded
5 | import androidx.room.Junction
6 | import androidx.room.Relation
7 |
8 | @Immutable
9 | data class Album(
10 | @Embedded
11 | val album: AlbumEntity,
12 | @Relation(
13 | entity = ArtistEntity::class,
14 | entityColumn = "id",
15 | parentColumn = "id",
16 | associateBy = Junction(
17 | value = AlbumArtistMap::class,
18 | parentColumn = "albumId",
19 | entityColumn = "artistId"
20 | )
21 | )
22 | val artists: List,
23 | ) : LocalItem() {
24 | override val id: String
25 | get() = album.id
26 | override val title: String
27 | get() = album.title
28 | override val thumbnailUrl: String?
29 | get() = album.thumbnailUrl
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/AlbumArtistMap.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.Entity
5 | import androidx.room.ForeignKey
6 |
7 | @Entity(
8 | tableName = "album_artist_map",
9 | primaryKeys = ["albumId", "artistId"],
10 | foreignKeys = [
11 | ForeignKey(
12 | entity = AlbumEntity::class,
13 | parentColumns = ["id"],
14 | childColumns = ["albumId"],
15 | onDelete = ForeignKey.CASCADE),
16 | ForeignKey(
17 | entity = ArtistEntity::class,
18 | parentColumns = ["id"],
19 | childColumns = ["artistId"],
20 | onDelete = ForeignKey.CASCADE
21 | )
22 | ]
23 | )
24 | data class AlbumArtistMap(
25 | @ColumnInfo(index = true) val albumId: String,
26 | @ColumnInfo(index = true) val artistId: String,
27 | val order: Int,
28 | )
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/AlbumEntity.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.compose.runtime.Immutable
4 | import androidx.room.Entity
5 | import androidx.room.PrimaryKey
6 | import java.time.LocalDateTime
7 |
8 | @Immutable
9 | @Entity(tableName = "album")
10 | data class AlbumEntity(
11 | @PrimaryKey val id: String,
12 | val title: String,
13 | val year: Int? = null,
14 | val thumbnailUrl: String? = null,
15 | val themeColor: Int? = null,
16 | val songCount: Int,
17 | val duration: Int,
18 | val lastUpdateTime: LocalDateTime = LocalDateTime.now(),
19 | val bookmarkedAt: LocalDateTime? = null,
20 | ) {
21 | fun toggleLike() = copy(
22 | bookmarkedAt = if (bookmarkedAt != null) null else LocalDateTime.now()
23 | )
24 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/Artist.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.compose.runtime.Immutable
4 | import androidx.room.Embedded
5 |
6 | @Immutable
7 | data class Artist(
8 | @Embedded
9 | val artist: ArtistEntity,
10 | val songCount: Int,
11 | ) : LocalItem() {
12 | override val id: String
13 | get() = artist.id
14 | override val title: String
15 | get() = artist.name
16 | override val thumbnailUrl: String?
17 | get() = artist.thumbnailUrl
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/Event.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.compose.runtime.Immutable
4 | import androidx.room.ColumnInfo
5 | import androidx.room.Entity
6 | import androidx.room.ForeignKey
7 | import androidx.room.PrimaryKey
8 | import java.time.LocalDateTime
9 |
10 | @Immutable
11 | @Entity(
12 | tableName = "event",
13 | foreignKeys = [
14 | ForeignKey(
15 | entity = SongEntity::class,
16 | parentColumns = ["id"],
17 | childColumns = ["songId"],
18 | onDelete = ForeignKey.CASCADE
19 | )
20 | ]
21 | )
22 | data class Event(
23 | @PrimaryKey(autoGenerate = true) val id: Long = 0,
24 | @ColumnInfo(index = true) val songId: String,
25 | val timestamp: LocalDateTime,
26 | val playTime: Long,
27 | )
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/EventWithSong.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.compose.runtime.Immutable
4 | import androidx.room.Embedded
5 | import androidx.room.Relation
6 |
7 | @Immutable
8 | data class EventWithSong(
9 | @Embedded
10 | val event: Event,
11 | @Relation(
12 | entity = SongEntity::class,
13 | parentColumn = "songId",
14 | entityColumn = "id"
15 | )
16 | val song: Song,
17 | )
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/FormatEntity.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.room.Entity
4 | import androidx.room.PrimaryKey
5 |
6 | @Entity(tableName = "format")
7 | data class FormatEntity(
8 | @PrimaryKey val id: String,
9 | val itag: Int,
10 | val mimeType: String,
11 | val codecs: String,
12 | val bitrate: Int,
13 | val sampleRate: Int?,
14 | val contentLength: Long,
15 | val loudnessDb: Double?,
16 | )
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/LocalItem.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | sealed class LocalItem {
4 | abstract val id: String
5 | abstract val title: String
6 | abstract val thumbnailUrl: String?
7 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/LyricsEntity.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.room.Entity
4 | import androidx.room.PrimaryKey
5 |
6 | @Entity(tableName = "lyrics")
7 | data class LyricsEntity(
8 | @PrimaryKey val id: String,
9 | val lyrics: String,
10 | ) {
11 | companion object {
12 | const val LYRICS_NOT_FOUND = "LYRICS_NOT_FOUND"
13 | }
14 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/PlaylistEntity.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.compose.runtime.Immutable
4 | import androidx.room.Entity
5 | import androidx.room.PrimaryKey
6 | import org.apache.commons.lang3.RandomStringUtils
7 |
8 | @Immutable
9 | @Entity(tableName = "playlist")
10 | data class PlaylistEntity(
11 | @PrimaryKey val id: String = generatePlaylistId(),
12 | val name: String,
13 | val browseId: String? = null,
14 | ) {
15 | companion object {
16 | const val LIKED_PLAYLIST_ID = "LP_LIKED"
17 | const val DOWNLOADED_PLAYLIST_ID = "LP_DOWNLOADED"
18 |
19 | fun generatePlaylistId() = "LP" + RandomStringUtils.random(8, true, false)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/PlaylistSong.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.room.Embedded
4 | import androidx.room.Relation
5 |
6 | data class PlaylistSong(
7 | @Embedded val map: PlaylistSongMap,
8 | @Relation(
9 | parentColumn = "songId",
10 | entityColumn = "id",
11 | entity = SongEntity::class
12 | )
13 | val song: Song,
14 | )
15 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/PlaylistSongMapPreview.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.DatabaseView
5 |
6 | @DatabaseView(
7 | viewName = "playlist_song_map_preview",
8 | value = "SELECT * FROM playlist_song_map WHERE position <= 3 ORDER BY position")
9 | data class PlaylistSongMapPreview(
10 | @ColumnInfo(index = true) val playlistId: String,
11 | @ColumnInfo(index = true) val songId: String,
12 | val idInPlaylist: Int = 0,
13 | )
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/SearchHistory.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.room.Entity
4 | import androidx.room.Index
5 | import androidx.room.PrimaryKey
6 |
7 | @Entity(
8 | tableName = "search_history",
9 | indices = [Index(
10 | value = ["query"],
11 | unique = true
12 | )]
13 | )
14 | data class SearchHistory(
15 | @PrimaryKey(autoGenerate = true) val id: Long = 0,
16 | val query: String,
17 | )
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/SongAlbumMap.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.Entity
5 | import androidx.room.ForeignKey
6 |
7 | @Entity(
8 | tableName = "song_album_map",
9 | primaryKeys = ["songId", "albumId"],
10 | foreignKeys = [
11 | ForeignKey(
12 | entity = SongEntity::class,
13 | parentColumns = ["id"],
14 | childColumns = ["songId"],
15 | onDelete = ForeignKey.CASCADE),
16 | ForeignKey(
17 | entity = AlbumEntity::class,
18 | parentColumns = ["id"],
19 | childColumns = ["albumId"],
20 | onDelete = ForeignKey.CASCADE
21 | )
22 | ]
23 | )
24 | data class SongAlbumMap(
25 | @ColumnInfo(index = true) val songId: String,
26 | @ColumnInfo(index = true) val albumId: String,
27 | val index: Int,
28 | )
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/SongArtistMap.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.Entity
5 | import androidx.room.ForeignKey
6 |
7 | @Entity(
8 | tableName = "song_artist_map",
9 | primaryKeys = ["songId", "artistId"],
10 | foreignKeys = [
11 | ForeignKey(
12 | entity = SongEntity::class,
13 | parentColumns = ["id"],
14 | childColumns = ["songId"],
15 | onDelete = ForeignKey.CASCADE),
16 | ForeignKey(
17 | entity = ArtistEntity::class,
18 | parentColumns = ["id"],
19 | childColumns = ["artistId"],
20 | onDelete = ForeignKey.CASCADE
21 | )
22 | ]
23 | )
24 | data class SongArtistMap(
25 | @ColumnInfo(index = true) val songId: String,
26 | @ColumnInfo(index = true) val artistId: String,
27 | val position: Int,
28 | )
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/SortedSongAlbumMap.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.DatabaseView
5 |
6 | @DatabaseView(
7 | viewName = "sorted_song_album_map",
8 | value = "SELECT * FROM song_album_map ORDER BY `index`")
9 | data class SortedSongAlbumMap(
10 | @ColumnInfo(index = true) val songId: String,
11 | @ColumnInfo(index = true) val albumId: String,
12 | val index: Int,
13 | )
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/db/entities/SortedSongArtistMap.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.db.entities
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.DatabaseView
5 |
6 | @DatabaseView(
7 | viewName = "sorted_song_artist_map",
8 | value = "SELECT * FROM song_artist_map ORDER BY position")
9 | data class SortedSongArtistMap(
10 | @ColumnInfo(index = true) val songId: String,
11 | @ColumnInfo(index = true) val artistId: String,
12 | val position: Int,
13 | )
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/extensions/CoroutineExt.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.extensions
2 |
3 | import kotlinx.coroutines.CoroutineExceptionHandler
4 | import kotlinx.coroutines.CoroutineScope
5 | import kotlinx.coroutines.flow.Flow
6 | import kotlinx.coroutines.flow.collectLatest
7 | import kotlinx.coroutines.launch
8 |
9 | fun Flow.collect(scope: CoroutineScope, action: suspend (value: T) -> Unit) {
10 | scope.launch {
11 | collect(action)
12 | }
13 | }
14 |
15 | fun Flow.collectLatest(scope: CoroutineScope, action: suspend (value: T) -> Unit) {
16 | scope.launch {
17 | collectLatest(action)
18 | }
19 | }
20 |
21 | val SilentHandler = CoroutineExceptionHandler { _, _ -> }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/extensions/FileExt.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.extensions
2 |
3 | import java.io.File
4 | import java.io.InputStream
5 | import java.io.OutputStream
6 | import java.util.zip.ZipInputStream
7 | import java.util.zip.ZipOutputStream
8 |
9 | operator fun File.div(child: String): File = File(this, child)
10 |
11 | fun InputStream.zipInputStream(): ZipInputStream = ZipInputStream(this)
12 | fun OutputStream.zipOutputStream(): ZipOutputStream = ZipOutputStream(this)
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/extensions/ListExt.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.extensions
2 |
3 | fun List.reversed(reversed: Boolean) = if (reversed) asReversed() else this
4 |
5 | fun MutableList.move(fromIndex: Int, toIndex: Int): MutableList {
6 | add(toIndex, removeAt(fromIndex))
7 | return this
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/extensions/StringExt.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.extensions
2 |
3 | import androidx.sqlite.db.SimpleSQLiteQuery
4 | import java.net.InetSocketAddress
5 | import java.net.InetSocketAddress.createUnresolved
6 |
7 | inline fun > String?.toEnum(defaultValue: T): T =
8 | if (this == null) defaultValue
9 | else try {
10 | enumValueOf(this)
11 | } catch (e: IllegalArgumentException) {
12 | defaultValue
13 | }
14 |
15 | fun String.toSQLiteQuery(): SimpleSQLiteQuery = SimpleSQLiteQuery(this)
16 |
17 | fun String.toInetSocketAddress(): InetSocketAddress {
18 | val (host, port) = split(":")
19 | return createUnresolved(host, port.toInt())
20 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/extensions/UtilExt.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.extensions
2 |
3 | fun tryOrNull(block: () -> T): T? =
4 | try {
5 | block()
6 | } catch (e: Exception) {
7 | null
8 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/lyrics/KuGouLyricsProvider.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.lyrics
2 |
3 | import android.content.Context
4 | import com.zionhuang.kugou.KuGou
5 | import com.zionhuang.music.constants.EnableKugouKey
6 | import com.zionhuang.music.utils.dataStore
7 | import com.zionhuang.music.utils.get
8 |
9 | object KuGouLyricsProvider : LyricsProvider {
10 | override val name = "Kugou"
11 | override fun isEnabled(context: Context): Boolean =
12 | context.dataStore[EnableKugouKey] ?: true
13 |
14 | override suspend fun getLyrics(id: String, title: String, artist: String, duration: Int): Result =
15 | KuGou.getLyrics(title, artist, duration)
16 |
17 | override suspend fun getAllLyrics(id: String, title: String, artist: String, duration: Int, callback: (String) -> Unit) {
18 | KuGou.getAllLyrics(title, artist, duration, callback)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/lyrics/LyricsEntry.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.lyrics
2 |
3 | data class LyricsEntry(
4 | val time: Long,
5 | val text: String,
6 | ) : Comparable {
7 | override fun compareTo(other: LyricsEntry): Int = (time - other.time).toInt()
8 |
9 | companion object {
10 | val HEAD_LYRICS_ENTRY = LyricsEntry(0L, "")
11 | }
12 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/lyrics/LyricsProvider.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.lyrics
2 |
3 | import android.content.Context
4 |
5 | interface LyricsProvider {
6 | val name: String
7 | fun isEnabled(context: Context): Boolean
8 | suspend fun getLyrics(id: String, title: String, artist: String, duration: Int): Result
9 | suspend fun getAllLyrics(id: String, title: String, artist: String, duration: Int, callback: (String) -> Unit) {
10 | getLyrics(id, title, artist, duration).onSuccess(callback)
11 | }
12 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/lyrics/YouTubeLyricsProvider.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.lyrics
2 |
3 | import android.content.Context
4 | import com.zionhuang.innertube.YouTube
5 | import com.zionhuang.innertube.models.WatchEndpoint
6 |
7 | object YouTubeLyricsProvider : LyricsProvider {
8 | override val name = "YouTube Music"
9 | override fun isEnabled(context: Context) = true
10 | override suspend fun getLyrics(id: String, title: String, artist: String, duration: Int): Result = runCatching {
11 | val nextResult = YouTube.next(WatchEndpoint(videoId = id)).getOrThrow()
12 | YouTube.lyrics(
13 | endpoint = nextResult.lyricsEndpoint ?: throw IllegalStateException("Lyrics endpoint not found")
14 | ).getOrThrow() ?: throw IllegalStateException("Lyrics unavailable")
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/lyrics/YouTubeSubtitleLyricsProvider.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.lyrics
2 |
3 | import android.content.Context
4 | import com.zionhuang.innertube.YouTube
5 |
6 | object YouTubeSubtitleLyricsProvider : LyricsProvider {
7 | override val name = "YouTube Subtitle"
8 | override fun isEnabled(context: Context) = true
9 | override suspend fun getLyrics(id: String, title: String, artist: String, duration: Int): Result =
10 | YouTube.transcript(id)
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/models/ItemsPage.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.models
2 |
3 | import com.zionhuang.innertube.models.YTItem
4 |
5 | data class ItemsPage(
6 | val items: List,
7 | val continuation: String?,
8 | )
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/models/PersistQueue.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.models
2 |
3 | import java.io.Serializable
4 |
5 | data class PersistQueue(
6 | val title: String?,
7 | val items: List,
8 | val mediaItemIndex: Int,
9 | val position: Long,
10 | ) : Serializable
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/models/SimilarRecommendation.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.models
2 |
3 | import com.zionhuang.innertube.models.YTItem
4 | import com.zionhuang.music.db.entities.LocalItem
5 |
6 | data class SimilarRecommendation(
7 | val title: LocalItem,
8 | val items: List,
9 | )
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/playback/queues/EmptyQueue.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.playback.queues
2 |
3 | import androidx.media3.common.MediaItem
4 | import com.zionhuang.music.models.MediaMetadata
5 |
6 | object EmptyQueue : Queue {
7 | override val preloadItem: MediaMetadata? = null
8 | override suspend fun getInitialStatus() = Queue.Status(null, emptyList(), -1)
9 | override fun hasNextPage() = false
10 | override suspend fun nextPage() = emptyList()
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/playback/queues/ListQueue.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.playback.queues
2 |
3 | import androidx.media3.common.MediaItem
4 | import com.zionhuang.music.models.MediaMetadata
5 |
6 | class ListQueue(
7 | val title: String? = null,
8 | val items: List,
9 | val startIndex: Int = 0,
10 | val position: Long = 0L,
11 | ) : Queue {
12 | override val preloadItem: MediaMetadata? = null
13 | override suspend fun getInitialStatus() = Queue.Status(title, items, startIndex, position)
14 | override fun hasNextPage(): Boolean = false
15 | override suspend fun nextPage() = throw UnsupportedOperationException()
16 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/ui/component/shimmer/ButtonPlaceholder.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.ui.component.shimmer
2 |
3 | import androidx.compose.foundation.background
4 | import androidx.compose.foundation.layout.Spacer
5 | import androidx.compose.foundation.layout.height
6 | import androidx.compose.foundation.shape.RoundedCornerShape
7 | import androidx.compose.material3.ButtonDefaults
8 | import androidx.compose.material3.MaterialTheme
9 | import androidx.compose.runtime.Composable
10 | import androidx.compose.ui.Modifier
11 | import androidx.compose.ui.draw.clip
12 |
13 | @Composable
14 | fun ButtonPlaceholder(
15 | modifier: Modifier = Modifier,
16 | ) {
17 | Spacer(modifier
18 | .height(ButtonDefaults.MinHeight)
19 | .clip(RoundedCornerShape(50))
20 | .background(MaterialTheme.colorScheme.onSurface))
21 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/ui/screens/Screens.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.ui.screens
2 |
3 | import androidx.annotation.DrawableRes
4 | import androidx.annotation.StringRes
5 | import androidx.compose.runtime.Immutable
6 | import com.zionhuang.music.R
7 |
8 | @Immutable
9 | sealed class Screens(
10 | @StringRes val titleId: Int,
11 | @DrawableRes val iconId: Int,
12 | val route: String,
13 | ) {
14 | object Home : Screens(R.string.home, R.drawable.home, "home")
15 | object Songs : Screens(R.string.songs, R.drawable.music_note, "songs")
16 | object Artists : Screens(R.string.artists, R.drawable.artist, "artists")
17 | object Albums : Screens(R.string.albums, R.drawable.album, "albums")
18 | object Playlists : Screens(R.string.playlists, R.drawable.queue_music, "playlists")
19 |
20 | companion object {
21 | val MainScreens = listOf(Home, Songs, Artists, Albums, Playlists)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/ui/utils/NavControllerUtils.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.ui.utils
2 |
3 | import androidx.compose.ui.util.fastAny
4 | import androidx.navigation.NavController
5 | import com.zionhuang.music.ui.screens.Screens
6 |
7 | fun NavController.backToMain() {
8 | while (!Screens.MainScreens.fastAny { it.route == currentBackStackEntry?.destination?.route }) {
9 | navigateUp()
10 | }
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/ui/utils/ShapeUtils.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.ui.utils
2 |
3 | import androidx.compose.foundation.shape.CornerBasedShape
4 | import androidx.compose.foundation.shape.CornerSize
5 | import androidx.compose.ui.unit.dp
6 |
7 | fun CornerBasedShape.top(): CornerBasedShape =
8 | copy(bottomStart = CornerSize(0.dp), bottomEnd = CornerSize(0.dp))
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/ui/utils/StringUtils.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.ui.utils
2 |
3 | import kotlin.math.absoluteValue
4 |
5 | fun formatFileSize(sizeBytes: Long): String {
6 | val prefix = if (sizeBytes < 0) "-" else ""
7 | var result: Long = sizeBytes.absoluteValue
8 | var suffix = "B"
9 | if (result > 900) {
10 | suffix = "KB"
11 | result /= 1024
12 | }
13 | if (result > 900) {
14 | suffix = "MB"
15 | result /= 1024
16 | }
17 | if (result > 900) {
18 | suffix = "GB"
19 | result /= 1024
20 | }
21 | if (result > 900) {
22 | suffix = "TB"
23 | result /= 1024
24 | }
25 | if (result > 900) {
26 | suffix = "PB"
27 | result /= 1024
28 | }
29 | return "$prefix$result $suffix"
30 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/ui/utils/YouTubeUtils.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.ui.utils
2 |
3 | fun String.resize(
4 | width: Int? = null,
5 | height: Int? = null,
6 | ): String {
7 | if (width == null && height == null) return this
8 | "https://lh3\\.googleusercontent\\.com/.*=w(\\d+)-h(\\d+).*".toRegex().matchEntire(this)?.groupValues?.let { group ->
9 | val (W, H) = group.drop(1).map { it.toInt() }
10 | var w = width
11 | var h = height
12 | if (w != null && h == null) h = (w / W) * H
13 | if (w == null && h != null) w = (h / H) * W
14 | return "${split("=w")[0]}=w$w-h$h-p-l90-rj"
15 | }
16 | if (this matches "https://yt3\\.ggpht\\.com/.*=s(\\d+)".toRegex()) {
17 | return "$this-s${width ?: height}"
18 | }
19 | return this
20 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/utils/SecureKeys.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.utils
2 |
3 | import com.zionhuang.music.BuildConfig
4 | import org.dotenv.vault.dotenvVault
5 |
6 | object SecureKeys {
7 | fun getJossRedKey(): String {
8 | val dotenv = dotenvVault(BuildConfig.DOTENV_KEY) {
9 | directory = "/assets"
10 | filename = "env.vault"
11 | }
12 | return dotenv["STREAMING_HEAD_JOSSRED"] ?: ""
13 | }
14 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/utils/potoken/PoTokenException.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.utils.potoken
2 |
3 | class PoTokenException(message: String) : Exception(message)
4 |
5 | // to be thrown if the WebView provided by the system is broken
6 | class BadWebViewException(message: String) : Exception(message)
7 |
8 | fun buildExceptionForJsError(error: String): Exception {
9 | return if (error.contains("SyntaxError"))
10 | BadWebViewException(error)
11 | else
12 | PoTokenException(error)
13 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/zionhuang/music/utils/potoken/PoTokenResult.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.music.utils.potoken
2 |
3 | class PoTokenResult(
4 | val playerRequestPoToken: String,
5 | val streamingDataPoToken: String,
6 | )
--------------------------------------------------------------------------------
/app/src/main/res/drawable/add.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/album.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/arrow_back.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/arrow_downward.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/arrow_forward.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/arrow_top_left.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/arrow_upward.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/artist.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/backup.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bedtime.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bookmark.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bookmark_filled.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/cached.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/clear_all.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/close.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/contrast.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/dark_mode.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/delete.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/delete_history.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/discover_tune.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/drag_handle.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/edit.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/equalizer.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/error.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/expand_less.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/expand_more.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/explicit.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/facebook.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/fast_forward.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/favorite.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/format_align_center.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/format_align_left.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ghost.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/google_play.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/gradient.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/graphic_eq.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/grid_view.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/history.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/home.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/info.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/input.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/library_add_check.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/library_music.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/location_on.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/lyrics.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/manage_search.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/more_horiz.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/more_vert.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/music_note.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/navigate_next.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/offline.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/pause.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/person.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/play.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/playlist_add.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/playlist_play.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/playlist_remove.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/queue_music.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/radio.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/radio_button_unchecked.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/remove.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/repeat.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/repeat_on.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/repeat_one.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/repeat_one_on.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/replay.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/restore.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/search.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/security.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/share.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shortcut_albums.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shortcut_playlists.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shortcut_search.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shortcut_songs.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shuffle.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shuffle_on.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/skip_next.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/skip_previous.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/sliders.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/slow_motion_video.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/snowflake.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/splashscreen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | -
5 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/storage.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/sync.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tab.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/timer.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/translate.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/trending_up.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tune.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/update.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/volume_up.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/resources.properties:
--------------------------------------------------------------------------------
1 | unqualifiedResLocale=en
--------------------------------------------------------------------------------
/app/src/main/res/values-bs/strings-joss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Prozirni
4 | Muzička igrača pozadina
5 | Podrazumevano
6 | Tanka navigacijska traka
7 | Uklonite tekstualne naljepnice za smanjenje visine navigacijskog trake
8 | Korištenje Joss Red za reprodukciju muzike
9 | GREŠKA 403 u Josred, nastavljajući s streaming YouTubeom
10 | Greška u alternativnom izvoru
11 | Pogreška sa alternativnim izvorom, pokušavajući YouTube
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-et/strings-joss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Läbipaistev
4 | Muusikamängija taust
5 | Täitmata jätmine
6 | Õhuke navigeerimisriba
7 | Navigeerimisriba kõrguse vähendamiseks kõrvaldage tekstisildid
8 | Joss Redi kasutamine muusika reprodutseerimiseks
9 | Viga 403 Jossredis, jätkates YouTube\'i voogesitust
10 | Viga alternatiivse allika korral
11 | Viga alternatiivse allikaga, proovides YouTube\'i
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-fa/strings-joss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | شفاف
4 | پس زمینه پخش کننده موسیقی
5 | پیش فرض
6 | نوار ناوبری نازک
7 | برچسب های متن را برای کاهش ارتفاع نوار ناوبری از بین ببرید
8 | استفاده از Joss Red برای تولید مثل موسیقی
9 | خطای 403 در Jossred ، ادامه با جریان توسط YouTube
10 | خطا در منبع جایگزین
11 | خطا با منبع جایگزین ، تلاش برای یوتیوب
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-hi/strings-joss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | पारदर्शी
4 | संगीत खिलाड़ी पृष्ठभूमि
5 | गलती करना
6 | पतली नेविगेशन बार
7 | नेविगेशन बार की ऊंचाई को कम करने के लिए टेक्स्ट लेबल को हटा दें
8 | संगीत प्रजनन के लिए जॉस रेड का उपयोग करना
9 | YouTube द्वारा स्ट्रीमिंग के साथ जारी, Jossred में 403
10 | वैकल्पिक स्रोत में त्रुटि
11 | वैकल्पिक स्रोत के साथ त्रुटि, YouTube की कोशिश कर रहा है
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-hr/strings-joss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Transparentan
4 | Pozadina glazbenog playera
5 | Zadano
6 | Tanka navigacijska traka
7 | Uklonite naljepnice teksta kako biste smanjili visinu navigacijske trake
8 | Korištenje Joss Red -a za reprodukciju glazbe
9 | Pogreška 403 u Jossredu, nastavljajući s strujanjem YouTubea
10 | Pogreška u alternativnom izvoru
11 | Pogreška s alternativnim izvorom, isprobavanje YouTubea
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-it/strings-joss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Trasparente
4 | Sfondo per lettore musicale
5 | Predefinito
6 | Barra di navigazione sottile
7 | Elimina le etichette di testo per ridurre l\'altezza della barra di navigazione
8 | Utilizzo di Joss Red per la riproduzione della musica
9 | Errore 403 in Jossred, continuando con lo streaming di YouTube
10 | Errore nella fonte alternativa
11 | Errore con fonte alternativa, provando YouTube
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ne/strings-joss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | वारपार देखिने
4 | संगीत प्लेयर पृष्ठभूमि
5 | पुरा नगर्नु
6 | पातलो नेभिगेसन बार
7 | नेभिगेसन पट्टीको उचाई कम गर्न पाठ लेबलहरू हटाउनुहोस्
8 | संगीत प्रजननको लागि जेस रातो प्रयोग गर्दै
9 | EXSED मा jerce03 jerceply, यूट्यूब द्वारा स्ट्रिमिंग जारी राख्दै
10 | वैकल्पिक स्रोतमा त्रुटि
11 | वैकल्पिक स्रोतको साथ त्रुटि, यूट्यूबको प्रयास गर्दै
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-pt/strings-joss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Transparente
4 | Fundo do reprodutor
5 | Padrão
6 | Barra de navegação fina
7 | Elimine os rótulos de texto para reduzir a altura da barra de navegação
8 | Usando Joss Red para reprodução musical
9 | Erro 403 em Jossred, continuando com streaming by youtube
10 | Erro na fonte alternativa
11 | Erro com fonte alternativa, experimentando o YouTube
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sv/strings-joss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Transparent
4 | Musikspelares bakgrund
5 | Standard
6 | Tunn navigationsfält
7 | Eliminera textetiketter för att minska höjden på navigeringsfältet
8 | Använda Joss Red for Music Reproduktion
9 | Fel 403 i Josred, fortsätter med streaming av YouTube
10 | Fel i den alternativa källan
11 | Fel med alternativ källa, prova YouTube
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ta/strings-joss.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | வெளிப்படையானது
4 | மியூசிக் பிளேயர் பின்னணி
5 | இயல்புநிலை
6 | மெல்லிய வழிசெலுத்தல் பட்டி
7 | வழிசெலுத்தல் பட்டியின் உயரத்தைக் குறைக்க உரை லேபிள்களை அகற்றவும்
8 | இசை இனப்பெருக்கம் ஜோஸ் ரெட் பயன்படுத்துதல்
9 | YouTube ஆல் ஸ்ட்ரீமிங்கைத் தொடரும் ஜாஸில் பிழை 403
10 | மாற்று மூலத்தில் பிழை
11 | மாற்று மூலத்துடன் பிழை, YouTube ஐ முயற்சிக்கிறது
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values/app_name.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Joss Music
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/values.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | @drawable/play
5 | @drawable/pause
6 | @drawable/skip_previous
7 | @drawable/skip_next
8 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/automotive_app_desc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/gma_ad_services_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | google.com
5 | googleadservices.com
6 | doubleclick.net
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/provider_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/widget_provider.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/assets/buymeacoffee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/assets/buymeacoffee.png
--------------------------------------------------------------------------------
/assets/liberapay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/assets/liberapay.png
--------------------------------------------------------------------------------
/crowdin.yml:
--------------------------------------------------------------------------------
1 | files:
2 | - source: /app/src/main/res/values/strings.xml
3 | translation: /app/src/main/res/values-%android_code%/strings.xml
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ar/full_description.txt:
--------------------------------------------------------------------------------
1 | عميل YouTube Music بتصميم Material 3 لنظام Android
2 |
3 |
المميزات:
4 |
5 | تشغيل الأغاني من يوتيوب / يوتيوب موسيقى بدون إعلانات
6 | تشغيل في الخلفية
7 | البحث عن الأغاني، الفيديوهات، الألبومات، وقوائم التشغيل من يوتيوب ميوزيك
8 | إدارة المكتبة
9 | تخزين وتحميل الأغاني للاستماع بدون إنترنت
10 | كلمات الأغاني المتزامنة
11 | تخطي الصمت
12 | تطبيع الصوت
13 | ثيم ديناميكي
14 | دعم اللغات
15 | دعم أندرويد أوتو
16 | اختيارات سريعة مخصصة
17 | تصميم Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ar/short_description.txt:
--------------------------------------------------------------------------------
1 | عميل YouTube Music بتصميم Material 3 لنظام أندرويد
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/bg/full_description.txt:
--------------------------------------------------------------------------------
1 | Клиент на YouTube Music Material 3 за Android
2 |
3 |
Характеристики:
4 |
5 | - Изпълнение на песни от YT/YT Music без реклами
6 | - Възпроизвеждане във фонов режим
7 | - Търсете песни, видеоклипове, албуми и плейлисти от YouTube Music
8 | - Управление на библиотеката
9 | - Кеширане и изтегляне на песни за офлайн възпроизвеждане
10 | - Синхронизирани текстове
11 | - Пропуснете мълчанието
12 | - Нормализация на звука
13 | - Динамична тема
14 | - Локализация
15 | - Поддръжка на Android Auto
16 | - Персонализирани бързи избори
17 | - Материал 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/bg/short_description.txt:
--------------------------------------------------------------------------------
1 | Клиент на YouTube Music Material 3 за Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/bs/full_description.txt:
--------------------------------------------------------------------------------
1 | Materijal 3 YouTube Music klijent za Android
2 |
3 |
Karakteristike:
4 |
5 | - Slušajte pjesme s YT/YT Music bez reklama
6 | - Slušajte u pozadini
7 | - Pretraživanje pjesama, videozapisa, albuma i popisa na YouTube Music-u
8 | - Upravljanje bibliotekom
9 | - Predmemorija i preuzimanje pjesama za izvanmrežno slušanje
10 | - Sinkronizirani tekstovi
11 | - Preskočite tišinu
12 | - Normalizacija zvuka
13 | - Dinamična tema
14 | -Lokalizacija
15 | - Podrška za Android Auto
16 | - Personalizirani brzi odabiri
17 | - Materijal 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/bs/short_description.txt:
--------------------------------------------------------------------------------
1 | Materijal 3 YouTube Music klijent za Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/cs-CZ/full_description.txt:
--------------------------------------------------------------------------------
1 | Material 3 klient YouTube Music pro Android
2 |
3 |
Funkce:
4 |
5 | - Přehrávání skladeb z YT / YT Music bez reklam
6 | - Přehrávání na pozadí
7 | - Vyhledávání skladeb, videí, alb a playlistů z YouTube Music
8 | - Správa knihovny
9 | - Mezipaměť a stahování skladeb pro offline přehrávání
10 | - Synchronizované texty
11 | - Přeskakování ticha
12 | - Normalizace zvuku
13 | - Dynamický motiv
14 | - Přeloženo do češtiny
15 | - Podpora Android Auto
16 | - Personalizovaný rychlý výběr
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/cs-CZ/short_description.txt:
--------------------------------------------------------------------------------
1 | Material 3 klient YouTube Music pro Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/full_description.txt:
--------------------------------------------------------------------------------
1 | Ein Material 3 YouTube Music-Client für Android
2 |
3 | <br><b>Funktionen:</b>
4 |
5 | - Songs von YT/YT Music ohne Werbung abspielen
6 | - Hintergrundwiedergabe
7 | - Songs, Videos, Alben und Playlists von YouTube Music suchen
8 | - Bibliotheksverwaltung
9 | - Songs zwischenspeichern und herunterladen für die Offline-Wiedergabe
10 | - Synchronisierte Liedtexte
11 | - Stille überspringen
12 | - Audionormalisierung
13 | - Dynamisches Design
14 | - Lokalisierung
15 | - Android Auto-Unterstützung
16 | - Personalisierte Schnellauswahl
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/short_description.txt:
--------------------------------------------------------------------------------
1 | Ein Material 3 YouTube Musik-Client für Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/el-GR/full_description.txt:
--------------------------------------------------------------------------------
1 | Ένα πρόγραμμα Material 3 YouTube Μουσικής για το Android
2 |
3 |
Λειτουργίες:
4 |
5 | - Αναπαραγωγή τραγουδιών από YT/YT Music χωρίς διαφημίσεις
6 | - Αναπαραγωγή στο παρασκήνιο
7 | - Αναζήτηση τραγουδιών, βίντεο, άλμπουμ και λίστες αναπαραγωγής από το YouTube Music
8 | - Διαχείριση βιβλιοθήκης
9 | - Προσωρινή αποθήκευση και λήψη τραγουδιών για αναπαραγωγή εκτός σύνδεσης
10 | - Συγχρονισμένοι στίχοι
11 | - Παράλειψη σιωπής
12 | - Κανονικοποίηση ήχου
13 | - Δυναμικό θέμα
14 | - Μετάφραση στίχων στην γλώσσα σας
15 | - Υποστήριξη Android Auto
16 | - Εξατομικευμένες γρήγορες επιλογές
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/el-GR/short_description.txt:
--------------------------------------------------------------------------------
1 | Ένα πρόγραμμα Material 3 YouTube Μουσικής για το Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/10.txt:
--------------------------------------------------------------------------------
1 |
Improved
2 |
3 | * Support Android 13 themed icon (#157)
4 |
5 |
Fixed
6 |
7 | * Fix stream can't be played (#161)
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/11.txt:
--------------------------------------------------------------------------------
1 | In this version, we are using a new library: Innertube, which makes more powerful features possible!
2 | * Browse everything as in YouTube Music
3 | * New home page to browse suggestions and find new music releases
4 | * Search result summary tab
5 | * Loading stream is faster
6 |
7 | Credit: vfsfitvnm/ViMusic, tombulled/innertube, zerodytrash/YouTube-Internal-Clients
8 |
9 | ⚠️ Note: For users upgrading from <0.3.3, please select all songs in your library and do "Refetch" to get thumbnails shown.
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/12.txt:
--------------------------------------------------------------------------------
1 | * Start radio from library songs
2 | * Default open tab setting
3 | * Audio quality setting
4 | * Pause or clear search history
5 | * Backup and restore
6 | * Support SOCKS proxy
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/13.txt:
--------------------------------------------------------------------------------
1 | Music is now renamed to InnerTune!
2 |
3 | - Player redesign
4 | - Queue redesign
5 | - Cache songs
6 | - Stats for nerds
7 | - Persistent queue
8 | - Add built-in playlist (liked, downloaded)
9 | - Set cache limits
10 | - Sort songs by play time
11 | - Customize navigation tabs
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/14.txt:
--------------------------------------------------------------------------------
1 | - Lyrics
2 | - Android Auto support
3 | - Skip silence
4 | - Audio normalization
5 | - Export downloaded songs via SAF
6 | - Improve player view layout
7 | - Add wake lock for player
8 | - Option to hide buttons in player notification
9 | - Delete persistent queue when restoring database
10 | - Show itag in stats for nerds
11 | - Minor changes and fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/15.txt:
--------------------------------------------------------------------------------
1 | Improvement
2 |
3 | - Add shuffle button in Android Auto
4 |
5 | Fixed
6 |
7 | - Fix apostrophe displayed as HTML entity in lyrics #401
8 | - Update YouTube search filter key #436
9 | - Fix #432
10 |
11 | Translation
12 |
13 | - Update Hungarian translation #407 #425
14 | - Add Indonesia translation #415
15 | - Update Simplified Chinese translation #416
16 | - Update Japanese translation #419
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/16.txt:
--------------------------------------------------------------------------------
1 | - New app icon
2 | - Rewrite UI using Jetpack Compose
3 | - Better UI/UX
4 | - Dynamic theme
5 | - Redesigned home screen
6 | - Improved download experience
7 | - New lyrics source: YouTube subtitle
8 | - Show replay button when playing ended
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/17.txt:
--------------------------------------------------------------------------------
1 | - Login support
2 | - Mood & Genres
3 | - Better stats screen
4 | - Bookmark artists
5 | - Minor enhancement and bug fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/18.txt:
--------------------------------------------------------------------------------
1 | - Improve library design
2 | - Lyrics translator (full version only)
3 | - Minor enhancement and bug fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/19.txt:
--------------------------------------------------------------------------------
1 | - Better UI
2 | - Grid layout for albums and playlists
3 | - Minor enhancement and bug fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/20.txt:
--------------------------------------------------------------------------------
1 | - Fix YouTube API changes
2 | - Show library artist albums first in new releases
3 | - More actions in Android Auto
4 | - Long click on back arrow to go to home
5 | - More improvements and fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/21.txt:
--------------------------------------------------------------------------------
1 | - Fix radio not working
2 | - Playlist duplicate warning
3 | - Add LrcLib lyrics provider
4 | - Add marquee
5 | - Add haptic feedback
6 | - Black player in pure black mode
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/22.txt:
--------------------------------------------------------------------------------
1 | - Fix frequent random crash
2 | - Fix crash when searching lyrics
3 | - Upgrade Material 3
4 | - Automatically scroll to the currently playing song in the queue
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/23.txt:
--------------------------------------------------------------------------------
1 | - Discord RPC support
2 | - In-app update checker
3 | - Player text alignment customization
4 | - Exclude downloaded files in auto backup
5 | - Fix random crash
6 | - Other fixes and enhancements
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/24.txt:
--------------------------------------------------------------------------------
1 | - Smoother navigation animation
2 | - Option to hide explicit content
3 | - Add squiggly slider
4 | - Fix album artist error and add refetch album button
5 | - Fix color mismatch
6 | - Other fixes and enhancements
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/25.txt:
--------------------------------------------------------------------------------
1 | - Revamped home screen
2 | - Multi-select in queue and playlists
3 | - Add queue item menu
4 | - Search in playlists
5 | - Option to change grid cell size
6 | - Option to stop music when the app is killed
7 | - Option to auto skip to next song on error
8 | - Click on bottom navigation item again to scroll to top
9 | - Refetch song button
10 | - Fix repetitions in history
11 | - Other fixes and enhancements
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/26.txt:
--------------------------------------------------------------------------------
1 | - Multi-select in library songs, artist songs, albums, and history
2 | - Search in history
3 | - Auto scroll up or down when reordering
4 | - Show other versions of an album
5 | - Add cancel button for download notification
6 | - Better audio normalization
7 | - Option to disable screenshot for privacy
8 | - Option to disable auto-loading more songs
9 | - Other fixes and enhancements
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/5.txt:
--------------------------------------------------------------------------------
1 | * App updater (Preview)
2 | * Share button function in bottom control fragment
3 | * Open YouTube urls by this app #11
4 | * You can now search for YouTube Music albums
5 | * Remove download of a song
6 | * Show channel or playlist name in search fragment title
7 | * Scrollable search filter chip group
8 | * Minor fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/6.txt:
--------------------------------------------------------------------------------
1 |
Fixed
2 |
3 | * Fix YouTube not playing any streams #27, TeamNewPipe/NewPipe#8202
4 | * Fix YouTube age restricted videos being throttled TeamNewPipe/NewPipeExtractor#832
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/7.txt:
--------------------------------------------------------------------------------
1 | * Material You #25
2 | * Dark mode settings
3 | * Show an icon indicating if a song is in your library in search fragment
4 | * Make search filter bar fixed
5 | * Move song downloaded icon to second line
6 | * Smoother transition animation
7 | * Merge artists with same name (#50)
8 | * Minor fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/8.txt:
--------------------------------------------------------------------------------
1 |
Fixed
2 |
3 | * Fix main content resize animation
4 | * Fix dark theme malfunction #69
5 | * Fix renaming an artist can lead to lose songs #75
6 |
7 |
Translation updates
8 |
9 | * Finnish (by @teemue) #67
10 | * Italian (by @airon90) #71
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/9.txt:
--------------------------------------------------------------------------------
1 |
Fixed
2 |
3 | * Fix stream can't be played (#148)
4 | * Fix bottom navigation item isn't checked when clicked (#12)
5 |
6 |
Translation updates
7 |
8 | * Korean (by @dongsu8142) #107
9 | * Spanish (by @DD21S) #120
10 | * Japanese (by @HiSubway) #138
11 | * Swedish (by @Itroublve) #143
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | A Material 3 YouTube Music client for Android
2 |
3 |
Features:
4 |
5 | - Play songs from YT/YT Music without ads
6 | - Background playback
7 | - Search songs, videos, albums, and playlists from YouTube Music
8 | - Library management
9 | - Cache and download songs for offline playback
10 | - Synchronized lyrics
11 | - Skip silence
12 | - Audio normalization
13 | - Dynamic theme
14 | - Localization
15 | - Android Auto support
16 | - Personalized quick picks
17 | - Material 3
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | A Material 3 YouTube Music client for Android
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | InnerTune
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/11.txt:
--------------------------------------------------------------------------------
1 | En esta versión, estamos usando una nueva biblioteca: Innertube, ¡que hace posible funciones más potentes!
2 | * Navegar todo como en YouTube Music
3 | * Nueva página de inicio para buscar sugerencias y encontrar nuevos lanzamientos musicales
4 | * Resumen de resultados de búsqueda
5 | * La carga del flujo es más rápida
6 |
7 | Crédito: vfsfitvnm/ViMusic, tombulled/innertube, zerodytrash/YouTube-Internal-Clients
8 |
9 | ⚠️ Nota: Para los usuarios que actualicen desde <0.3.3, seleccione todas las canciones de su biblioteca y haga "Recuperar" para que se muestren las miniaturas.
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/12.txt:
--------------------------------------------------------------------------------
1 | * Iniciar la radio desde las canciones de la biblioteca
2 | * Configuración de pestaña abierta por defecto
3 | * Configuración de la calidad del audio
4 | * Pausa o borrar el historial de búsqueda
5 | * Copia de seguridad y restauración
6 | * Admite proxy SOCKS
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/13.txt:
--------------------------------------------------------------------------------
1 | ¡La aplicación Music ahora se llama InnerTune!
2 |
3 | - Rediseño del reproductor
4 | - Rediseño de la cola
5 | - Almacenar canciones en caché
6 | - Estadísticas para nerds
7 | - Cola persistente
8 | - Añadir listas de reproducción (me gusta, descargadas)
9 | - Establecer límites de caché
10 | - Ordenar canciones por tiempo de reproducción
11 | - Personalizar pestañas de navegación
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/14.txt:
--------------------------------------------------------------------------------
1 | - Letras
2 | - Compatibilidad con Android Auto
3 | - Saltar silencio
4 | - Normalización de audio
5 | - Exportar canciones descargadas mediante SAF
6 | - Mejora del diseño de la vista del reproductor
7 | - Añadir bloqueo de despertador para el reproductor
8 | - Opción de ocultar botones en la notificación del reproductor
9 | - Eliminar la cola persistente al restaurar la base de datos
10 | - Mostrar itag en estadísticas para nerds
11 | - Cambios y correcciones menores
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/15.txt:
--------------------------------------------------------------------------------
1 | Mejora
2 |
3 | - Añadir botón de reproducción aleatoria en Android Auto
4 |
5 | Corregido
6 |
7 | - Solucionado el apóstrofe que muestra como entidad HTML en letras #401
8 | - Actualización de la clave de filtro de búsqueda de YouTube #436
9 | - Corregido #432
10 |
11 | Traducción
12 |
13 | - Actualización de la traducción al Húngaro #407 #425
14 | - Añadir traducción Indonesia #415
15 | - Actualización de la traducción de Chino simplificado #416
16 | - Actualización de la traducción del Japonés #419
17 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/16.txt:
--------------------------------------------------------------------------------
1 | - Nuevo icono de la aplicación
2 | - Reescritura de la interfaz de usuario con Jetpack Compose
3 | - Mejor UI/UX
4 | - Tema dinámico
5 | - Pantalla de inicio rediseñada
6 | - Experiencia de descarga mejorada
7 | - Nueva fuente de letras: Subtítulos de YouTube
8 | - Mostrar el botón de repetición al finalizar la reproducción
9 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/17.txt:
--------------------------------------------------------------------------------
1 | - Soporte de inicio de sesión
2 | - Estado de ánimo y géneros
3 | - Mejor pantalla de estadísticas
4 | - Artistas favoritos
5 | - Pequeñas mejoras y correcciones de errores
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/18.txt:
--------------------------------------------------------------------------------
1 | - Mejorar el diseño de la biblioteca
2 | - Traductor de letras (en versión completa)
3 | - Mejoras menores y corrección de errores
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/19.txt:
--------------------------------------------------------------------------------
1 | - Mejor interfaz de usuario
2 | - Diseño de cuadrícula para álbumes y listas de reproducción
3 | - Mejoras menores y corrección de errores
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/20.txt:
--------------------------------------------------------------------------------
1 | - Corregir los cambios de la API de YouTube
2 | - Mostrar primero los álbumes de artistas de la biblioteca en las novedades
3 | - Más acciones en Android Auto
4 | - Pulsación larga en la flecha atrás para ir al inicio
5 | - Más mejoras y correcciones
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/21.txt:
--------------------------------------------------------------------------------
1 | - Arreglar la radio no funciona
2 | - Aviso de lista de reproducción duplicada
3 | - Añadir proveedor de letras LrcLib
4 | - Añadir marquesina
5 | - Añadir retroalimentación háptica
6 | - Reproductor negro en modo negro puro
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/22.txt:
--------------------------------------------------------------------------------
1 | - Corrección de fallos aleatorios frecuentes
2 | - Arreglar fallo al buscar letras
3 | - Actualización Material 3
4 | - Desplazamiento automático a la canción que se está reproduciendo en la cola
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/23.txt:
--------------------------------------------------------------------------------
1 | - Compatibilidad con Discord RPC
2 | - Comprobador de actualizaciones en la aplicación
3 | - Personalización de la alineación del texto del reproductor
4 | - Excluir archivos descargados en la copia de seguridad automática
5 | - Corrección de fallos aleatorios
6 | - Otras correcciones y mejoras
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/24.txt:
--------------------------------------------------------------------------------
1 | - Animación de navegación más fluida
2 | - Opción para ocultar contenido explícito
3 | - Añadir control deslizante
4 | - Arreglar el error del artista del álbum y añadir un botón para recuperar el álbum
5 | - Corrección del desajuste de colores
6 | - Otras correcciones y mejoras
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/25.txt:
--------------------------------------------------------------------------------
1 | - Pantalla de inicio renovada
2 | - Selección múltiple en la cola y las listas de reproducción
3 | - Menú para añadir elementos a la cola
4 | - Búsqueda en listas de reproducción
5 | - Opción de cambiar el tamaño de las celdas de la cuadrícula
6 | - Opción de detener la música al cerrar la aplicación
7 | - Opción de salto automático a la canción siguiente en caso de error
8 | - Vuelve a pulsar en el elemento de navegación inferior para desplazarte a la parte superior
9 | - Botón para recuperar canciones
10 | - Corrección de repeticiones en el historial
11 | - Otras correcciones y mejoras
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/26.txt:
--------------------------------------------------------------------------------
1 | - Selección múltiple de canciones en la biblioteca, Historial, álbumes Y artistas
2 | - Búsqueda en el historial
3 | - Desplazamiento automático hacia arriba o abajo al reordenar
4 | - Mostrar otras versiones de un álbum
5 | - Añadir botón de cancelar para la notificación de descarga
6 | - Mejor normalización de audio
7 | - Opción para desactivar capturas de pantalla por privacidad
8 | - Opción para desactivar la Reproducción automática de más canciones
9 | - Otras correcciones y mejoras
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/5.txt:
--------------------------------------------------------------------------------
1 | * Actualizador de aplicaciones (Previsualizar)
2 | * Compartir la función del botón en el fragmento de control inferior
3 | * Abrir URL de YouTube por esta aplicación #11
4 | * Ahora puedes buscar álbumes de YouTube Music
5 | * Eliminar la descarga de una canción
6 | * Mostrar el nombre del canal o lista de reproducción en el título del fragmento de búsqueda
7 | * Búsqueda desplazable filtro chip grupo
8 | * Correcciones menores
9 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/6.txt:
--------------------------------------------------------------------------------
1 |
Reparado
2 |
3 | * Se solucionó el problema de que YouTube no reproducía ninguna transmisión #27, TeamNewPipe/NewPipe#8202
4 | * Se soluciona el problema de la limitación de edad de los videos de YouTube TeamNewPipe/NewPipeExtractor#832
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/7.txt:
--------------------------------------------------------------------------------
1 | * Material You #25
2 | * Configuración del modo oscuro
3 | * Mostrar un icono indicando si una canción está en su biblioteca en fragmento de búsqueda
4 | * Hacer fija la barra de filtros de búsqueda
5 | * Mover el icono de canción descargada a la segunda línea
6 | * Animación de transición más suave
7 | * Fusionar artistas con el mismo nombre (#50)
8 | * Correcciones menores
9 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/8.txt:
--------------------------------------------------------------------------------
1 |
Reparado
2 |
3 | * Corregir la animación de cambio de tamaño del contenido principal
4 | * Se solucionó el problema del tema oscuro n.° 69
5 | * Se solucionó que cambiar el nombre de un artista pudiera provocar la pérdida de canciones #75
6 |
7 |
Actualizaciones de traducción
8 |
9 | * Finlandés (por @teemue) #67
10 | * Italiano (por @airon90) #71
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/9.txt:
--------------------------------------------------------------------------------
1 |
Reparado
2 |
3 | * Se solucionó el problema de que la transmisión no se puede reproducir (#148)
4 | * Se solucionó que el elemento de navegación inferior no se marcara al hacer clic (#12)
5 |
6 |
Actualizaciones de traducción
7 |
8 | * Coreano (por @dongsu8142) #107
9 | * Español(por @DD21S) #120
10 | * Japonés (por @HiSubway) #138
11 | * Sueco (por @Itroublve) #143
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/full_description.txt:
--------------------------------------------------------------------------------
1 | Un cliente de YouTube Music con Material 3 para Android
2 |
3 |
Características:
4 |
5 | - Reproduce canciones de YT/YT Music sin anuncios
6 | - Reproducción en segundo plano
7 | - Busca canciones, vídeos, álbumes y listas de reproducción de YouTube Music
8 | - Gestión de biblioteca
9 | - Guarda en caché y descarga canciones para reproducirlas sin conexión
10 | - Letras sincronizadas
11 | - Saltar silencio
12 | - Normalización de audio
13 | - Tema dinámico
14 | - Localización
15 | - Compatibilidad con Android Auto
16 | - Selecciones rápidas personalizadas
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/short_description.txt:
--------------------------------------------------------------------------------
1 | Un cliente de YouTube Music con Material 3 para Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/et/full_description.txt:
--------------------------------------------------------------------------------
1 | Material 3 põhine YouTube Musicu klient Androidile
2 |
3 |
Funktsionaalsused:
4 |
5 | - Vaata YT/YT Musicu lugusid ilma reklaamideta
6 | - Esitus taustal
7 | - Otsu lugusid, videoid, albumeid ja esitusloendeid YouTube Musicust
8 | - Muusikakogu haldus
9 | - Puhverda ja laadi alla lugusid kasutamiseks vallasrežiimis
10 | - Sünkroniseeritud laulusõnad
11 | - Võimalus jätta vaikus vahele
12 | - Heli normaliseerimine
13 | - Dünaamiline kujundus
14 | - Asukohast sõltuv sisu ja keel
15 | - Android Auto tugi
16 | - Personaliseeritud kiirvalikud
17 | - Material 3 kujundus
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/et/short_description.txt:
--------------------------------------------------------------------------------
1 | Material 3 põhine YouTube Musicu klient Androidile
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fi-FI/full_description.txt:
--------------------------------------------------------------------------------
1 | Material 3 YouTube Music -asiakasohjelma Androidille
2 |
3 |
Ominaisuudet:
4 |
5 | - Toista kappaleita YT/YT Musicista ilman mainoksia
6 | - Taustatoisto
7 | - Hae kappaleita, videoita, albumeja ja soittolistoja YouTube Musicista
8 | - Kirjaston hallinta
9 | - Tallenna välimuistiin ja lataa kappaleita ei-verkkotoistoa varten
10 | - Synkronoidut sanoitukset
11 | - Ohita hiljaisuus
12 | - Äänen normalisointi
13 | - Dynaaminen teema
14 | - Lokalisointi
15 | - Android Auto -tuki
16 | - Henkilökohtaiset pikavalinnat
17 | - Materiaali 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fi-FI/short_description.txt:
--------------------------------------------------------------------------------
1 | Material 3 YouTube Music -asiakasohjelma Androidille
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr-FR/full_description.txt:
--------------------------------------------------------------------------------
1 | Un client YouTube Music pour Android utilisant Material 3
2 |
3 |
Fonctionnalités :
4 |
5 | - Jouer des titres de YouTube / YouTube Music sans pub
6 | - Lecture en arrière-plan
7 | - Recherche de titres, de vidéos, d'albums et des playlists depuis YouTube Music
8 | - Gestion de la bibliothèque
9 | - Mise en cache et téléchargement des titres pour une lecture hors ligne
10 | - Affichage des paroles en temps réel
11 | - Saute les silences
12 | - Normalisation audio
13 | - Thème dynamique
14 | - Localisation
15 | - Prise en charge d'Android Auto
16 | - Sélection rapide personnalisée
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr-FR/short_description.txt:
--------------------------------------------------------------------------------
1 | Un client YouTube Music pour Android utilisant Material 3
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/hi-IN/full_description.txt:
--------------------------------------------------------------------------------
1 | एंड्रॉयड के लिए एक यूट्यूब म्यूजिक का मटीरीअल ३ से बना पात्र
2 |
3 |
गुंण:
4 |
5 | - प्रचार बिना यूट्यूब और यूट्यूब म्यूजिक से गाने बजाएँ
6 | - ऐप बंद करके बजायें
7 | - गानों , वीडिओ, एलबमों, और चाल सूचियों की खोज करें यूट्यूब म्यूजिक से
8 | - संग्रह प्रबंधन
9 | - ऑफलाइन बजाने के लिए गाने निजी भंडार मे डालें और डाउनलोड करें
10 | - समकालिक गीतिकाव्य
11 | - शांत हिस्सा आगे बढ़ाएं
12 | - प्रबलता सामान्यीकरण
13 | - अनुकूलिक थीम
14 | - स्थानीकरण
15 | - एंड्रॉयड ऑटो मान्य
16 | - खास आपके लिए झटपट चलाने हेतु चुनिंदा गाने
17 | - मटीरीअल ३ से बना
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/hi-IN/short_description.txt:
--------------------------------------------------------------------------------
1 | एंड्रॉयड के लिए एक यूट्यूब म्यूजिक का पात्र
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/hr/full_description.txt:
--------------------------------------------------------------------------------
1 | Materijal 3 YouTube Music klijent za Android
2 |
3 |
Značajke:
4 |
5 | - Reproducirajte pjesme s YT/YT glazbe bez oglasa
6 | - Reprodukcija u pozadini
7 | - Pretraživanje pjesama, videozapisa, albuma i popisa na YouTube Musicu
8 | - Upravljanje knjižnicom
9 | - Predmemorija i preuzimanje pjesama za izvanmrežnu reprodukciju
10 | - Sinkronizirani tekstovi
11 | - Preskoči tišinu
12 | - Normalizacija zvuka
13 | - Dinamička tema
14 | -Lokalizacija
15 | - Podrška za Android Auto
16 | - Personalizirani brzi odabiri
17 | - Materijal 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/hr/short_description.txt:
--------------------------------------------------------------------------------
1 | Materijal 3 YouTube Music klijent za Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/id/full_description.txt:
--------------------------------------------------------------------------------
1 | Klien Material 3 YouTube Music untuk Android
2 |
3 | Fitur:
4 |
5 | - Memutar lagu dari YT/YT Music tanpa iklan
6 | - Pemutaran di latar belakang
7 | - Cari lagu, video, album, dan playlist dari YouTube Music
8 | - Pengelolaan pustaka lagu
9 | - Tembolok dan unduh lagu untuk pemutaran offline
10 | - Lirik yang disinkronkan
11 | - Lewati keheningan
12 | - Normalisasi audio
13 | - Tema dinamis
14 | - Penerjemahan lokal
15 | - Dukungan Android Auto
16 | - Pilihan cepat yang dipersonalisasi
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/id/short_description.txt:
--------------------------------------------------------------------------------
1 | Klien Material 3 YouTube Music untuk Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/full_description.txt:
--------------------------------------------------------------------------------
1 | Un client di YouTube Music in Material 3 per Android
2 |
3 |
Caratteristiche:
4 |
5 | - Ascolto dei brani da YT/YT Music senza pubblicità
6 | - Riproduzione in background
7 | - Ricerca dei brani, video, album e playlist da YouTube Music
8 | - Gestione della libreria
9 | - Cache e download dei brani per la riproduzione offline
10 | - Testi sincronizzati
11 | - Salto del silenzio
12 | - Normalizzazione dell'audio
13 | - Tema dinamico
14 | - Varie lingue disponibili
15 | - Supporto per Android Auto
16 | - Scelte rapide personalizzate
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/short_description.txt:
--------------------------------------------------------------------------------
1 | Un client di YouTube Music in Material 3 per Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/title.txt:
--------------------------------------------------------------------------------
1 | InnerTune
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ja/full_description.txt:
--------------------------------------------------------------------------------
1 | Material 3 を使った Android 用 YouTube Music クライアント
2 |
3 |
機能:
4 |
5 | - YouTubeとYT Music から広告なしで音楽視聴
6 | - バックグラウンドで再生
7 | - YouTube Musicから、曲、アルバム、動画、再生リストを検索
8 | - 音楽のライブラリを管理
9 | - 曲をダウンロードしてオフラインで再生
10 | - 歌詞を同期して表示
11 | - 無音部分を飛ばす
12 | - 音声を正規化
13 | - 動的なテーマ
14 | - 多言語対応
15 | - Android Auto に対応
16 | - あなたにおすすめの曲を提案
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ja/short_description.txt:
--------------------------------------------------------------------------------
1 | YouTube Musicから音楽をストリーミング再生するMaterial Designの音楽プレイヤー
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ko/full_description.txt:
--------------------------------------------------------------------------------
1 | Android용 Material 3 YouTube Music 클라이언트
2 |
3 |
기능
4 |
5 | - YT/YT Music의 곡을 광고 없이 재생
6 | - 백그라운드 재생
7 | - YouTube Music의 음악, 동영상, 앨범, 재생목록 검색
8 | - 보관함 관리
9 | - 오프라인 재생을 위해 음악 캐시 및 다운로드
10 | - 실시간 가사
11 | - 무음 구간 건너뛰기
12 | - 오디오 노멀라이즈
13 | - 동적 테마
14 | - 현지화
15 | - Android Auto 지원
16 | - 개인화된 추천
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ko/short_description.txt:
--------------------------------------------------------------------------------
1 | Android용 Material 3 YouTube Music 클라이언트
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/nl-NL/full_description.txt:
--------------------------------------------------------------------------------
1 | Een Material 3 YouTube Muziek-client voor Android
2 |
3 |
Functies:
4 |
5 | - Nummers van YT/YT Music afspelen zonder advertenties
6 | - Afspelen op achtergrond
7 | - Zoek nummers, video's, albums en afspeellijsten van YouTube Muziek
8 | - Bibliotheekbeheer
9 | - Nummers opslaan en downloaden voor offline afspelen
10 | - Gesynchroniseerde songteksten
11 | - Stilte overslaan
12 | - Audionormalisatie
13 | - Dynamisch thema
14 | - Lokalisatie
15 | - Android Auto ondersteuning
16 | - Gepersonaliseerde snelkeuzes
17 | - Materiaal 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/nl-NL/short_description.txt:
--------------------------------------------------------------------------------
1 | Een Material 3 YouTube Muziek-client voor Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/no-NO/full_description.txt:
--------------------------------------------------------------------------------
1 | En Material 3 YouTube Music-klient for Android
2 |
3 |
Funksjoner:
4 |
5 | - Spill sanger fra YouTube og YouTube Music uten reklame
6 | - Avspilling i bakgrunnen
7 | - Søk etter sanger, videoer, album, og spillelister fra YouTube Music
8 | - Bibliotekshåndtering
9 | - Hurtiglagring og lagring av sanger for frakoblet avspilling
10 | - Synkroniserte sangtekster
11 | - Hopp over stillhet
12 | - Audionormalisering
13 | - Dynamisk tema
14 | - Lokalisering
15 | - Støtte for Android Auto
16 | - Tilpassede hurtigvalg
17 | - Materiell 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/no-NO/short_description.txt:
--------------------------------------------------------------------------------
1 | En YouTube Music-klient i Materiell-3-stil for Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pa/short_description.txt:
--------------------------------------------------------------------------------
1 | ਇੱਕ ਮਟੀਰੀਅਲ ਡਿਜ਼ਾਈਨ ਵਾਲਾ ਯੂਟਿਊਬ ਮਿਊਜ਼ਕ ਕਲਾਈਂਟ
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl-PL/full_description.txt:
--------------------------------------------------------------------------------
1 | Aplikacja YouTube Music wykorzystująca Material 3
2 |
3 |
Funkcje:
4 |
5 | - Odtwarzanie piosenek z YouTube/YouTube Music bez reklam
6 | - Odtwarzanie w tle
7 | - Wyszukiwanie piosenek, filmów, albumów i playlist w YouTube Music
8 | - Zarządzanie biblioteką
9 | - Pobieranie i przechowywanie piosenek w pamięci podręcznej umożliwiające odtwarzanie offline
10 | - Zsynchronizowane wyświetlanie tekstów
11 | - Pomijanie ciszy
12 | - Normalizacja głośności
13 | - Dynamiczny wygląd
14 | - Obsługa wielu języków
15 | - Wsparcie dla Android Auto
16 | - Dopasowane rekomendacje
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl-PL/short_description.txt:
--------------------------------------------------------------------------------
1 | Aplikacja YouTube Music wykorzystująca Material 3
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/changelogs/19.txt:
--------------------------------------------------------------------------------
1 | - IU melhorada
2 | - Layout de grade para álbuns e playlists
3 | - Pequenas melhoras e correção de bugs
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/changelogs/23.txt:
--------------------------------------------------------------------------------
1 | - Suporte ao Discord RPC
2 | - Verificação de atualizações no app
3 | - Customização do alinhamento do texto do reprodutor
4 | - Downloads agora são excluídos do backup do Android
5 | - Corrigir um crash aleatório
6 | - Outras correções e melhorias
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/full_description.txt:
--------------------------------------------------------------------------------
1 | Um cliente do YouTube Music em Material 3 para Android
2 |
3 |
Recursos:
4 |
5 | - Toque músicas do YT/YT Music sem anúncios
6 | - Reprodução em segundo plano
7 | - Pesquise músicas, vídeos, álbuns, e playlists do YouTube Music
8 | - Gerenciamento de biblioteca
9 | - Download e cache de músicas para reprodução off-line
10 | - Letras sincronizadas
11 | - Pular o silêncio em músicas
12 | - Normalização do áudio
13 | - Tema dinâmico
14 | - Tradução (^^)
15 | - Suporte ao Android Auto
16 | - Escolhas rápidas personalizadas
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/short_description.txt:
--------------------------------------------------------------------------------
1 | Um cliente do YouTube Music em Material 3 para Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/title.txt:
--------------------------------------------------------------------------------
1 | InnerTune
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/full_description.txt:
--------------------------------------------------------------------------------
1 | Um reprodutor de música YouTube Music para Android
2 |
3 |
Funcionalidades:
4 |
5 | - Reprodução de músicas no YouTube/YouTube Music sem anúncios
6 | - Reprodução em segundo plano
7 | - Pesquisa de músicas, vídeos, álbuns e listas de reprodução direto de YT Music
8 | - Gestão de biblioteca
9 | - Descarga de músicas para reprodução offline
10 | - Letras sincronizadas
11 | - Ignorar silêncio em músicas
12 | - Normalização de áudio
13 | - Tema dinâmico
14 | - Localização
15 | - Suporte a Android Auto
16 | - Recomendações personalizadas
17 | - Interface Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/short_description.txt:
--------------------------------------------------------------------------------
1 | Cliente Android Material 3 para Youtube Music
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru-RU/full_description.txt:
--------------------------------------------------------------------------------
1 | Клиент YouTube Music для Android в стиле Material 3
2 |
3 |
Особенности:
4 |
5 | - Воспроизведение песен с YT/YT Music без рекламы
6 | - Фоновое воспроизведение
7 | - Поиск песен, видео, альбомов и плейлистов в YouTube Music
8 | - Управление библиотекой
9 | - Кэширование и загрузка песен для офлайн-воспроизведения
10 | - Синхронизированный текст песен
11 | - Пропуск тишины
12 | - Нормализация аудио
13 | - Динамическая тема
14 | - Локализация
15 | - Поддержка Android Auto
16 | - Персонализированные быстрые выборки
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru-RU/short_description.txt:
--------------------------------------------------------------------------------
1 | Клиент YouTube Music для Android в стиле Material 3
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru-RU/title.txt:
--------------------------------------------------------------------------------
1 | InnerTune
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/sr/full_description.txt:
--------------------------------------------------------------------------------
1 | Material 3 YouTube Music klijent za Android
2 |
3 |
Karakteristike.
4 |
5 | -Slušajte pesme sa YT/YT Music-a bez reklama
6 | -Slušajte u pozadini
7 | -Pretražujte pesme, videe, albume, i plejliste sa YouTube Music-a
8 | -Menadzment biblioteke
9 | -Keš i preuzete pesme za oflajn slušanje
10 | -Sinhronizovan tekst
11 | -Preskočite tišinu
12 | -Normalizacija zvuka
13 | -Dinamična tema
14 | -Lokalizacija
15 | -Podrška za Android Auto
16 | -Personalizovani brzi izbori
17 | -Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/sr/short_description.txt:
--------------------------------------------------------------------------------
1 | Material 3 YouTube Music klijent za Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/changelogs/11.txt:
--------------------------------------------------------------------------------
1 | Bu sürümde daha güçlü özelliklere sahip yeni bir kütüphane kullanıyoruz!
2 | *Her şeyi Youtube Music kullanıyor gibi kullanın.
3 | *Yeni çıkan müzikleri ve önerilenleri keşfetmek için yeni ana menü
4 | *Arama sonucu özet sekmesi
5 | *Yayın yükleme hızı arttırıldı
6 |
7 | *Kredi: vfsfitvnm/ViMusic, tombulled/innertube, zerodytrash/YouTube-Internal-Clients
8 |
9 | Not: 0.3.3 sürümünden güncelleyen kullanıcılar, thumbnail görüntülemek için lütfen kitaplığınızdaki tüm şarkıları seçin ve “Yeniden Getir” tuşuna basın.
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/changelogs/12.txt:
--------------------------------------------------------------------------------
1 | *Kütüphaneden, radyo özelliğini başlatma
2 | *Varsayılan başlangıç sekmesi
3 | *Ses kalitesi ayarı
4 | *Arama geçmişi durdurma ve temizleme
5 | *Yedekle ve geri yükle
6 | *SOCKS proxy desteği
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/changelogs/13.txt:
--------------------------------------------------------------------------------
1 | Müziğin ismi artık InnerTune oldu!
2 |
3 | -Oynatma arayüzü değiştirildi
4 | -Çalma sırası değiştirildi
5 | -Meraklısı için istatistikler
6 | -Kalıcı çalma sırası
7 | -Dahili oynatma listesi (beğenilenler, indirilenler)
8 | -Önbellek sınırı ayarlama
9 | -En son çalmaya göre sıralama
10 | -Navigasyon sekmelerini kişiselleştirme
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/changelogs/14.txt:
--------------------------------------------------------------------------------
1 | -Altyazılar
2 | -Android Auto desteği
3 | -Sessizliği atla özelliği
4 | -Ses normalleştirme özelliği
5 | -SAF üzerinden indirilen müzikleri dışa aktarma
6 | -Oynatıcı görüntüsünde geliştirmeler
7 | -Oynatıcıya uyanma kilidi ekle
8 | -Oynatıcı bildirimini gizleme ayarı
9 | -Yedek geri yüklendiğinde çalma listesindeki kalıcı müziği silme
10 | -Meraklısı için istatistiklerde itag eklendi
11 | -Diğer ufak değişikliler ve düzeltmeler
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/full_description.txt:
--------------------------------------------------------------------------------
1 | Android için bir Materyal 3 YouTube Müzik istemcisi
2 |
3 |
Özellikler:
4 |
5 | - YT/YT Müzik'teki şarkıları reklamsız dinleyin
6 | - Arka planda oynatma
7 | - YouTube Müzik'te şarkı, video, albüm ve çalma listesi arama
8 | - Kütüphane yönetimi
9 | - Çevrimdışı çalmak için şarkıları önbelleğe alma ve indirme
10 | - Senkronize şarkı sözleri
11 | - Sessizliği atlama
12 | - Ses normalleştirme
13 | - Dinamik tema
14 | - Yerelleştirme
15 | - Android Auto desteği
16 | - Kişiselleştirilmiş hızlı seçimler
17 | - Material 3 Tasarım
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/short_description.txt:
--------------------------------------------------------------------------------
1 | Android için bir Material 3 tasarımlı YouTube Müzik istemcisi
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk-UA/full_description.txt:
--------------------------------------------------------------------------------
1 | Клієнт YouTube Music для Android у стилі Material 3
2 |
3 | Особливості:
4 |
5 | - Відтворення пісень з YT/YT Music без реклами
6 | - Фонове відтворення
7 | - Пошук пісень, відео, альбомів та плейлистів в YouTube Music
8 | - Керування бібліотекою
9 | - Кешування та завантаження пісень для офлайн-відтворення
10 | - Синхронізований текст пісень
11 | - Пропуск тиші
12 | - Нормалізація аудіо
13 | - Динамічна тема
14 | - Локалізація
15 | - Підтримка Android Auto
16 | - Персоналізовані швидкі вибірки
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk-UA/short_description.txt:
--------------------------------------------------------------------------------
1 | Клієнт YouTube Music для Android у стилі Material 3
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk-UA/title.txt:
--------------------------------------------------------------------------------
1 | InnerTune
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/vi/full_description.txt:
--------------------------------------------------------------------------------
1 | Ứng dụng YouTube Music Material 3 dành cho Android
2 |
3 |
Tính năng:
4 |
5 | - Phát bài hát từ YT/YT Music không có quảng cáo
6 | - Phát lại trong nền
7 | - Tìm kiếm bài hát, video, album và danh sách phát từ YouTube Music
8 | - Quản lý thư viện
9 | - Bộ đệm và tải xuống bài hát để phát lại ngoại tuyến
10 | - Đồng bộ lời bài hát
11 | - Bỏ qua khoảng lặng
12 | - Chuẩn hóa âm lượng
13 | - Chủ đề động
14 | - Bản địa hóa
15 | - Hỗ trợ Android Auto
16 | - Chọn nhanh được cá nhân hóa
17 | - Material 3
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/vi/short_description.txt:
--------------------------------------------------------------------------------
1 | Ứng dụng YouTube Music Material 3 dành cho Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/full_description.txt:
--------------------------------------------------------------------------------
1 | 适用于 Android 的 YouTube Music 客户端,采用 Material 3 设计
2 |
3 |
特点:
4 |
5 | - 无广告播放 YouTube/YouTube Music 中的歌曲
6 | - 后台播放
7 | - 从 YouTube Music 搜索歌曲、视频、专辑和播放列表
8 | - 媒体库管理
9 | - 缓存和下载歌曲以供离线播放
10 | - 同步歌词
11 | - 跳过无声片段
12 | - 标准化音量
13 | - 动态主题
14 | - 良好的本地化
15 | - 支持 Android Auto
16 | - 个性化歌曲快选
17 | - Material 3 设计
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/short_description.txt:
--------------------------------------------------------------------------------
1 | 适用于 Android 的 YouTube Music 客户端,采用 Material 3 设计
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/title.txt:
--------------------------------------------------------------------------------
1 | InnerTune
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/full_description.txt:
--------------------------------------------------------------------------------
1 | 一個 YouTube Music 用戶端,使用 Material 3 風格
2 |
3 |
功能:
4 |
5 | - 無廣告播放 Youtube/Youtube Music 中的歌曲
6 | - 背景播放
7 | - 搜尋歌曲、影片、專輯和播放清單
8 | - 可下載並離線播放
9 | - 同步歌詞
10 | - 跳過無聲片段
11 | - 標準化音量
12 | - 動態主題
13 | - 支援 Android Auto
14 | - 個人化推薦曲目
15 | - Material 3 風格
16 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/short_description.txt:
--------------------------------------------------------------------------------
1 | 一個 YouTube Music 用戶端,使用 Material 3 設計
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/title.txt:
--------------------------------------------------------------------------------
1 | InnerTune
2 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/josprox/Joss-Music/835e83cab6e8d5563b629226d531883b32e04f9c/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Tue Oct 04 14:57:57 CST 2022
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/innertube/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/innertube/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | kotlin("jvm")
3 | @Suppress("DSL_SCOPE_VIOLATION")
4 | alias(libs.plugins.kotlin.serialization)
5 | }
6 |
7 | kotlin {
8 | jvmToolchain(17)
9 | }
10 |
11 | dependencies {
12 | implementation(libs.ktor.client.core)
13 | implementation(libs.ktor.client.okhttp)
14 | implementation(libs.ktor.client.content.negotiation)
15 | implementation(libs.ktor.serialization.json)
16 | implementation(libs.ktor.client.encoding)
17 | implementation(libs.brotli)
18 | implementation(libs.newpipe.extractor)
19 | testImplementation(libs.junit)
20 | }
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/AccountInfo.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | data class AccountInfo(
4 | val name: String,
5 | val email: String?,
6 | val channelHandle: String?,
7 | )
8 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/AutomixPreviewVideoRenderer.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class AutomixPreviewVideoRenderer(
7 | val content: Content,
8 | ) {
9 | @Serializable
10 | data class Content(
11 | val automixPlaylistVideoRenderer: AutomixPlaylistVideoRenderer,
12 | ) {
13 | @Serializable
14 | data class AutomixPlaylistVideoRenderer(
15 | val navigationEndpoint: NavigationEndpoint,
16 | )
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/Badges.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class Badges(
7 | val musicInlineBadgeRenderer: MusicInlineBadgeRenderer?,
8 | ) {
9 | @Serializable
10 | data class MusicInlineBadgeRenderer(
11 | val icon: Icon,
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/Button.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class Button(
7 | val buttonRenderer: ButtonRenderer,
8 | ) {
9 | @Serializable
10 | data class ButtonRenderer(
11 | val text: Runs,
12 | val navigationEndpoint: NavigationEndpoint?,
13 | val command: NavigationEndpoint?,
14 | val icon: Icon?,
15 | )
16 | }
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/Continuation.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.ExperimentalSerializationApi
4 | import kotlinx.serialization.Serializable
5 | import kotlinx.serialization.json.JsonNames
6 |
7 | @OptIn(ExperimentalSerializationApi::class)
8 | @Serializable
9 | data class Continuation(
10 | @JsonNames("nextContinuationData", "nextRadioContinuationData")
11 | val nextContinuationData: NextContinuationData?,
12 | ) {
13 | @Serializable
14 | data class NextContinuationData(
15 | val continuation: String,
16 | )
17 | }
18 |
19 | fun List.getContinuation() =
20 | firstOrNull()?.nextContinuationData?.continuation
21 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/ContinuationItemRenderer.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class ContinuationItemRenderer(
7 | val continuationEndpoint: ContinuationEndpoint?,
8 | ) {
9 | @Serializable
10 | data class ContinuationEndpoint(
11 | val continuationCommand: ContinuationCommand?,
12 | ) {
13 | @Serializable
14 | data class ContinuationCommand(
15 | val token: String?,
16 | )
17 | }
18 | }
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/GridRenderer.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class GridRenderer(
7 | val header: Header?,
8 | val items: List- ,
9 | val continuations: List?,
10 | ) {
11 | @Serializable
12 | data class Header(
13 | val gridHeaderRenderer: GridHeaderRenderer,
14 | ) {
15 | @Serializable
16 | data class GridHeaderRenderer(
17 | val title: Runs,
18 | )
19 | }
20 |
21 | @Serializable
22 | data class Item(
23 | val musicNavigationButtonRenderer: MusicNavigationButtonRenderer?,
24 | val musicTwoRowItemRenderer: MusicTwoRowItemRenderer?,
25 | )
26 | }
27 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/Icon.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class Icon(
7 | val iconType: String,
8 | )
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/MusicDescriptionShelfRenderer.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class MusicDescriptionShelfRenderer(
7 | val header: Runs?,
8 | val subheader: Runs?,
9 | val description: Runs,
10 | val footer: Runs?,
11 | )
12 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/MusicNavigationButtonRenderer.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class MusicNavigationButtonRenderer(
7 | val buttonText: Runs,
8 | val solid: Solid?,
9 | val iconStyle: IconStyle?,
10 | val clickCommand: NavigationEndpoint,
11 | ) {
12 | @Serializable
13 | data class Solid(
14 | val leftStripeColor: Long,
15 | )
16 |
17 | @Serializable
18 | data class IconStyle(
19 | val icon: Icon,
20 | )
21 | }
22 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/MusicPlaylistShelfRenderer.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class MusicPlaylistShelfRenderer(
7 | val playlistId: String?,
8 | val contents: List,
9 | val collapsedItemCount: Int,
10 | )
11 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/MusicQueueRenderer.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class MusicQueueRenderer(
7 | val content: Content?,
8 | val header: Header?,
9 | ) {
10 | @Serializable
11 | data class Content(
12 | val playlistPanelRenderer: PlaylistPanelRenderer,
13 | )
14 |
15 | @Serializable
16 | data class Header(
17 | val musicQueueHeaderRenderer: MusicQueueHeaderRenderer,
18 | )
19 | }
20 |
21 | @Serializable
22 | data class MusicQueueHeaderRenderer(
23 | val title: Runs,
24 | val subtitle: Runs,
25 | )
26 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/zionhuang/innertube/models/MusicResponsiveHeaderRenderer.kt:
--------------------------------------------------------------------------------
1 | package com.zionhuang.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class MusicResponsiveHeaderRenderer(
7 | val thumbnail: ThumbnailRenderer?,
8 | val buttons: List