├── .editorconfig ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ └── android.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── app ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── contributors.json │ ├── images │ │ ├── daksh.png │ │ ├── haythem.jpg │ │ ├── hemanth.jpg │ │ ├── lenny.jpg │ │ ├── milind.png │ │ └── pratham.jpg │ ├── license.html │ └── retro-changelog.html │ ├── ic_launcher-playstore.png │ ├── ic_launcher-web.png │ ├── java │ └── ru │ │ └── stersh │ │ └── retrosonic │ │ ├── App.kt │ │ ├── Constants.kt │ │ ├── HomeSection.kt │ │ ├── LanguageContextWrapper.kt │ │ ├── MainModule.kt │ │ ├── SongExtension.kt │ │ ├── activities │ │ ├── DriveModeActivity.kt │ │ ├── ErrorActivity.kt │ │ ├── LicenseActivity.kt │ │ ├── LockScreenActivity.kt │ │ ├── PermissionActivity.kt │ │ ├── ShareInstagramStory.kt │ │ ├── SupportDevelopmentActivity.kt │ │ ├── WhatsNewFragment.kt │ │ ├── base │ │ │ ├── AbsBaseActivity.kt │ │ │ ├── AbsMusicServiceActivity.kt │ │ │ ├── AbsSlidingMusicPanelActivity.kt │ │ │ └── AbsThemeActivity.kt │ │ ├── bugreport │ │ │ ├── BugReportActivity.kt │ │ │ └── model │ │ │ │ ├── DeviceInfo.kt │ │ │ │ ├── Report.kt │ │ │ │ └── github │ │ │ │ ├── ExtraInfo.kt │ │ │ │ ├── GithubLogin.kt │ │ │ │ └── GithubTarget.kt │ │ └── saf │ │ │ └── SAFGuideActivity.java │ │ ├── adapter │ │ ├── CategoryInfoAdapter.kt │ │ ├── ContributorAdapter.kt │ │ ├── GenreAdapter.kt │ │ ├── SearchAdapter.kt │ │ ├── SongFileAdapter.kt │ │ ├── StorageAdapter.kt │ │ ├── album │ │ │ ├── AlbumAdapter.kt │ │ │ ├── AlbumCoverPagerAdapter.kt │ │ │ └── HorizontalAlbumAdapter.kt │ │ ├── artist │ │ │ └── ArtistAdapter.kt │ │ ├── backup │ │ │ └── BackupAdapter.kt │ │ ├── base │ │ │ ├── AbsMultiSelectAdapter.kt │ │ │ └── MediaEntryViewHolder.java │ │ ├── playlist │ │ │ ├── LegacyPlaylistAdapter.kt │ │ │ └── PlaylistAdapter.kt │ │ └── song │ │ │ ├── AbsOffsetSongAdapter.kt │ │ │ ├── OrderablePlaylistSongAdapter.kt │ │ │ ├── ShuffleButtonSongAdapter.kt │ │ │ ├── SimpleSongAdapter.kt │ │ │ └── SongAdapter.kt │ │ ├── appshortcuts │ │ ├── AppShortcutIconGenerator.kt │ │ ├── AppShortcutLauncherActivity.kt │ │ ├── DynamicShortcutManager.kt │ │ └── shortcuttype │ │ │ ├── BaseShortcutType.kt │ │ │ ├── LastAddedShortcutType.kt │ │ │ ├── ShuffleAllShortcutType.kt │ │ │ └── TopTracksShortcutType.kt │ │ ├── appwidgets │ │ ├── AppWidgetBig.kt │ │ ├── AppWidgetCard.kt │ │ ├── AppWidgetCircle.kt │ │ ├── AppWidgetClassic.kt │ │ ├── AppWidgetMD3.kt │ │ ├── AppWidgetSmall.kt │ │ ├── AppWidgetText.kt │ │ ├── BootReceiver.kt │ │ └── base │ │ │ └── BaseAppWidget.kt │ │ ├── dialogs │ │ ├── AddToPlaylistDialog.kt │ │ ├── BlacklistFolderChooserDialog.kt │ │ ├── CreatePlaylistDialog.kt │ │ ├── DeletePlaylistDialog.kt │ │ ├── DeleteSongsDialog.kt │ │ ├── ImportPlaylistDialog.kt │ │ ├── PlaybackSpeedDialog.kt │ │ ├── RemoveSongFromPlaylistDialog.kt │ │ ├── RenamePlaylistDialog.kt │ │ ├── SavePlaylistDialog.kt │ │ ├── SleepTimerDialog.kt │ │ ├── SongDetailDialog.kt │ │ └── SongShareDialog.kt │ │ ├── extensions │ │ ├── ActivityExtensions.kt │ │ ├── ActivityThemeExtensions.kt │ │ ├── ColorExtensions.kt │ │ ├── ContextExtensions.kt │ │ ├── CursorExtensions.kt │ │ ├── DialogExtension.kt │ │ ├── DimenExtension.kt │ │ ├── DrawableExtensions.kt │ │ ├── FileExtensions.kt │ │ ├── FragmentExtensions.kt │ │ ├── InsetsExtensions.kt │ │ ├── IntentExtensions.kt │ │ ├── NavigationExtensions.kt │ │ ├── PaletteExtensions.kt │ │ ├── PreferenceExtensions.kt │ │ ├── SongExtensions.kt │ │ └── ViewExtensions.kt │ │ ├── feature │ │ ├── details │ │ │ ├── album │ │ │ │ ├── Di.kt │ │ │ │ ├── data │ │ │ │ │ └── AlbumDetailsRepositoryImpl.kt │ │ │ │ ├── domain │ │ │ │ │ ├── AlbumDetails.kt │ │ │ │ │ └── AlbumDetailsRepository.kt │ │ │ │ └── presentation │ │ │ │ │ ├── AlbumDetailsFragment.kt │ │ │ │ │ ├── AlbumDetailsSongAdapter.kt │ │ │ │ │ ├── AlbumDetailsUi.kt │ │ │ │ │ └── AlbumDetailsViewModel.kt │ │ │ ├── artist │ │ │ │ ├── Di.kt │ │ │ │ ├── data │ │ │ │ │ └── ArtistDetailsRepositoryImpl.kt │ │ │ │ ├── domain │ │ │ │ │ ├── ArtistDetails.kt │ │ │ │ │ ├── ArtistDetailsAlbum.kt │ │ │ │ │ ├── ArtistDetailsRepository.kt │ │ │ │ │ └── ArtistDetailsSong.kt │ │ │ │ └── presentation │ │ │ │ │ ├── ArtistDetailsFragment.kt │ │ │ │ │ ├── ArtistDetailsViewModel.kt │ │ │ │ │ ├── adapter │ │ │ │ │ ├── ArtistDetailsAlbumAdapter.kt │ │ │ │ │ └── ArtistDetailsSongAdapter.kt │ │ │ │ │ └── entity │ │ │ │ │ ├── ArtistDetailsAlbumUi.kt │ │ │ │ │ ├── ArtistDetailsSongUi.kt │ │ │ │ │ └── ArtistDetailsUi.kt │ │ │ └── playlist │ │ │ │ ├── Di.kt │ │ │ │ ├── data │ │ │ │ └── PlaylistDetailsRepositoryImpl.kt │ │ │ │ ├── domain │ │ │ │ ├── PlaylistDetails.kt │ │ │ │ ├── PlaylistDetailsRepository.kt │ │ │ │ └── PlaylistSong.kt │ │ │ │ └── presentation │ │ │ │ ├── PlaylistDetailsFragment.kt │ │ │ │ ├── PlaylistDetailsSongAdapter.kt │ │ │ │ ├── PlaylistDetailsUi.kt │ │ │ │ ├── PlaylistDetailsViewModel.kt │ │ │ │ └── PlaylistSongUi.kt │ │ ├── library │ │ │ ├── album │ │ │ │ ├── Di.kt │ │ │ │ ├── data │ │ │ │ │ └── LibraryAlbumRepositoryImpl.kt │ │ │ │ ├── domain │ │ │ │ │ ├── LibraryAlbum.kt │ │ │ │ │ └── LibraryAlbumRepository.kt │ │ │ │ └── presentation │ │ │ │ │ ├── LibraryAlbumAdapter.kt │ │ │ │ │ ├── LibraryAlbumClickListener.kt │ │ │ │ │ ├── LibraryAlbumFragment.kt │ │ │ │ │ ├── LibraryAlbumUi.kt │ │ │ │ │ └── LibraryAlbumViewModel.kt │ │ │ ├── artist │ │ │ │ ├── Di.kt │ │ │ │ ├── data │ │ │ │ │ └── LibraryArtistRepositoryImpl.kt │ │ │ │ ├── domain │ │ │ │ │ ├── LibraryArtist.kt │ │ │ │ │ └── LibraryArtistRepository.kt │ │ │ │ └── presentation │ │ │ │ │ ├── LibraryArtistAdapter.kt │ │ │ │ │ ├── LibraryArtistClickListener.kt │ │ │ │ │ ├── LibraryArtistFragment.kt │ │ │ │ │ ├── LibraryArtistUi.kt │ │ │ │ │ └── LibraryArtistViewModel.kt │ │ │ └── playlist │ │ │ │ ├── Di.kt │ │ │ │ ├── data │ │ │ │ └── LibraryPlaylistRepositoryImpl.kt │ │ │ │ ├── domain │ │ │ │ ├── LibraryPlaylist.kt │ │ │ │ └── LibraryPlaylistRepository.kt │ │ │ │ └── presentation │ │ │ │ ├── LibraryPlaylistAdapter.kt │ │ │ │ ├── LibraryPlaylistFragment.kt │ │ │ │ ├── LibraryPlaylistUi.kt │ │ │ │ └── LibraryPlaylistViewModel.kt │ │ ├── main │ │ │ ├── Di.kt │ │ │ └── presentation │ │ │ │ ├── MainActivity.kt │ │ │ │ └── MainViewModel.kt │ │ ├── mylibrary │ │ │ ├── Di.kt │ │ │ ├── data │ │ │ │ ├── DiscoverAlbumsRepositoryImpl.kt │ │ │ │ └── UserRepositoryImpl.kt │ │ │ ├── domain │ │ │ │ ├── Album.kt │ │ │ │ ├── DiscoverAlbumsRepository.kt │ │ │ │ └── UserRepository.kt │ │ │ └── presentation │ │ │ │ ├── Delegates.kt │ │ │ │ ├── DiscoverItemUi.kt │ │ │ │ ├── MyLibraryBinding.kt │ │ │ │ ├── MyLibraryFragment.kt │ │ │ │ ├── MyLibraryViewModel.kt │ │ │ │ └── UserLayout.kt │ │ ├── player │ │ │ ├── Di.kt │ │ │ ├── controls │ │ │ │ └── presentation │ │ │ │ │ ├── PlayerPlaybackControlsFragment.kt │ │ │ │ │ ├── PlayerPlaybackControlsViewModel.kt │ │ │ │ │ ├── PlayerProgressUi.kt │ │ │ │ │ └── SongInfoUi.kt │ │ │ ├── cover │ │ │ │ ├── data │ │ │ │ │ └── CoverArtUrlsRepositoryImpl.kt │ │ │ │ ├── domain │ │ │ │ │ ├── CoverArtUrlList.kt │ │ │ │ │ └── CoverArtUrlsRepository.kt │ │ │ │ └── presentation │ │ │ │ │ ├── CoverArtUrlListUi.kt │ │ │ │ │ ├── PlayerAlbumCoverFragment.kt │ │ │ │ │ └── PlayerAlbumCoverViewModel.kt │ │ │ ├── main │ │ │ │ └── presentation │ │ │ │ │ ├── PlayerMainFragment.kt │ │ │ │ │ └── PlayerMainViewModel.kt │ │ │ └── mini │ │ │ │ ├── MiniPlayerFragment.kt │ │ │ │ ├── MiniPlayerViewModel.kt │ │ │ │ ├── SongInfoUi.kt │ │ │ │ └── SongProgressUi.kt │ │ ├── queue │ │ │ ├── Di.kt │ │ │ └── presentation │ │ │ │ ├── PlayingQueueAdapter.kt │ │ │ │ ├── PlayingQueueFragment.kt │ │ │ │ ├── PlayingQueueViewModel.kt │ │ │ │ └── QueueSongUi.kt │ │ └── settings │ │ │ ├── server │ │ │ ├── Di.kt │ │ │ ├── data │ │ │ │ ├── Mapper.kt │ │ │ │ └── ServerSettingsRepositoryImpl.kt │ │ │ ├── domain │ │ │ │ ├── ServerSettings.kt │ │ │ │ └── ServerSettingsRepository.kt │ │ │ └── presentation │ │ │ │ ├── Mapper.kt │ │ │ │ ├── MessageUi.kt │ │ │ │ ├── ServerSettingsActivity.kt │ │ │ │ ├── ServerSettingsUi.kt │ │ │ │ ├── ServerSettingsViewModel.kt │ │ │ │ ├── SubmitButtonStateUi.kt │ │ │ │ └── Validator.kt │ │ │ └── servers │ │ │ ├── Di.kt │ │ │ ├── data │ │ │ └── ServersRepositoryImpl.kt │ │ │ ├── domain │ │ │ ├── Server.kt │ │ │ └── ServersRepository.kt │ │ │ └── presentation │ │ │ ├── ServerUi.kt │ │ │ ├── ServersAdapter.kt │ │ │ ├── ServersFragment.kt │ │ │ └── ServersViewModel.kt │ │ ├── fragments │ │ ├── AlbumCoverStyle.kt │ │ ├── GridStyle.kt │ │ ├── LibraryViewModel.kt │ │ ├── MusicSeekSkipTouchListener.kt │ │ ├── about │ │ │ └── AboutFragment.kt │ │ ├── backup │ │ │ ├── BackupFragment.kt │ │ │ ├── BackupViewModel.kt │ │ │ └── RestoreActivity.kt │ │ ├── base │ │ │ ├── AbsMainActivityFragment.kt │ │ │ ├── AbsPlayerControlsFragment.kt │ │ │ ├── AbsPlayerFragment.kt │ │ │ ├── AbsRecyclerViewCustomGridSizeFragment.kt │ │ │ └── AbsRecyclerViewFragment.kt │ │ ├── folder │ │ │ └── FoldersFragment.kt │ │ ├── genres │ │ │ ├── GenreDetailsFragment.kt │ │ │ ├── GenreDetailsViewModel.kt │ │ │ └── GenresFragment.kt │ │ ├── library │ │ │ └── LibraryFragment.kt │ │ ├── lyrics │ │ │ └── LyricsFragment.kt │ │ ├── other │ │ │ ├── DetailListFragment.kt │ │ │ └── VolumeFragment.kt │ │ ├── player │ │ │ ├── CoverLyricsFragment.kt │ │ │ └── lockscreen │ │ │ │ └── LockScreenControlsFragment.kt │ │ ├── search │ │ │ └── SearchFragment.kt │ │ ├── settings │ │ │ ├── AbsSettingsFragment.kt │ │ │ ├── AudioSettings.kt │ │ │ ├── ImageSettingFragment.kt │ │ │ ├── MainSettingsFragment.kt │ │ │ ├── NotificationSettingsFragment.kt │ │ │ ├── NowPlayingSettingsFragment.kt │ │ │ ├── OtherSettingsFragment.kt │ │ │ ├── PersonalizeSettingsFragment.kt │ │ │ ├── SettingsFragment.kt │ │ │ └── ThemeSettingsFragment.kt │ │ └── songs │ │ │ └── SongsFragment.kt │ │ ├── glide │ │ ├── BlurTransformation.kt │ │ ├── RetroGlideExtension.kt │ │ ├── RetroMusicColoredTarget.kt │ │ ├── RetroMusicGlideModule.kt │ │ ├── SingleColorTarget.kt │ │ ├── artistimage │ │ │ ├── ArtistImage.kt │ │ │ ├── ArtistImageFetcher.kt │ │ │ └── ArtistImageLoader.kt │ │ ├── palette │ │ │ ├── BitmapPaletteResource.java │ │ │ ├── BitmapPaletteTarget.java │ │ │ ├── BitmapPaletteTranscoder.java │ │ │ └── BitmapPaletteWrapper.java │ │ └── playlistPreview │ │ │ ├── PlaylistPreview.kt │ │ │ ├── PlaylistPreviewFetcher.kt │ │ │ └── PlaylistPreviewLoader.kt │ │ ├── helper │ │ ├── BackupHelper.kt │ │ ├── HorizontalAdapterHelper.kt │ │ ├── M3UConstants.java │ │ ├── M3UWriter.kt │ │ ├── MusicProgressViewUpdateHelper.kt │ │ ├── PlayPauseButtonOnClickHandler.kt │ │ ├── SearchQueryHelper.kt │ │ ├── ShuffleHelper.kt │ │ ├── SortOrder.kt │ │ ├── StackBlur.java │ │ ├── StopWatch.kt │ │ ├── WallpaperAccentManager.kt │ │ └── menu │ │ │ ├── GenreMenuHelper.kt │ │ │ ├── PlaylistMenuHelper.kt │ │ │ ├── SongMenuHelper.kt │ │ │ └── SongsMenuHelper.kt │ │ ├── interfaces │ │ ├── IAlbumArtistClickListener.kt │ │ ├── IAlbumClickListener.kt │ │ ├── IArtistClickListener.kt │ │ ├── ICallbacks.kt │ │ ├── IGenreClickListener.kt │ │ ├── IHomeClickListener.kt │ │ ├── IMainActivityFragmentCallbacks.kt │ │ ├── IPaletteColorHolder.kt │ │ ├── IPlaylistClickListener.kt │ │ └── IScrollHelper.kt │ │ ├── lyrics │ │ ├── CoverLrcView.kt │ │ ├── Lrc.java │ │ ├── LrcEntry.java │ │ ├── LrcUtils.java │ │ └── LrcView.java │ │ ├── misc │ │ ├── CustomFragmentStatePagerAdapter.java │ │ ├── SimpleOnSeekbarChangeListener.kt │ │ ├── UpdateToastMediaScannerCompletionListener.java │ │ └── WrappedAsyncTaskLoader.kt │ │ ├── model │ │ ├── AbsCustomPlaylist.kt │ │ ├── Album.kt │ │ ├── Artist.kt │ │ ├── ArtworkInfo.kt │ │ ├── CategoryInfo.kt │ │ ├── Contributor.kt │ │ ├── DeezerResponse.kt │ │ ├── Genre.kt │ │ ├── Home.kt │ │ ├── Playlist.kt │ │ ├── PlaylistSong.kt │ │ ├── Song.kt │ │ ├── lyrics │ │ │ ├── AbsSynchronizedLyrics.java │ │ │ ├── Lyrics.java │ │ │ └── SynchronizedLyricsLRC.java │ │ └── smartplaylist │ │ │ ├── AbsSmartPlaylist.kt │ │ │ ├── HistoryPlaylist.kt │ │ │ ├── LastAddedPlaylist.kt │ │ │ ├── NotPlayedPlaylist.kt │ │ │ ├── PlaylistIdGenerator.kt │ │ │ ├── ShuffleAllPlaylist.kt │ │ │ └── TopTracksPlaylist.kt │ │ ├── network │ │ ├── DeezerService.kt │ │ ├── LastFMService.kt │ │ ├── LyricsRestService.kt │ │ ├── Result.kt │ │ ├── RetrofitClient.kt │ │ ├── conversion │ │ │ └── LyricsConverterFactory.kt │ │ └── model │ │ │ ├── LastFmAlbum.java │ │ │ ├── LastFmArtist.java │ │ │ └── LastFmTrack.java │ │ ├── preferences │ │ ├── AlbumCoverStylePreferenceDialog.kt │ │ ├── DurationPreference.kt │ │ └── LibraryPreference.kt │ │ ├── providers │ │ ├── HistoryStore.java │ │ ├── MusicPlaybackQueueStore.java │ │ └── SongPlayCountStore.java │ │ ├── repository │ │ ├── AlbumRepository.kt │ │ ├── ArtistRepository.kt │ │ ├── GenreRepository.kt │ │ ├── LastAddedSongsRepository.kt │ │ ├── LocalDataRepository.kt │ │ ├── PlaylistRepository.kt │ │ ├── PlaylistSongsLoader.kt │ │ ├── RealSearchRepository.kt │ │ ├── Repository.kt │ │ ├── RoomRepository.kt │ │ ├── SongRepository.kt │ │ ├── SortedCursor.java │ │ ├── SortedLongCursor.java │ │ └── TopPlayedRepository.kt │ │ ├── service │ │ └── MediaButtonIntentReceiver.kt │ │ ├── transform │ │ ├── CarousalPagerTransformer.kt │ │ ├── CascadingPageTransformer.kt │ │ ├── DefaultTransformer.kt │ │ ├── DepthTransformation.kt │ │ ├── HingeTransformation.kt │ │ ├── HorizontalFlipTransformation.kt │ │ ├── NormalPageTransformer.kt │ │ ├── ParallaxPagerTransformer.kt │ │ ├── VerticalFlipTransformation.kt │ │ └── VerticalStackTransformer.kt │ │ ├── util │ │ ├── ArtistSignatureUtil.kt │ │ ├── AutoGeneratedPlaylistBitmap.kt │ │ ├── CalendarUtil.kt │ │ ├── ColorUtil.java │ │ ├── CustomArtistImageUtil.kt │ │ ├── DensityUtil.kt │ │ ├── Extensions.kt │ │ ├── FilePathUtil.kt │ │ ├── FileUtil.java │ │ ├── FileUtils.kt │ │ ├── ImageUtil.java │ │ ├── LogUtil.kt │ │ ├── LyricUtil.kt │ │ ├── MergedImageUtils.kt │ │ ├── MusicUtil.kt │ │ ├── NavigationUtil.kt │ │ ├── PackageValidator.kt │ │ ├── PlagiarismUtil.kt │ │ ├── PlaylistsUtil.kt │ │ ├── PreferenceUtil.kt │ │ ├── RetroColorUtil.java │ │ ├── RetroUtil.kt │ │ ├── RingtoneManager.kt │ │ ├── SAFUtil.java │ │ ├── Share.kt │ │ ├── SwipeAndDragHelper.java │ │ ├── TempUtils.java │ │ ├── ThemedFastScroller.kt │ │ ├── UriUtil.kt │ │ ├── ViewUtil.kt │ │ ├── color │ │ │ ├── ImageUtils.java │ │ │ ├── MediaNotificationProcessor.java │ │ │ └── NotificationColorUtil.java │ │ └── theme │ │ │ ├── ThemeManager.kt │ │ │ └── ThemeMode.kt │ │ ├── views │ │ ├── AccentIcon.kt │ │ ├── BaselineGridTextView.java │ │ ├── BreadCrumbLayout.java │ │ ├── ColorIconsImageView.kt │ │ ├── DrawableGradient.java │ │ ├── HeightFitSquareLayout.kt │ │ ├── ListItemView.kt │ │ ├── LollipopFixedWebView.kt │ │ ├── NumberRollView.kt │ │ ├── PermissionItem.kt │ │ ├── PopupBackground.java │ │ ├── RetroShapeableImageView.kt │ │ ├── ScrollingViewOnApplyWindowInsetsListener.java │ │ ├── SettingListItemView.kt │ │ ├── StatusBarView.kt │ │ ├── TintedBottomNavigationView.kt │ │ ├── TintedNavigationRailView.kt │ │ ├── TopAppBarLayout.kt │ │ ├── VerticalTextView.kt │ │ ├── WidthFitSquareCardView.kt │ │ ├── WidthFitSquareLayout.kt │ │ └── insets │ │ │ ├── InsetsConstraintLayout.kt │ │ │ └── InsetsRecyclerView.kt │ │ └── volume │ │ ├── AudioVolumeContentObserver.kt │ │ ├── AudioVolumeObserver.kt │ │ └── OnAudioVolumeChangedListener.kt │ └── res │ ├── anim │ ├── layout_anim_fade.xml │ ├── retro_fragment_close_enter.xml │ ├── retro_fragment_close_exit.xml │ ├── retro_fragment_fast_out_extra_slow_in.xml │ ├── retro_fragment_open_enter.xml │ └── retro_fragment_open_exit.xml │ ├── drawable-anydpi-v24 │ └── ic_notification.xml │ ├── drawable-hdpi │ ├── default_album_art.webp │ ├── default_artist_art.webp │ ├── default_audio_art.webp │ └── ic_notification.png │ ├── drawable-mdpi │ ├── default_album_art.webp │ ├── default_artist_art.webp │ ├── default_audio_art.webp │ └── ic_notification.png │ ├── drawable-night-hdpi │ ├── default_album_art.webp │ ├── default_artist_art.webp │ └── default_audio_art.webp │ ├── drawable-night-mdpi │ ├── default_album_art.webp │ ├── default_artist_art.webp │ └── default_audio_art.webp │ ├── drawable-night-xhdpi │ ├── default_album_art.webp │ ├── default_artist_art.webp │ └── default_audio_art.webp │ ├── drawable-night-xxhdpi │ ├── default_album_art.webp │ ├── default_artist_art.webp │ └── default_audio_art.webp │ ├── drawable-night-xxxhdpi │ ├── default_album_art.webp │ ├── default_artist_art.webp │ └── default_audio_art.webp │ ├── drawable-v26 │ ├── saf_guide_1.webp │ ├── saf_guide_2.webp │ └── saf_guide_3.webp │ ├── drawable-xhdpi │ ├── default_album_art.webp │ ├── default_artist_art.webp │ ├── default_audio_art.webp │ └── ic_notification.png │ ├── drawable-xxhdpi │ ├── default_album_art.webp │ ├── default_artist_art.webp │ ├── default_audio_art.webp │ └── ic_notification.png │ ├── drawable-xxxhdpi │ ├── default_album_art.webp │ ├── default_artist_art.webp │ ├── default_audio_art.webp │ ├── ic_notification.png │ ├── ic_splash.png │ ├── np_adaptive.webp │ ├── np_blur_card.webp │ ├── np_circle.webp │ ├── np_flat.webp │ ├── np_full.webp │ └── np_normal.webp │ ├── drawable │ ├── app_widget_background.xml │ ├── artist_card_gradient_effect.xml │ ├── asld_album.xml │ ├── asld_artist.xml │ ├── asld_face.xml │ ├── asld_folder.xml │ ├── asld_guitar.xml │ ├── asld_music_note.xml │ ├── asld_playlist.xml │ ├── avd_album.xml │ ├── avd_artist.xml │ ├── avd_face.xml │ ├── avd_folder.xml │ ├── avd_guitar.xml │ ├── avd_music_note.xml │ ├── avd_playlist.xml │ ├── avd_splash.xml │ ├── card.xml │ ├── circle_widget_background.xml │ ├── color_circle_gradient.xml │ ├── color_progress_seek.xml │ ├── ic_account.xml │ ├── ic_album.xml │ ├── ic_app_shortcut_background.xml │ ├── ic_app_shortcut_last_added.xml │ ├── ic_app_shortcut_shuffle_all.xml │ ├── ic_app_shortcut_top_tracks.xml │ ├── ic_arrow_back.xml │ ├── ic_arrow_forward.xml │ ├── ic_artist.xml │ ├── ic_audio_file.xml │ ├── ic_audiotrack.xml │ ├── ic_backup.xml │ ├── ic_bluetooth_connect.xml │ ├── ic_blur_on.xml │ ├── ic_bug_report.xml │ ├── ic_car.xml │ ├── ic_check_circle.xml │ ├── ic_clear_all.xml │ ├── ic_close.xml │ ├── ic_colorize.xml │ ├── ic_dashboard.xml │ ├── ic_delete.xml │ ├── ic_drag_vertical.xml │ ├── ic_edit.xml │ ├── ic_equalizer.xml │ ├── ic_expand_less.xml │ ├── ic_face.xml │ ├── ic_favorite.xml │ ├── ic_favorite_border.xml │ ├── ic_file_edit.xml │ ├── ic_filter_song.xml │ ├── ic_flag.xml │ ├── ic_folder.xml │ ├── ic_fullscreen.xml │ ├── ic_gift.xml │ ├── ic_github_circle.xml │ ├── ic_grid_size.xml │ ├── ic_guitar.xml │ ├── ic_hdr_strong.xml │ ├── ic_help.xml │ ├── ic_history.xml │ ├── ic_home.xml │ ├── ic_image.xml │ ├── ic_info_outline.xml │ ├── ic_instagram.xml │ ├── ic_keyboard.xml │ ├── ic_keyboard_arrow_down.xml │ ├── ic_keyboard_arrow_right.xml │ ├── ic_kofi.xml │ ├── ic_language.xml │ ├── ic_launcher_foreground.xml │ ├── ic_library_add.xml │ ├── ic_library_music.xml │ ├── ic_license.xml │ ├── ic_lyrics.xml │ ├── ic_lyrics_outline.xml │ ├── ic_mic.xml │ ├── ic_more_vert.xml │ ├── ic_notification_classic.xml │ ├── ic_notifications_active.xml │ ├── ic_palette.xml │ ├── ic_palette_outline.xml │ ├── ic_pause.xml │ ├── ic_pause_white_64dp.xml │ ├── ic_paypal.xml │ ├── ic_phonelink_ring.xml │ ├── ic_pinterest.xml │ ├── ic_play_arrow.xml │ ├── ic_play_arrow_white_32dp.xml │ ├── ic_play_circle_filled.xml │ ├── ic_playback_speed.xml │ ├── ic_playlist_add.xml │ ├── ic_playlist_play.xml │ ├── ic_playlist_remove.xml │ ├── ic_queue_music.xml │ ├── ic_redo.xml │ ├── ic_refresh.xml │ ├── ic_repeat.xml │ ├── ic_restore.xml │ ├── ic_save.xml │ ├── ic_sd_storage.xml │ ├── ic_search.xml │ ├── ic_select_all.xml │ ├── ic_send.xml │ ├── ic_settings.xml │ ├── ic_settings_brightness.xml │ ├── ic_share.xml │ ├── ic_shuffle.xml │ ├── ic_skip_next.xml │ ├── ic_skip_previous.xml │ ├── ic_sleep_timer.xml │ ├── ic_sort.xml │ ├── ic_star.xml │ ├── ic_storage.xml │ ├── ic_telegram_white.xml │ ├── ic_testing.xml │ ├── ic_trending_up.xml │ ├── ic_twitter.xml │ ├── ic_view_carousel.xml │ ├── ic_volume_down.xml │ ├── ic_volume_off.xml │ ├── ic_volume_up.xml │ ├── ic_website.xml │ ├── instagram_story_background.xml │ ├── lyrics_mask.xml │ ├── popup_background.xml │ ├── rect_selector.xml │ ├── retro_you_icon.xml │ ├── round_selector.xml │ ├── round_selector_mask.xml │ ├── rounded_drawable.xml │ ├── saf_guide_1.webp │ ├── saf_guide_2.webp │ ├── saf_guide_3.webp │ ├── shadow_down_strong.xml │ ├── shadow_up.xml │ ├── shadow_up_down.xml │ ├── shadow_up_edited.xml │ ├── shadow_up_home.xml │ ├── shadow_up_strong.xml │ ├── sld_lyrics.xml │ ├── splash.xml │ ├── switch_thumb_material.xml │ ├── widget_big_info.webp │ ├── widget_button_background.xml │ ├── widget_card_info.webp │ ├── widget_classic.webp │ ├── widget_selector.xml │ ├── widget_selector_dark.xml │ ├── widget_selector_light.xml │ ├── widget_small.webp │ └── widget_text.webp │ ├── font │ ├── manrope.xml │ ├── manrope_bold.ttf │ ├── manrope_extrabold.ttf │ ├── manrope_extralight.ttf │ ├── manrope_light.ttf │ ├── manrope_medium.ttf │ ├── manrope_regular.ttf │ └── manrope_semibold.ttf │ ├── layout-land │ ├── activity_drive_mode.xml │ ├── fragment_album_details.xml │ ├── fragment_artist_details.xml │ ├── fragment_home.xml │ ├── fragment_player.xml │ └── sliding_music_panel_layout.xml │ ├── layout-sw600dp │ ├── fragment_playing_queue.xml │ ├── item_list.xml │ ├── item_list_big.xml │ └── item_queue.xml │ ├── layout-xlarge │ └── fragment_about_content.xml │ ├── layout │ ├── abs_playlists.xml │ ├── activity_bug_report.xml │ ├── activity_donation.xml │ ├── activity_drive_mode.xml │ ├── activity_license.xml │ ├── activity_lock_screen.xml │ ├── activity_permission.xml │ ├── activity_restore.xml │ ├── activity_server_settings.xml │ ├── activity_share_instagram.xml │ ├── app_widget_big.xml │ ├── app_widget_card.xml │ ├── app_widget_circle.xml │ ├── app_widget_classic.xml │ ├── app_widget_md3.xml │ ├── app_widget_small.xml │ ├── app_widget_text.xml │ ├── bread_crumb.xml │ ├── bug_report_card_device_info.xml │ ├── card_credit.xml │ ├── card_other.xml │ ├── card_retro_info.xml │ ├── card_social.xml │ ├── collapsing_appbar_layout.xml │ ├── dialog_file_details.xml │ ├── dialog_playback_speed.xml │ ├── dialog_playlist.xml │ ├── dialog_sleep_timer.xml │ ├── fragment_about.xml │ ├── fragment_about_content.xml │ ├── fragment_album_card_cover.xml │ ├── fragment_album_carousel_cover.xml │ ├── fragment_album_circle_cover.xml │ ├── fragment_album_content.xml │ ├── fragment_album_cover.xml │ ├── fragment_album_details.xml │ ├── fragment_album_flat_cover.xml │ ├── fragment_album_full_card_cover.xml │ ├── fragment_album_full_cover.xml │ ├── fragment_artist_content.xml │ ├── fragment_artist_details.xml │ ├── fragment_backup.xml │ ├── fragment_cover_lyrics.xml │ ├── fragment_folder.xml │ ├── fragment_genre_detail.xml │ ├── fragment_home.xml │ ├── fragment_library.xml │ ├── fragment_lock_screen_playback_controls.xml │ ├── fragment_lyrics.xml │ ├── fragment_main_recycler.xml │ ├── fragment_main_settings.xml │ ├── fragment_mini_player.xml │ ├── fragment_player.xml │ ├── fragment_player_album_cover.xml │ ├── fragment_player_playback_controls.xml │ ├── fragment_playing_queue.xml │ ├── fragment_playlist_content.xml │ ├── fragment_playlist_detail.xml │ ├── fragment_search.xml │ ├── fragment_servers.xml │ ├── fragment_settings.xml │ ├── fragment_simple_slide_large_image.xml │ ├── fragment_volume.xml │ ├── fragment_whats_new.xml │ ├── home_content.xml │ ├── image.xml │ ├── item_album_card.xml │ ├── item_artist.xml │ ├── item_artist_card.xml │ ├── item_artist_square.xml │ ├── item_card.xml │ ├── item_card_color.xml │ ├── item_contributor.xml │ ├── item_contributor_header.xml │ ├── item_discover_album.xml │ ├── item_favourite_card.xml │ ├── item_genre.xml │ ├── item_grid.xml │ ├── item_grid_circle.xml │ ├── item_image.xml │ ├── item_image_gradient.xml │ ├── item_list.xml │ ├── item_list_backup.xml │ ├── item_list_big.xml │ ├── item_list_quick_actions.xml │ ├── item_list_server.xml │ ├── item_permission.xml │ ├── item_queue.xml │ ├── item_section.xml │ ├── item_song.xml │ ├── item_storage.xml │ ├── item_suggestions.xml │ ├── list_item_color_view.xml │ ├── list_item_view.xml │ ├── list_item_view_no_card.xml │ ├── list_item_view_no_title.xml │ ├── list_item_view_seekbar.xml │ ├── list_item_view_switch.xml │ ├── list_item_view_switch_no_title.xml │ ├── list_setting_item_view.xml │ ├── loading.xml │ ├── number_roll_view.xml │ ├── preference_category_title.xml │ ├── preference_dialog_audio_fade.xml │ ├── preference_dialog_library_categories.xml │ ├── preference_dialog_library_categories_listitem.xml │ ├── preference_dialog_now_playing_screen.xml │ ├── preference_now_playing_screen_item.xml │ ├── section_recycler_view.xml │ ├── shadow_statusbar_toolbar.xml │ ├── simple_appbar_layout.xml │ ├── sliding_music_panel_layout.xml │ ├── status_bar.xml │ ├── sub_header.xml │ └── user_image_layout.xml │ ├── menu │ ├── bottom_navigation_main.xml │ ├── menu_album_detail.xml │ ├── menu_artist_detail.xml │ ├── menu_artist_song_sort_order.xml │ ├── menu_backup.xml │ ├── menu_clear_history.xml │ ├── menu_genre_detail.xml │ ├── menu_item_directory.xml │ ├── menu_item_file.xml │ ├── menu_item_playing_queue_song.xml │ ├── menu_item_playlist.xml │ ├── menu_item_playlist_song.xml │ ├── menu_item_song.xml │ ├── menu_lyrics.xml │ ├── menu_main.xml │ ├── menu_media_selection.xml │ ├── menu_player.xml │ ├── menu_playlist_detail.xml │ ├── menu_playlists_selection.xml │ ├── menu_playlists_songs_selection.xml │ └── menu_server.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── navigation │ ├── library_graph.xml │ ├── main_graph.xml │ └── settings_graph.xml │ ├── values-ar-rSA │ └── strings.xml │ ├── values-b+es+419 │ └── strings.xml │ ├── values-cs-rCZ │ └── strings.xml │ ├── values-da-rDK │ └── strings.xml │ ├── values-de-rDE │ └── strings.xml │ ├── values-el-rGR │ └── strings.xml │ ├── values-en-rUS │ └── strings.xml │ ├── values-es-rES │ └── strings.xml │ ├── values-es-rUS │ └── strings.xml │ ├── values-eu-rES │ └── strings.xml │ ├── values-fa-rIR │ └── strings.xml │ ├── values-fil-rPH │ └── strings.xml │ ├── values-fr-rFR │ └── strings.xml │ ├── values-hi-rIN │ └── strings.xml │ ├── values-hr-rHR │ └── strings.xml │ ├── values-hu-rHU │ └── strings.xml │ ├── values-in-rID │ └── strings.xml │ ├── values-it-rIT │ └── strings.xml │ ├── values-ja-rJP │ └── strings.xml │ ├── values-kmr-rTR │ └── strings.xml │ ├── values-kn-rIN │ └── strings.xml │ ├── values-ko-rKR │ └── strings.xml │ ├── values-land │ └── integers.xml │ ├── values-lv-rLV │ └── strings.xml │ ├── values-ml-rIN │ └── strings.xml │ ├── values-my-rMM │ └── strings.xml │ ├── values-night-v27 │ └── styles.xml │ ├── values-night-v31 │ └── styles.xml │ ├── values-night │ ├── colors_md3.xml │ └── themes.xml │ ├── values-nl-rNL │ └── strings.xml │ ├── values-pl-rPL │ └── strings.xml │ ├── values-pt-rBR │ └── strings.xml │ ├── values-pt-rPT │ └── strings.xml │ ├── values-ro-rRO │ └── strings.xml │ ├── values-ru-rRU │ └── strings.xml │ ├── values-sr-rSP │ └── strings.xml │ ├── values-sv-rSE │ └── strings.xml │ ├── values-sw600dp │ └── integers.xml │ ├── values-ta-rIN │ └── strings.xml │ ├── values-te-rIN │ └── strings.xml │ ├── values-th-rTH │ └── strings.xml │ ├── values-tr-rTR │ └── strings.xml │ ├── values-uk-rUA │ └── strings.xml │ ├── values-v23 │ ├── bools.xml │ ├── dimens.xml │ └── styles.xml │ ├── values-v26 │ └── bools.xml │ ├── values-v27 │ ├── bools.xml │ └── styles_parents.xml │ ├── values-v31 │ ├── bools.xml │ ├── colors.xml │ ├── integers.xml │ └── styles.xml │ ├── values-vi-rVN │ └── strings.xml │ ├── values-xlarge │ └── dimens.xml │ ├── values-zh-rCN │ └── strings.xml │ ├── values-zh-rHK │ └── strings.xml │ ├── values-zh-rTW │ └── strings.xml │ ├── values │ ├── arrays.xml │ ├── attrs.xml │ ├── baseline_textview_attrs.xml │ ├── bools.xml │ ├── circular_image_view_attrs.xml │ ├── color_icon_view_attrs.xml │ ├── colors.xml │ ├── colors_md3.xml │ ├── contributor_attrs.xml │ ├── dimens.xml │ ├── donottranslate.xml │ ├── ic_launcher_background.xml │ ├── ids.xml │ ├── integers.xml │ ├── list_item_view.xml │ ├── list_setting_item_view.xml │ ├── lrc_colors.xml │ ├── lrc_dimens.xml │ ├── lrc_view_attrs.xml │ ├── permission_item.xml │ ├── seekarc_attrs.xml │ ├── shapeable_imageview.xml │ ├── strings.xml │ ├── styles.xml │ ├── themes.xml │ └── values.xml │ └── xml │ ├── app_widget_big_info.xml │ ├── app_widget_card_info.xml │ ├── app_widget_circle_info.xml │ ├── app_widget_classic_info.xml │ ├── app_widget_md3_info.xml │ ├── app_widget_small_info.xml │ ├── app_widget_text.xml │ ├── automotive_app_desc.xml │ ├── pref_advanced.xml │ ├── pref_audio.xml │ ├── pref_general.xml │ ├── pref_images.xml │ ├── pref_notification.xml │ ├── pref_now_playing_screen.xml │ ├── pref_ui.xml │ └── provider_paths.xml ├── appthemehelper ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── code │ │ └── name │ │ └── monkey │ │ └── appthemehelper │ │ ├── ATH.kt │ │ ├── ATHActivity.kt │ │ ├── ColorPalette.kt │ │ ├── ThemeStore.kt │ │ ├── ThemeStoreInterface.kt │ │ ├── ThemeStorePrefKeys.kt │ │ ├── common │ │ ├── ATHActionBarActivity.kt │ │ ├── ATHToolbarActivity.java │ │ ├── prefs │ │ │ ├── ATEColorPreference.kt │ │ │ ├── BorderCircleView.kt │ │ │ └── supportv7 │ │ │ │ ├── ATEColorPreference.kt │ │ │ │ ├── ATEDialogPreference.kt │ │ │ │ ├── ATEListPreference.kt │ │ │ │ ├── ATEPreference.kt │ │ │ │ ├── ATEPreferenceCategory.kt │ │ │ │ ├── ATEPreferenceFragmentCompat.java │ │ │ │ ├── ATESeekBarPreference.kt │ │ │ │ ├── ATESwitchPreference.kt │ │ │ │ └── dialogs │ │ │ │ ├── ATEListPreferenceDialogFragmentCompat.java │ │ │ │ └── ATEPreferenceDialogFragment.java │ │ └── views │ │ │ ├── ATEAccentTextView.kt │ │ │ └── ATESwitch.kt │ │ └── util │ │ ├── ATHUtil.kt │ │ ├── ColorUtil.kt │ │ ├── MaterialUtil.kt │ │ ├── MaterialValueHelper.kt │ │ ├── TextInputLayoutUtil.kt │ │ ├── TintHelper.java │ │ ├── ToolbarContentTintHelper.java │ │ ├── VersionUtils.kt │ │ └── ViewUtil.kt │ └── res │ ├── drawable │ └── ate_check.xml │ ├── layout │ ├── ate_preference_color.xml │ └── ate_preference_switch_support.xml │ ├── values-large │ └── dimens.xml │ ├── values-night-v31 │ └── colors.xml │ ├── values-v31 │ └── colors.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── colors_material_design.xml │ ├── dimens.xml │ └── strings.xml ├── build.gradle ├── buildscripts ├── android-library.gradle ├── spotless.gradle ├── spotless.license └── toml-updater-config.gradle ├── core ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── ru │ └── stersh │ └── retrosonic │ └── core │ └── extensions │ ├── Coroutines.kt │ └── Flow.kt ├── crowdin.yml ├── fastlane └── metadata │ └── android │ └── en-US │ ├── changelogs │ └── 10597.txt │ ├── full_description.txt │ ├── images │ ├── logo.png │ └── phoneScreenshots │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ ├── 3.jpg │ │ ├── 4.jpg │ │ ├── 5.jpg │ │ ├── 6.jpg │ │ ├── 7.jpg │ │ └── 8.jpg │ └── short_description.txt ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── player ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── ru │ └── stersh │ └── retrosonic │ └── player │ ├── Di.kt │ ├── android │ ├── ApiSonicPlayQueueSyncer.kt │ └── MusicService.kt │ ├── controls │ ├── PlayerControls.kt │ └── data │ │ └── PlayerControlsImpl.kt │ ├── metadata │ ├── CurrentSongInfoStore.kt │ ├── SongInfo.kt │ └── impl │ │ └── CurrentSongInfoStoreImpl.kt │ ├── progress │ ├── PlayerProgress.kt │ ├── PlayerProgressStore.kt │ └── impl │ │ ├── PlayerProgressStoreImpl.kt │ │ └── ScrobbleSender.kt │ ├── queue │ ├── AudioSource.kt │ ├── PlayerQueueAudioSourceManager.kt │ ├── PlayerQueueManager.kt │ └── impl │ │ ├── PlayerQueueAudioSourceManagerImpl.kt │ │ └── PlayerQueueManagerImpl.kt │ ├── state │ ├── PlayStateStore.kt │ └── data │ │ └── PlayStateStoreImpl.kt │ └── utils │ ├── Mapper.kt │ ├── MediaItemExtras.kt │ └── PlayerExtensions.kt ├── provider ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── ru │ └── stersh │ └── apisonic │ └── provider │ ├── Di.kt │ └── apisonic │ ├── ApiSonicProvider.kt │ ├── NoActiveServerSettingsFound.kt │ └── impl │ └── ApiSonicProviderImpl.kt ├── screenshots ├── adaptive.jpg ├── blur.jpg ├── classic.jpg ├── color.jpg ├── fit.jpg ├── flat.jpg ├── material.jpg ├── peak.jpg ├── peek.jpg ├── playlists.jpg ├── synced_over_black.jpg ├── synced_over_dark.jpg ├── synced_over_light.jpg ├── synced_replace_black.jpg ├── synced_replace_dark.jpg ├── synced_replace_light.jpg └── tiny.jpg ├── settings.gradle └── source ├── apisonic ├── .github │ └── workflows │ │ └── main.yml ├── .gitignore ├── README.md ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle.kts └── src │ └── main │ ├── AndroidManifest.xml │ └── kotlin │ └── ru │ └── stersh │ └── apisonic │ ├── ApiSonic.kt │ ├── ApiSonicError.kt │ ├── LogLevel.kt │ ├── Security.kt │ ├── Status.kt │ ├── interfaces │ └── Api.kt │ ├── models │ ├── Album.kt │ ├── AlbumList.kt │ ├── Artist.kt │ ├── ArtistInfo.kt │ ├── Artists.kt │ ├── Error.kt │ ├── Genre.kt │ ├── Indexes.kt │ ├── ListType.kt │ ├── MusicDirectory.kt │ ├── MusicFolders.kt │ ├── NowPlaying.kt │ ├── PlayQueue.kt │ ├── Playlists.kt │ ├── Rating.kt │ ├── Scan.kt │ ├── Search.kt │ ├── Search2.kt │ ├── Search3.kt │ ├── Song.kt │ ├── Starred.kt │ ├── SubsonicResponse.kt │ ├── VideoInfo.kt │ └── Videos.kt │ └── network │ ├── AuthenticationInterceptor.kt │ ├── ErrorInterceptor.kt │ └── NetworkFactory.kt └── room ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src └── main ├── AndroidManifest.xml └── java └── ru └── stersh └── apisonic └── room ├── Di.kt ├── RetroDatabase.kt ├── history ├── HistoryDao.kt └── HistoryEntity.kt ├── lyrics ├── LyricsDao.kt └── LyricsEntity.kt ├── playcount ├── PlayCountDao.kt └── PlayCountEntity.kt ├── playlist ├── PlaylistDao.kt ├── PlaylistEntity.kt ├── PlaylistWithSongs.kt └── SongEntity.kt └── serversettings ├── ServerSettingsDao.kt └── ServerSettingsEntity.kt /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.{kt,kts}] 4 | ktlint_code_style = official 5 | ktlint_standard = disabled 6 | ktlint_standart_trailing-comma-on-call-site = disabled 7 | insert_final_newline = true 8 | ij_kotlin_allow_trailing_comma = true 9 | ij_kotlin_allow_trailing_comma_on_call_site = true 10 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | 3 | *.bat text eol=crlf 4 | *.jar binary 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project. Please write in English only. 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/android.yml: -------------------------------------------------------------------------------- 1 | name: Android CI 2 | 3 | on: 4 | push: 5 | branches: [ dev ] 6 | pull_request: 7 | branches: [ dev ] 8 | 9 | jobs: 10 | check: 11 | runs-on: ubuntu-latest 12 | timeout-minutes: 10 13 | steps: 14 | - uses: actions/checkout@v3 15 | - uses: gradle/wrapper-validation-action@v1 16 | - uses: actions/setup-java@v3 17 | with: 18 | distribution: 'zulu' 19 | java-version: 17 20 | - uses: gradle/gradle-build-action@v2 21 | - name: Lint Android 22 | run: ./gradlew spotlessCheck 23 | 24 | build: 25 | runs-on: ubuntu-latest 26 | steps: 27 | - uses: actions/checkout@v3 28 | - uses: actions/setup-java@v3 29 | with: 30 | java-version: '17' 31 | distribution: 'zulu' 32 | - uses: gradle/gradle-build-action@v2 33 | - name: Build 34 | run: ./gradlew app:assemble 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # files for the dex VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # generated files 12 | bin/ 13 | gen/ 14 | 15 | # Local configuration file (sdk path, etc) 16 | local.properties 17 | 18 | # Windows thumbnail db 19 | Thumbs.db 20 | 21 | # OSX files 22 | .DS_Store 23 | 24 | # Eclipse project files 25 | .classpath 26 | .project 27 | 28 | # Android Studio 29 | *.iml 30 | .idea/* 31 | !.idea/codeStyles/codeStyleConfig.xml 32 | #.idea/workspace.xml - remove # and delete .idea if it better suit your needs. 33 | .gradle 34 | build/ 35 | 36 | #NDK 37 | obj/ 38 | 39 | captures 40 | app/normal/release/ 41 | /models/ 42 | /app/release/ 43 | -------------------------------------------------------------------------------- /app/src/main/assets/images/daksh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/assets/images/daksh.png -------------------------------------------------------------------------------- /app/src/main/assets/images/haythem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/assets/images/haythem.jpg -------------------------------------------------------------------------------- /app/src/main/assets/images/hemanth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/assets/images/hemanth.jpg -------------------------------------------------------------------------------- /app/src/main/assets/images/lenny.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/assets/images/lenny.jpg -------------------------------------------------------------------------------- /app/src/main/assets/images/milind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/assets/images/milind.png -------------------------------------------------------------------------------- /app/src/main/assets/images/pratham.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/assets/images/pratham.jpg -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/activities/bugreport/model/github/GithubTarget.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.activities.bugreport.model.github 16 | 17 | class GithubTarget(val username: String, val repository: String) 18 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/extensions/FileExtensions.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.extensions 16 | 17 | import java.io.BufferedOutputStream 18 | import java.util.zip.ZipOutputStream 19 | 20 | fun BufferedOutputStream.zipOutputStream(): ZipOutputStream = ZipOutputStream(this) 21 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/extensions/PreferenceExtensions.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.extensions 16 | 17 | import android.content.SharedPreferences 18 | 19 | fun SharedPreferences.getStringOrDefault(key: String, default: String): String { 20 | return getString(key, default) ?: default 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/details/album/domain/AlbumDetailsRepository.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.details.album.domain 16 | 17 | import kotlinx.coroutines.flow.Flow 18 | 19 | interface AlbumDetailsRepository { 20 | fun getAlbumDetails(id: String): Flow 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/details/artist/domain/ArtistDetailsAlbum.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.details.artist.domain 16 | 17 | data class ArtistDetailsAlbum( 18 | val id: String, 19 | val title: String, 20 | val artist: String, 21 | val coverArtUrl: String, 22 | val year: Int, 23 | ) 24 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/details/playlist/domain/PlaylistDetails.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.details.playlist.domain 16 | 17 | data class PlaylistDetails( 18 | val title: String, 19 | val coverArtUrl: String, 20 | val songCount: Int, 21 | val duration: Long, 22 | ) 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/details/playlist/presentation/PlaylistDetailsUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.details.playlist.presentation 16 | 17 | data class PlaylistDetailsUi( 18 | val title: String, 19 | val coverArtUrl: String, 20 | val songCount: Int, 21 | val duration: Long, 22 | ) 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/album/domain/LibraryAlbum.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.album.domain 16 | 17 | data class LibraryAlbum( 18 | val id: String, 19 | val title: String, 20 | val artist: String, 21 | val coverUrl: String?, 22 | val year: Int, 23 | ) 24 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/album/domain/LibraryAlbumRepository.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.album.domain 16 | 17 | import kotlinx.coroutines.flow.Flow 18 | 19 | interface LibraryAlbumRepository { 20 | fun getAlbums(): Flow> 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/album/presentation/LibraryAlbumClickListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.album.presentation 16 | 17 | import android.view.View 18 | 19 | interface LibraryAlbumClickListener { 20 | fun onAlbumClick(albumId: String, view: View) 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/album/presentation/LibraryAlbumUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.album.presentation 16 | 17 | data class LibraryAlbumUi( 18 | val id: String, 19 | val title: String, 20 | val artist: String, 21 | val coverUrl: String?, 22 | val year: Int, 23 | ) 24 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/artist/domain/LibraryArtist.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.artist.domain 16 | 17 | data class LibraryArtist( 18 | val id: String, 19 | val title: String, 20 | val coverArtUrl: String, 21 | ) 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/artist/domain/LibraryArtistRepository.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.artist.domain 16 | 17 | import kotlinx.coroutines.flow.Flow 18 | 19 | interface LibraryArtistRepository { 20 | fun getArtists(): Flow> 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/artist/presentation/LibraryArtistClickListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.artist.presentation 16 | 17 | import android.view.View 18 | 19 | interface LibraryArtistClickListener { 20 | fun onArtist(artistId: String, view: View) 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/artist/presentation/LibraryArtistUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.artist.presentation 16 | 17 | data class LibraryArtistUi( 18 | val id: String, 19 | val title: String, 20 | val coverArtUrl: String, 21 | ) 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/playlist/domain/LibraryPlaylist.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.playlist.domain 16 | 17 | data class LibraryPlaylist( 18 | val id: String, 19 | val title: String, 20 | val coverArtUrl: String, 21 | val songCount: Int, 22 | val duration: Long, 23 | ) 24 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/playlist/domain/LibraryPlaylistRepository.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.playlist.domain 16 | 17 | import kotlinx.coroutines.flow.Flow 18 | 19 | interface LibraryPlaylistRepository { 20 | fun getPlaylists(): Flow> 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/library/playlist/presentation/LibraryPlaylistUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.library.playlist.presentation 16 | 17 | data class LibraryPlaylistUi( 18 | val id: String, 19 | val title: String, 20 | val coverArtUrl: String, 21 | val songCount: Int, 22 | val duration: Long, 23 | ) 24 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/mylibrary/domain/Album.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.mylibrary.domain 16 | 17 | internal data class Album( 18 | val id: String, 19 | val title: String, 20 | val coverUrl: String? 21 | ) 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/mylibrary/domain/UserRepository.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.mylibrary.domain 16 | 17 | import kotlinx.coroutines.flow.Flow 18 | 19 | internal interface UserRepository { 20 | fun getUsername(): Flow 21 | fun getAvatarUrl(): Flow 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/player/controls/presentation/PlayerProgressUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.player.controls.presentation 16 | 17 | data class PlayerProgressUi( 18 | val total: String, 19 | val current: String, 20 | val totalMs: Long, 21 | val currentMs: Long, 22 | ) 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/player/controls/presentation/SongInfoUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.player.controls.presentation 16 | 17 | data class SongInfoUi( 18 | val title: String?, 19 | val artist: String?, 20 | ) 21 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/player/cover/domain/CoverArtUrlList.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.player.cover.domain 16 | 17 | data class CoverArtUrlList( 18 | val list: List, 19 | val selectedPosition: Int, 20 | ) 21 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/player/cover/domain/CoverArtUrlsRepository.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.player.cover.domain 16 | 17 | import kotlinx.coroutines.flow.Flow 18 | 19 | interface CoverArtUrlsRepository { 20 | fun getCoverArtUrls(): Flow 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/player/cover/presentation/CoverArtUrlListUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.player.cover.presentation 16 | 17 | data class CoverArtUrlListUi( 18 | val list: List, 19 | val selectedPosition: Int, 20 | ) 21 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/player/mini/SongInfoUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.player.mini 16 | 17 | data class SongInfoUi( 18 | val title: String?, 19 | val artist: String?, 20 | val coverArtUrl: String?, 21 | ) 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/player/mini/SongProgressUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.player.mini 16 | 17 | data class SongProgressUi( 18 | val total: Long, 19 | val current: Long, 20 | ) 21 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/settings/server/presentation/MessageUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.settings.server.presentation 16 | 17 | internal enum class MessageUi { SUCCESS_TEST_SERVER } 18 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/settings/server/presentation/SubmitButtonStateUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.settings.server.presentation 16 | 17 | internal enum class SubmitButtonStateUi { SAVE, TEST, TESTING } 18 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/settings/servers/domain/Server.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.settings.servers.domain 16 | 17 | internal data class Server( 18 | val id: Long, 19 | val title: String, 20 | val url: String, 21 | val isActive: Boolean, 22 | ) 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/feature/settings/servers/presentation/ServerUi.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.feature.settings.servers.presentation 16 | 17 | internal data class ServerUi( 18 | val id: Long, 19 | val title: String, 20 | val url: String, 21 | val isActive: Boolean, 22 | ) 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/helper/M3UConstants.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.helper; 16 | 17 | public interface M3UConstants { 18 | String EXTENSION = "m3u"; 19 | String HEADER = "#EXTM3U"; 20 | String ENTRY = "#EXTINF:"; 21 | String DURATION_SEPARATOR = ","; 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/interfaces/IAlbumArtistClickListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.interfaces 16 | 17 | import android.view.View 18 | 19 | interface IAlbumArtistClickListener { 20 | fun onAlbumArtist(artistName: String, view: View) 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/interfaces/IAlbumClickListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.interfaces 16 | 17 | import android.view.View 18 | 19 | interface IAlbumClickListener { 20 | fun onAlbumClick(albumId: String, view: View) 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/interfaces/IArtistClickListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.interfaces 16 | 17 | import android.view.View 18 | 19 | interface IArtistClickListener { 20 | fun onArtist(artistId: Long, view: View) 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/interfaces/IGenreClickListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.interfaces 16 | 17 | import android.view.View 18 | import ru.stersh.retrosonic.model.Genre 19 | 20 | interface IGenreClickListener { 21 | fun onClickGenre(genre: Genre, view: View) 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/interfaces/IMainActivityFragmentCallbacks.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.interfaces 16 | 17 | /** 18 | * Created by hemanths on 14/08/17. 19 | */ 20 | interface IMainActivityFragmentCallbacks { 21 | fun handleBackPress(): Boolean 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/interfaces/IPaletteColorHolder.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.interfaces 16 | 17 | 18 | interface IPaletteColorHolder { 19 | val paletteColor: Int 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/interfaces/IPlaylistClickListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.interfaces 16 | 17 | import android.view.View 18 | 19 | interface IPlaylistClickListener { 20 | fun onPlaylistClick(playlistWithSongs: ru.stersh.apisonic.room.playlist.PlaylistWithSongs, view: View) 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/interfaces/IScrollHelper.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.interfaces 16 | 17 | interface IScrollHelper { 18 | fun scrollToTop() 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/model/ArtworkInfo.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.model 16 | 17 | import android.graphics.Bitmap 18 | 19 | class ArtworkInfo constructor(val albumId: Long, val artwork: Bitmap?) 20 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/model/Genre.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.model 16 | 17 | import android.os.Parcelable 18 | import kotlinx.parcelize.Parcelize 19 | 20 | @Parcelize 21 | data class Genre( 22 | val id: Long, 23 | val name: String, 24 | val songCount: Int, 25 | ) : Parcelable 26 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/model/Home.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.model 16 | 17 | import androidx.annotation.StringRes 18 | import ru.stersh.retrosonic.HomeSection 19 | 20 | data class Home( 21 | val arrayList: List, 22 | @HomeSection 23 | val homeSection: Int, 24 | @StringRes 25 | val titleRes: Int, 26 | ) 27 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/transform/DefaultTransformer.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.transform 16 | 17 | import android.view.View 18 | import androidx.viewpager.widget.ViewPager 19 | 20 | class DefaultTransformer : ViewPager.PageTransformer { 21 | override fun transformPage(page: View, position: Float) {} 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/util/theme/ThemeMode.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.util.theme 16 | 17 | enum class ThemeMode { 18 | LIGHT, 19 | DARK, 20 | BLACK, 21 | AUTO, 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/ru/stersh/retrosonic/volume/OnAudioVolumeChangedListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.volume 16 | 17 | interface OnAudioVolumeChangedListener { 18 | fun onAudioVolumeChanged(currentVolume: Int, maxVolume: Int) 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/res/anim/layout_anim_fade.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/retro_fragment_fast_out_extra_slow_in.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v24/ic_notification.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/default_album_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-hdpi/default_album_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/default_artist_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-hdpi/default_artist_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/default_audio_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-hdpi/default_audio_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-hdpi/ic_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/default_album_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-mdpi/default_album_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/default_artist_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-mdpi/default_artist_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/default_audio_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-mdpi/default_audio_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-mdpi/ic_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-hdpi/default_album_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-hdpi/default_album_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-hdpi/default_artist_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-hdpi/default_artist_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-hdpi/default_audio_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-hdpi/default_audio_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-mdpi/default_album_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-mdpi/default_album_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-mdpi/default_artist_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-mdpi/default_artist_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-mdpi/default_audio_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-mdpi/default_audio_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xhdpi/default_album_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-xhdpi/default_album_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xhdpi/default_artist_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-xhdpi/default_artist_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xhdpi/default_audio_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-xhdpi/default_audio_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxhdpi/default_album_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-xxhdpi/default_album_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxhdpi/default_artist_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-xxhdpi/default_artist_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxhdpi/default_audio_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-xxhdpi/default_audio_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxxhdpi/default_album_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-xxxhdpi/default_album_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxxhdpi/default_artist_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-xxxhdpi/default_artist_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxxhdpi/default_audio_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-night-xxxhdpi/default_audio_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-v26/saf_guide_1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-v26/saf_guide_1.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-v26/saf_guide_2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-v26/saf_guide_2.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-v26/saf_guide_3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-v26/saf_guide_3.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/default_album_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xhdpi/default_album_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/default_artist_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xhdpi/default_artist_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/default_audio_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xhdpi/default_audio_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xhdpi/ic_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/default_album_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxhdpi/default_album_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/default_artist_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxhdpi/default_artist_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/default_audio_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxhdpi/default_audio_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxhdpi/ic_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/default_album_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/default_album_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/default_artist_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/default_artist_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/default_audio_art.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/default_audio_art.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/ic_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/ic_splash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/np_adaptive.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/np_adaptive.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/np_blur_card.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/np_blur_card.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/np_circle.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/np_circle.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/np_flat.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/np_flat.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/np_full.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/np_full.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/np_normal.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable-xxxhdpi/np_normal.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/app_widget_background.xml: -------------------------------------------------------------------------------- 1 | 5 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/asld_album.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/asld_artist.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 10 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/asld_face.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 10 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/asld_folder.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/asld_guitar.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/asld_music_note.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/asld_playlist.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 10 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_widget_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/color_circle_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_album.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_app_shortcut_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_app_shortcut_last_added.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_app_shortcut_shuffle_all.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_app_shortcut_top_tracks.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_forward.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_artist.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_audiotrack.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_clear_all.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_colorize.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_edit.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_equalizer.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_expand_less.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_face.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_favorite.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_file_edit.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_flag.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_folder.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_image.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_instagram.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard_arrow_down.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard_arrow_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_license.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lyrics.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lyrics_outline.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_mic.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notification_classic.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pause_white_64dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_playlist_add.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_playlist_play.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_playlist_remove.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_redo.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_restore.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_save.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_select_all.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_send.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_skip_next.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_skip_previous.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sort.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_storage.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_telegram_white.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_trending_up.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_twitter.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view_carousel.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_volume_down.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_website.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/lyrics_mask.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/popup_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_selector.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_selector_mask.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_drawable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/saf_guide_1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable/saf_guide_1.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/saf_guide_2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable/saf_guide_2.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/saf_guide_3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable/saf_guide_3.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/shadow_down_strong.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shadow_up.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shadow_up_edited.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shadow_up_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shadow_up_strong.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/sld_lyrics.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/switch_thumb_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_big_info.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable/widget_big_info.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_button_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_card_info.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable/widget_card_info.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_classic.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable/widget_classic.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_selector_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_selector_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_small.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable/widget_small.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_text.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/drawable/widget_text.webp -------------------------------------------------------------------------------- /app/src/main/res/font/manrope.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/font/manrope_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/font/manrope_bold.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/manrope_extrabold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/font/manrope_extrabold.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/manrope_extralight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/font/manrope_extralight.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/manrope_light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/font/manrope_light.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/manrope_medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/font/manrope_medium.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/manrope_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/font/manrope_regular.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/manrope_semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/font/manrope_semibold.ttf -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_about_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 15 | 16 | 19 | 20 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_section.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/preference_dialog_now_playing_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/status_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/sub_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_artist_detail.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 13 | 14 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_artist_song_sort_order.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 10 | 13 | 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_backup.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_clear_history.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_genre_detail.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 11 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_lyrics.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_server.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values-land/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 0 4 | 1 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-night-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors_md3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @color/elevationOverlayDark 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-sw600dp/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 4 | 6 5 | 6 | 2 7 | 3 8 | 9 | 6 10 | 8 11 | 1 12 | 1 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values-v23/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-v23/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 24dp 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-v23/styles.xml: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/values-v26/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-v27/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-v31/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | true 5 | 6 | false 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @android:color/system_accent1_50 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-v31/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 0 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-xlarge/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 64dp 3 | 64dp 4 | 72dp 5 | 16dp 6 | 80dp 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | false 5 | 6 | true 7 | 8 | false 9 | false 10 | 11 | true 12 | false 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values/circular_image_view_attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #34000000 5 | #607d8b 6 | #f5f5f5 7 | #3D5AFE 8 | 9 | #202124 10 | #202124 11 | 12 | #dddddd 13 | 14 | #000000 15 | 16 | #00000000 17 | #20000000 18 | 19 | #ffffff 20 | #d4d4d4 21 | #dddddd 22 | 23 | @color/lighterColorSurface 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors_md3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @color/md_grey_500 4 | @color/md_grey_500 5 | @color/elevationOverlayLight 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 2 4 | 4 5 | 6 | 1 7 | 2 8 | 9 | 4 10 | 6 11 | 12 | 1 13 | 0 14 | 15 | 2 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/values/lrc_colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #9E9E9E 4 | #FF4081 5 | #F8BBD0 6 | #809E9E9E 7 | #809E9E9E 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/lrc_dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1000 4 | 20sp 5 | 16sp 6 | 16dp 7 | 1dp 8 | 30dp 9 | 40dp 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/permission_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/shapeable_imageview.xml: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/values/values.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | album_art_transition 4 | album_art_transition 5 | album_art_transition 6 | artist_image_transition 7 | artist_image_transition 8 | artist_image_transition 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/xml/app_widget_big_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/xml/app_widget_card_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/xml/app_widget_circle_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/xml/app_widget_classic_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/xml/app_widget_md3_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/xml/app_widget_small_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/xml/app_widget_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/xml/automotive_app_desc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/xml/provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /appthemehelper/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | apply plugin: 'kotlin-android' 3 | android { 4 | compileSdk 32 5 | namespace "code.name.monkey.appthemehelper" 6 | 7 | defaultConfig { 8 | minSdk 21 9 | targetSdk 32 10 | } 11 | buildTypes { 12 | release { 13 | minifyEnabled true 14 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 15 | } 16 | } 17 | lint { 18 | abortOnError false 19 | } 20 | } 21 | 22 | dependencies { 23 | implementation(libs.appcompat) 24 | implementation(libs.material) 25 | implementation(libs.androidx.preferences) 26 | } 27 | -------------------------------------------------------------------------------- /appthemehelper/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /appthemehelper/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/ATHActionBarActivity.kt: -------------------------------------------------------------------------------- 1 | package code.name.monkey.appthemehelper.common 2 | 3 | import androidx.appcompat.widget.Toolbar 4 | 5 | import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper 6 | 7 | class ATHActionBarActivity : ATHToolbarActivity() { 8 | 9 | override fun getATHToolbar(): Toolbar? { 10 | return ToolbarContentTintHelper.getSupportActionBarView(supportActionBar) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/views/ATESwitch.kt: -------------------------------------------------------------------------------- 1 | package code.name.monkey.appthemehelper.common.views 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import androidx.core.view.isVisible 6 | import code.name.monkey.appthemehelper.ATH 7 | import code.name.monkey.appthemehelper.ThemeStore 8 | import com.google.android.material.materialswitch.MaterialSwitch 9 | 10 | 11 | class ATESwitch @JvmOverloads constructor( 12 | context: Context, 13 | attrs: AttributeSet? = null, 14 | defStyleAttr: Int = -1, 15 | ) : MaterialSwitch(context, attrs, defStyleAttr) { 16 | 17 | init { 18 | if (!isInEditMode && !ThemeStore.isMD3Enabled(context)) { 19 | ATH.setTint(this, ThemeStore.accentColor(context)) 20 | } 21 | } 22 | 23 | override fun isShown(): Boolean { 24 | return parent != null && isVisible 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ATHUtil.kt: -------------------------------------------------------------------------------- 1 | package code.name.monkey.appthemehelper.util 2 | 3 | import android.content.Context 4 | import android.graphics.Color 5 | import androidx.annotation.AttrRes 6 | import androidx.core.content.res.use 7 | import java.lang.Exception 8 | 9 | 10 | object ATHUtil { 11 | 12 | fun isWindowBackgroundDark(context: Context): Boolean { 13 | return !ColorUtil.isColorLight(resolveColor(context, android.R.attr.windowBackground)) 14 | } 15 | 16 | @JvmOverloads 17 | fun resolveColor(context: Context, @AttrRes attr: Int, fallback: Int = 0): Int { 18 | context.theme.obtainStyledAttributes(intArrayOf(attr)).use { 19 | return try { 20 | it.getColor(0, fallback) 21 | } catch (e: Exception) { 22 | Color.BLACK 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ViewUtil.kt: -------------------------------------------------------------------------------- 1 | package code.name.monkey.appthemehelper.util 2 | 3 | import android.graphics.drawable.Drawable 4 | import android.view.View 5 | import android.view.ViewTreeObserver 6 | 7 | object ViewUtil { 8 | fun removeOnGlobalLayoutListener(v: View, listener: ViewTreeObserver.OnGlobalLayoutListener) { 9 | v.viewTreeObserver.removeOnGlobalLayoutListener(listener) 10 | } 11 | 12 | fun setBackgroundCompat(view: View, drawable: Drawable?) { 13 | view.background = drawable 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /appthemehelper/src/main/res/drawable/ate_check.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /appthemehelper/src/main/res/layout/ate_preference_color.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /appthemehelper/src/main/res/layout/ate_preference_switch_support.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /appthemehelper/src/main/res/values-large/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /appthemehelper/src/main/res/values-night-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @android:color/system_accent1_200 4 | @android:color/system_accent1_500 5 | -------------------------------------------------------------------------------- /appthemehelper/src/main/res/values-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @android:color/system_accent1_600 4 | @android:color/system_accent1_50 5 | 6 | -------------------------------------------------------------------------------- /appthemehelper/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1dp 5 | 6 | -------------------------------------------------------------------------------- /appthemehelper/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | appthemehelper 3 | 4 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | alias(libs.plugins.android.application) apply false 3 | alias(libs.plugins.android.library) apply false 4 | alias(libs.plugins.kotlin.android) apply false 5 | alias(libs.plugins.kotlin.kapt) apply false 6 | alias(libs.plugins.kotlin.parcelize) apply false 7 | alias(libs.plugins.androidx.navigation.safeargs) apply false 8 | alias(libs.plugins.spotless) apply false 9 | alias(libs.plugins.toml.updater) 10 | alias(libs.plugins.toml.checker) 11 | } 12 | 13 | task clean(type: Delete) { 14 | delete rootProject.buildDir 15 | } -------------------------------------------------------------------------------- /buildscripts/android-library.gradle: -------------------------------------------------------------------------------- 1 | android { 2 | compileSdkVersion 33 3 | defaultConfig { 4 | minSdkVersion 21 5 | targetSdkVersion 33 6 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 7 | } 8 | buildTypes { 9 | release { 10 | minifyEnabled false 11 | proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" 12 | } 13 | } 14 | buildFeatures { 15 | viewBinding true 16 | } 17 | } -------------------------------------------------------------------------------- /buildscripts/spotless.license: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ -------------------------------------------------------------------------------- /buildscripts/toml-updater-config.gradle: -------------------------------------------------------------------------------- 1 | versionCatalogUpdate { 2 | pin { 3 | versions = ["kotlin"] 4 | } 5 | keep { 6 | keepUnusedVersions = true 7 | keepUnusedLibraries = true 8 | keepUnusedPlugins = true 9 | } 10 | } 11 | 12 | def isNonStable = { String version -> 13 | def stableKeyword = ['RELEASE', 'FINAL', 'GA'].any { it -> version.toUpperCase().contains(it) } 14 | def regex = /^[0-9,.v-]+(-r)?$/ 15 | return !stableKeyword && !(version ==~ regex) 16 | } 17 | 18 | tasks.named("dependencyUpdates").configure { 19 | resolutionStrategy { 20 | componentSelection { 21 | all { 22 | if (isNonStable(it.candidate.version) && !isNonStable(it.currentVersion)) { 23 | reject('Release candidate') 24 | } 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /core/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /core/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | alias(libs.plugins.android.library) 3 | alias(libs.plugins.kotlin.android) 4 | alias(libs.plugins.spotless) 5 | } 6 | 7 | apply from: "${project.rootDir}/buildscripts/spotless.gradle" 8 | apply from: "${project.rootDir}/buildscripts/android-library.gradle" 9 | 10 | android { 11 | namespace 'ru.stersh.retrosonic.core' 12 | } 13 | 14 | dependencies { 15 | implementation project(':source:apisonic') 16 | 17 | implementation(libs.kotlin.coroutines.android) 18 | implementation(libs.bundles.koin) 19 | } 20 | -------------------------------------------------------------------------------- /core/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/core/consumer-rules.pro -------------------------------------------------------------------------------- /core/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /core/src/main/java/ru/stersh/retrosonic/core/extensions/Coroutines.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.core.extensions 16 | 17 | import kotlinx.coroutines.CoroutineScope 18 | import kotlinx.coroutines.Dispatchers 19 | import kotlinx.coroutines.SupervisorJob 20 | 21 | val ApplicationScope = CoroutineScope(SupervisorJob() + Dispatchers.IO) 22 | -------------------------------------------------------------------------------- /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 | content_segmentation: 0 5 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/10597.txt: -------------------------------------------------------------------------------- 1 | Added lyrics downloading -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | Retro Sonic Player 🎵 2 | 3 | 📦 Included Features 4 |
    5 |
  • Base 3 themes (Clearly White, Kinda Dark and Just Black)
  • 6 |
  • Material You support on Android 12+
  • 7 |
  • Gapless playback
  • 8 |
  • Crossfade playback
  • 9 |
  • Choose from 10+ now playing themes
  • 10 |
  • Android auto support
  • 11 |
  • Wallpaper accent picker on Android 8.1+
  • 12 |
  • Home screen widgets
  • 13 |
  • Lock screen playback controls
  • 14 |
  • Sleep timer
  • 15 |
  • Easy drag to sort playlist & play queue
  • 16 |
  • Tag editor
  • 17 |
  • Create, edit and import playlists
  • 18 |
  • Browse and play your music by songs, albums, artists, playlists and genre
  • 19 |
  • Smart Auto Playlists - Recently played, most played and history
  • 20 |
