├── .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