-------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/fastlane/metadata/android/en-US/images/logo.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/fastlane/metadata/android/en-US/images/phoneScreenshots/7.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/fastlane/metadata/android/en-US/images/phoneScreenshots/8.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Material You Design Music player for Android -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | android.injected.testOnly=false 2 | android.useAndroidX=true 3 | kapt.verbose=true 4 | kotlin.code.style=official 5 | org.gradle.caching=true 6 | org.gradle.configureondemand=true 7 | org.gradle.jvmargs=-Xmx4g -XX:+UseParallelGC -Dfile.encoding=UTF-8 8 | org.gradle.parallel=true 9 | 10 | # https://developer.android.com/studio/build/optimize-your-build#use-non-transitive-r-classes 11 | android.nonTransitiveRClass=true 12 | # https://blog.jetbrains.com/kotlin/2022/07/a-new-approach-to-incremental-compilation-in-kotlin/ 13 | kotlin.incremental.useClasspathSnapshot=true -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /player/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /player/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | alias(libs.plugins.android.library) 3 | alias(libs.plugins.kotlin.android) 4 | alias(libs.plugins.spotless) 5 | } 6 | 7 | apply from: "${project.rootDir}/buildscripts/spotless.gradle" 8 | apply from: "${project.rootDir}/buildscripts/android-library.gradle" 9 | 10 | android { 11 | namespace 'ru.stersh.retrosonic.player' 12 | } 13 | 14 | dependencies { 15 | implementation project(':provider') 16 | implementation project(':source:apisonic') 17 | implementation project(':core') 18 | 19 | implementation(libs.kotlin.coroutines.android) 20 | implementation(libs.bundles.koin) 21 | implementation(libs.timber) 22 | 23 | api(libs.media.exoplayer) 24 | api(libs.media.exoplayer.hls) 25 | api(libs.media.exoplayer.hls) 26 | api(libs.media.exoplayer.workmanager) 27 | api(libs.media.datasource) 28 | api(libs.media.datasource.okhttp) 29 | api(libs.media.session) 30 | api(libs.media.extractor) 31 | } 32 | -------------------------------------------------------------------------------- /player/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/player/consumer-rules.pro -------------------------------------------------------------------------------- /player/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /player/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /player/src/main/java/ru/stersh/retrosonic/player/controls/PlayerControls.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.player.controls 16 | 17 | interface PlayerControls { 18 | fun play() 19 | fun pause() 20 | fun next() 21 | fun previous() 22 | fun seek(time: Long) 23 | 24 | fun toggleFavorite(favorite: Boolean) 25 | } 26 | -------------------------------------------------------------------------------- /player/src/main/java/ru/stersh/retrosonic/player/metadata/CurrentSongInfoStore.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.player.metadata 16 | 17 | import kotlinx.coroutines.flow.Flow 18 | 19 | interface CurrentSongInfoStore { 20 | fun getCurrentSongInfo(): Flow 21 | } 22 | -------------------------------------------------------------------------------- /player/src/main/java/ru/stersh/retrosonic/player/progress/PlayerProgress.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.player.progress 16 | 17 | data class PlayerProgress( 18 | val currentTimeMs: Long, 19 | val totalTimeMs: Long, 20 | val currentTime: String, 21 | val totalTime: String, 22 | ) 23 | -------------------------------------------------------------------------------- /player/src/main/java/ru/stersh/retrosonic/player/progress/PlayerProgressStore.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.player.progress 16 | 17 | import kotlinx.coroutines.flow.Flow 18 | 19 | interface PlayerProgressStore { 20 | fun playerProgress(): Flow 21 | } 22 | -------------------------------------------------------------------------------- /player/src/main/java/ru/stersh/retrosonic/player/queue/PlayerQueueAudioSourceManager.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.player.queue 16 | 17 | interface PlayerQueueAudioSourceManager { 18 | suspend fun playSource(source: AudioSource, shuffled: Boolean = false) 19 | suspend fun addSource(source: AudioSource, shuffled: Boolean = false) 20 | } 21 | -------------------------------------------------------------------------------- /player/src/main/java/ru/stersh/retrosonic/player/state/PlayStateStore.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.player.state 16 | 17 | import kotlinx.coroutines.flow.Flow 18 | 19 | interface PlayStateStore { 20 | fun isPlaying(): Flow 21 | } 22 | -------------------------------------------------------------------------------- /player/src/main/java/ru/stersh/retrosonic/player/utils/MediaItemExtras.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.retrosonic.player.utils 16 | 17 | const val MEDIA_ITEM_ALBUM_ID = "album_id" 18 | const val MEDIA_ITEM_DURATION = "duration" 19 | const val MEDIA_SONG_ID = "song_id" 20 | -------------------------------------------------------------------------------- /provider/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /provider/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | alias(libs.plugins.android.library) 3 | alias(libs.plugins.kotlin.android) 4 | alias(libs.plugins.spotless) 5 | } 6 | 7 | apply from: "${project.rootDir}/buildscripts/spotless.gradle" 8 | apply from: "${project.rootDir}/buildscripts/android-library.gradle" 9 | 10 | android { 11 | namespace 'ru.stersh.retrosonic.provider' 12 | } 13 | 14 | dependencies { 15 | implementation project(':source:apisonic') 16 | implementation project(':source:room') 17 | 18 | implementation(libs.kotlin.coroutines.android) 19 | implementation(libs.bundles.koin) 20 | } 21 | -------------------------------------------------------------------------------- /provider/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/provider/consumer-rules.pro -------------------------------------------------------------------------------- /provider/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /provider/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /provider/src/main/java/ru/stersh/apisonic/provider/apisonic/ApiSonicProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.apisonic.provider.apisonic 16 | 17 | import ru.stersh.apisonic.ApiSonic 18 | 19 | interface ApiSonicProvider { 20 | suspend fun getApiSonic(): ApiSonic 21 | } 22 | -------------------------------------------------------------------------------- /provider/src/main/java/ru/stersh/apisonic/provider/apisonic/NoActiveServerSettingsFound.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.apisonic.provider.apisonic 16 | 17 | class NoActiveServerSettingsFound : java.lang.Exception() 18 | -------------------------------------------------------------------------------- /screenshots/adaptive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/adaptive.jpg -------------------------------------------------------------------------------- /screenshots/blur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/blur.jpg -------------------------------------------------------------------------------- /screenshots/classic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/classic.jpg -------------------------------------------------------------------------------- /screenshots/color.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/color.jpg -------------------------------------------------------------------------------- /screenshots/fit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/fit.jpg -------------------------------------------------------------------------------- /screenshots/flat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/flat.jpg -------------------------------------------------------------------------------- /screenshots/material.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/material.jpg -------------------------------------------------------------------------------- /screenshots/peak.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/peak.jpg -------------------------------------------------------------------------------- /screenshots/peek.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/peek.jpg -------------------------------------------------------------------------------- /screenshots/playlists.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/playlists.jpg -------------------------------------------------------------------------------- /screenshots/synced_over_black.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/synced_over_black.jpg -------------------------------------------------------------------------------- /screenshots/synced_over_dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/synced_over_dark.jpg -------------------------------------------------------------------------------- /screenshots/synced_over_light.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/synced_over_light.jpg -------------------------------------------------------------------------------- /screenshots/synced_replace_black.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/synced_replace_black.jpg -------------------------------------------------------------------------------- /screenshots/synced_replace_dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/synced_replace_dark.jpg -------------------------------------------------------------------------------- /screenshots/synced_replace_light.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/synced_replace_light.jpg -------------------------------------------------------------------------------- /screenshots/tiny.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/screenshots/tiny.jpg -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | google() 5 | mavenCentral() 6 | } 7 | } 8 | 9 | dependencyResolutionManagement { 10 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 11 | repositories { 12 | google() 13 | mavenCentral() 14 | maven { url "https://jitpack.io" } 15 | } 16 | } 17 | 18 | include ':app', ':appthemehelper', ':source:apisonic', ':core', ':player', ':source:room' 19 | include ':provider' 20 | -------------------------------------------------------------------------------- /source/apisonic/.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Unit Tests 2 | 3 | on: [push] 4 | 5 | jobs: 6 | test: 7 | name: Run unit tests 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@master 12 | - uses: OrangeLabs-moe/gradle-actions@v5.0-openjdk-8 13 | with: 14 | args: clean cleanTest test 15 | 16 | -------------------------------------------------------------------------------- /source/apisonic/.gitignore: -------------------------------------------------------------------------------- 1 | .kotlintest/ 2 | .gradle/ 3 | .idea/ 4 | build/ -------------------------------------------------------------------------------- /source/apisonic/README.md: -------------------------------------------------------------------------------- 1 | 🚧 Work in progress 🚧 2 | 3 | ![https://github.com/henningBunk/apisonic/actions?query=workflow%3A%22Unit+Tests%22](https://github.com/henningBunk/apisonic/workflows/Unit%20Tests/badge.svg) 4 | 5 | # apisonic 6 | ## An API client for the SubSonic/AirSonic API written in Kotlin 7 | 8 | ### Technology Stack 9 | 10 | * OkHttp 11 | * Retrofit 12 | * Moshi 13 | * Kotlin Coroutines 14 | -------------------------------------------------------------------------------- /source/apisonic/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | alias(libs.plugins.android.library) 3 | alias(libs.plugins.kotlin.android) 4 | alias(libs.plugins.kotlin.kapt) 5 | alias(libs.plugins.spotless) 6 | } 7 | 8 | apply from: "${project.rootDir}/buildscripts/spotless.gradle" 9 | apply from: "${project.rootDir}/buildscripts/android-library.gradle" 10 | 11 | android { 12 | namespace 'ru.stersh.retrosonic.apisonic' 13 | } 14 | 15 | dependencies { 16 | kapt(libs.moshi.codegen) 17 | implementation(libs.moshi.core) 18 | implementation(libs.moshi.adapters) 19 | 20 | implementation(libs.logging.interceptor) 21 | implementation(libs.retrofit.core) 22 | implementation(libs.retrofit.converter.moshi) 23 | 24 | implementation(libs.kotlin.coroutines.core) 25 | } 26 | -------------------------------------------------------------------------------- /source/apisonic/gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style=official -------------------------------------------------------------------------------- /source/apisonic/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/source/apisonic/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /source/apisonic/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /source/apisonic/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | maven { setUrl("https://dl.bintray.com/kotlin/kotlin-eap") } 4 | 5 | mavenCentral() 6 | 7 | maven { setUrl("https://plugins.gradle.org/m2/") } 8 | 9 | } 10 | } 11 | rootProject.name = "apisonic" 12 | 13 | -------------------------------------------------------------------------------- /source/apisonic/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /source/apisonic/src/main/kotlin/ru/stersh/apisonic/ApiSonicError.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.apisonic 16 | 17 | import okio.IOException 18 | 19 | data class ApiSonicError(val code: Int, override val message: String) : IOException() 20 | -------------------------------------------------------------------------------- /source/apisonic/src/main/kotlin/ru/stersh/apisonic/LogLevel.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.apisonic 16 | 17 | enum class LogLevel { 18 | NONE, BASIC, HEADERS, BODY 19 | } 20 | -------------------------------------------------------------------------------- /source/apisonic/src/main/kotlin/ru/stersh/apisonic/Status.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.apisonic 16 | 17 | object Status { 18 | const val SUCCESS = "ok" 19 | const val ERROR = "failed" 20 | } 21 | -------------------------------------------------------------------------------- /source/apisonic/src/main/kotlin/ru/stersh/apisonic/models/Rating.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.apisonic.models 16 | 17 | enum class Rating(val value: Int) { 18 | REMOVE_RATING(0), 19 | RATE_1_STAR(1), 20 | RATE_2_STAR(2), 21 | RATE_3_STAR(3), 22 | RATE_4_STAR(4), 23 | RATE_5_STAR(5), 24 | } 25 | -------------------------------------------------------------------------------- /source/room/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /source/room/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | alias(libs.plugins.android.library) 3 | alias(libs.plugins.kotlin.android) 4 | alias(libs.plugins.kotlin.kapt) 5 | alias(libs.plugins.kotlin.parcelize) 6 | alias(libs.plugins.spotless) 7 | } 8 | 9 | apply from: "${project.rootDir}/buildscripts/spotless.gradle" 10 | apply from: "${project.rootDir}/buildscripts/android-library.gradle" 11 | 12 | android { 13 | namespace 'ru.stersh.retrosonic.room' 14 | } 15 | 16 | dependencies { 17 | api(libs.room.runtime) 18 | api(libs.room.ktx) 19 | kapt(libs.room.compiler) 20 | 21 | implementation(libs.kotlin.coroutines.android) 22 | implementation(libs.bundles.koin) 23 | } 24 | -------------------------------------------------------------------------------- /source/room/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siper/RetroSonicPlayer/69a3caea557a47a4aad28222a21918e7514264ca/source/room/consumer-rules.pro -------------------------------------------------------------------------------- /source/room/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /source/room/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /source/room/src/main/java/ru/stersh/apisonic/room/lyrics/LyricsEntity.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020 Retro Sonic contributors. 3 | * 4 | * Licensed under the GNU General Public License v3 5 | * 6 | * This is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 9 | * 10 | * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 11 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | * See the GNU General Public License for more details. 13 | * 14 | */ 15 | package ru.stersh.apisonic.room.lyrics 16 | 17 | import androidx.room.Entity 18 | import androidx.room.PrimaryKey 19 | 20 | @Entity 21 | class LyricsEntity( 22 | @PrimaryKey val songId: Int, 23 | val lyrics: String, 24 | ) 25 | --------------------------------------------------------------------------------