From 0e0cd3ea0739cc0b73a68bec4b023c7138ece674 Mon Sep 17 00:00:00 2001 From: Hamy Date: Sat, 24 Jun 2023 01:49:30 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Мелкие шайтанские фокусы --- .github/ISSUE_TEMPLATE/bug_report.yaml | 2 +- app/build.gradle.kts | 4 +- .../1.json | 0 .../10.json | 0 .../11.json | 0 .../12.json | 0 .../13.json | 0 .../14.json | 0 .../15.json | 0 .../16.json | 0 .../17.json | 0 .../18.json | 0 .../19.json | 0 .../2.json | 0 .../20.json | 0 .../21.json | 0 .../22.json | 0 .../23.json | 0 .../3.json | 0 .../4.json | 0 .../5.json | 0 .../6.json | 0 .../7.json | 0 .../8.json | 0 .../9.json | 0 app/src/main/ic_launcher-playstore.png | Bin 15507 -> 15542 bytes .../vimusic => hamy/muza}/Database.kt | 46 ++++----- .../vimusic => hamy/muza}/MainActivity.kt | 74 +++++++------- .../vimusic => hamy/muza}/MainApplication.kt | 10 +- .../muza}/enums/AlbumSortBy.kt | 2 +- .../muza}/enums/ArtistSortBy.kt | 2 +- .../muza}/enums/BuiltInPlaylist.kt | 2 +- .../muza}/enums/CoilDiskCacheSize.kt | 2 +- .../muza}/enums/ColorPaletteMode.kt | 2 +- .../muza}/enums/ColorPaletteName.kt | 2 +- .../muza}/enums/ExoPlayerDiskCacheMaxSize.kt | 2 +- .../muza}/enums/PlaylistSortBy.kt | 2 +- .../vimusic => hamy/muza}/enums/SongSortBy.kt | 2 +- .../vimusic => hamy/muza}/enums/SortOrder.kt | 2 +- .../muza}/enums/ThumbnailRoundness.kt | 5 +- .../vimusic => hamy/muza}/models/Album.kt | 2 +- .../vimusic => hamy/muza}/models/Artist.kt | 2 +- .../vimusic => hamy/muza}/models/Event.kt | 2 +- .../vimusic => hamy/muza}/models/Format.kt | 2 +- .../vimusic => hamy/muza}/models/Info.kt | 2 +- .../vimusic => hamy/muza}/models/Lyrics.kt | 2 +- .../vimusic => hamy/muza}/models/Playlist.kt | 2 +- .../muza}/models/PlaylistPreview.kt | 2 +- .../muza}/models/PlaylistWithSongs.kt | 2 +- .../muza}/models/QueuedMediaItem.kt | 2 +- .../muza}/models/SearchQuery.kt | 2 +- .../vimusic => hamy/muza}/models/Song.kt | 2 +- .../muza}/models/SongAlbumMap.kt | 2 +- .../muza}/models/SongArtistMap.kt | 2 +- .../muza}/models/SongPlaylistMap.kt | 2 +- .../muza}/models/SongWithContentLength.kt | 2 +- .../muza}/models/SortedSongPlaylistMap.kt | 2 +- .../muza}/service/BitmapProvider.kt | 4 +- .../muza}/service/PlaybackExceptions.kt | 2 +- .../service/PlayerMediaBrowserService.kt | 24 ++--- .../muza}/service/PlayerService.kt | 90 +++++++++--------- .../muza}/ui/components/BottomSheet.kt | 2 +- .../muza}/ui/components/Menu.kt | 2 +- .../muza}/ui/components/MusicBars.kt | 2 +- .../muza}/ui/components/SeekBar.kt | 2 +- .../muza}/ui/components/ShimmerHost.kt | 2 +- .../muza}/ui/components/themed/Dialog.kt | 24 ++--- .../ui/components/themed/DialogTextButton.kt | 8 +- .../themed/FloatingActionsContainer.kt | 12 +-- .../muza}/ui/components/themed/Header.kt | 10 +- .../muza}/ui/components/themed/IconButton.kt | 2 +- .../themed/LayoutWithAdaptiveThumbnail.kt | 12 +-- .../ui/components/themed/MediaItemMenu.kt | 57 ++++++----- .../muza}/ui/components/themed/Menu.kt | 8 +- .../ui/components/themed/NavigationRail.kt | 16 ++-- .../ui/components/themed/PrimaryButton.kt | 6 +- .../muza}/ui/components/themed/Scaffold.kt | 4 +- .../ui/components/themed/SecondaryButton.kt | 6 +- .../components/themed/SecondaryTextButton.kt | 8 +- .../muza}/ui/components/themed/Switch.kt | 6 +- .../ui/components/themed/TextPlaceholder.kt | 6 +- .../muza}/ui/items/AlbumItem.kt | 18 ++-- .../muza}/ui/items/ArtistItem.kt | 18 ++-- .../muza}/ui/items/ItemContainer.kt | 5 +- .../muza}/ui/items/PlaylistItem.kt | 28 +++--- .../muza}/ui/items/SongItem.kt | 20 ++-- .../muza}/ui/items/VideoItem.kt | 22 ++--- .../muza}/ui/screens/Routes.kt | 16 ++-- .../muza}/ui/screens/album/AlbumScreen.kt | 58 +++++------ .../muza}/ui/screens/album/AlbumSongs.kt | 52 +++++----- .../ui/screens/artist/ArtistLocalSongs.kt | 46 ++++----- .../muza}/ui/screens/artist/ArtistOverview.kt | 66 ++++++------- .../muza}/ui/screens/artist/ArtistScreen.kt | 72 +++++++------- .../builtinplaylist/BuiltInPlaylistScreen.kt | 18 ++-- .../builtinplaylist/BuiltInPlaylistSongs.kt | 52 +++++----- .../muza}/ui/screens/home/HomeAlbums.kt | 40 ++++---- .../muza}/ui/screens/home/HomeArtists.kt | 38 ++++---- .../muza}/ui/screens/home/HomePlaylists.kt | 56 +++++------ .../muza}/ui/screens/home/HomeScreen.kt | 74 +++++++------- .../muza}/ui/screens/home/HomeSongs.kt | 58 +++++------ .../muza}/ui/screens/home/QuickPicks.kt | 82 ++++++++-------- .../localplaylist/LocalPlaylistScreen.kt | 14 +-- .../localplaylist/LocalPlaylistSongs.kt | 90 +++++++++--------- .../muza}/ui/screens/player/Controls.kt | 36 +++---- .../muza}/ui/screens/player/Lyrics.kt | 74 +++++++------- .../muza}/ui/screens/player/PlaybackError.kt | 12 +-- .../muza}/ui/screens/player/Player.kt | 54 +++++------ .../muza}/ui/screens/player/Queue.kt | 64 ++++++------- .../muza}/ui/screens/player/StatsForNerds.kt | 24 ++--- .../muza}/ui/screens/player/Thumbnail.kt | 26 ++--- .../ui/screens/playlist/PlaylistScreen.kt | 14 +-- .../ui/screens/playlist/PlaylistSongList.kt | 76 +++++++-------- .../ui/screens/search/LocalSongSearch.kt | 42 ++++---- .../muza}/ui/screens/search/OnlineSearch.kt | 46 ++++----- .../muza}/ui/screens/search/SearchScreen.kt | 22 ++--- .../ui/screens/searchresult/ItemsPage.kt | 22 ++--- .../searchresult/SearchResultScreen.kt | 84 ++++++++-------- .../muza}/ui/screens/settings/About.kt | 46 ++++----- .../ui/screens/settings/AppearanceSettings.kt | 78 +++++++++------ .../ui/screens/settings/CacheSettings.kt | 36 +++---- .../ui/screens/settings/DatabaseSettings.kt | 54 +++++------ .../ui/screens/settings/OtherSettings.kt | 62 ++++++------ .../ui/screens/settings/PlayerSettings.kt | 52 +++++----- .../ui/screens/settings/SettingsScreen.kt | 34 +++---- .../muza}/ui/styling/Appearance.kt | 3 +- .../muza}/ui/styling/ColorPalette.kt | 6 +- .../muza}/ui/styling/Dimensions.kt | 2 +- .../muza}/ui/styling/Typography.kt | 4 +- .../muza}/utils/Configuration.kt | 2 +- .../vimusic => hamy/muza}/utils/Context.kt | 2 +- .../vimusic => hamy/muza}/utils/DrawScope.kt | 2 +- .../vimusic => hamy/muza}/utils/FadingEdge.kt | 2 +- .../muza}/utils/InvincibleService.kt | 2 +- .../utils/LazyGridSnapLayoutInfoProvider.kt | 2 +- .../vimusic => hamy/muza}/utils/Player.kt | 2 +- .../muza}/utils/PlayerState.kt | 2 +- .../muza}/utils/Preferences.kt | 2 +- .../vimusic => hamy/muza}/utils/RingBuffer.kt | 2 +- .../muza}/utils/ScrollingInfo.kt | 2 +- .../muza}/utils/SmoothScrollToTop.kt | 8 +- .../muza}/utils/SynchronizedLyrics.kt | 2 +- .../vimusic => hamy/muza}/utils/TextStyle.kt | 4 +- .../vimusic => hamy/muza}/utils/TimerJob.kt | 2 +- .../vimusic => hamy/muza}/utils/Utils.kt | 12 +-- .../muza}/utils/YoutubeRadio.kt | 10 +- app/src/main/logo.png | Bin 0 -> 12875 bytes .../res/mipmap-anydpi-v26/ic_launcher.xml | 3 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 3 +- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1746 -> 0 bytes app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1018 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 1214 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 3742 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2692 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 1243 -> 0 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 828 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 870 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2392 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1872 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 2438 -> 0 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1658 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 2046 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 5308 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 4034 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 3752 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2284 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 2756 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 8353 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 6146 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 5323 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3276 bytes .../ic_launcher_foreground.webp | Bin 0 -> 4488 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 12378 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 8898 bytes app/src/main/res/values/colors.xml | 1 - .../res/values/ic_launcher_background.xml | 4 + compose-persist/build.gradle.kts | 2 +- .../compose/persist/Persist.kt | 2 +- .../compose/persist/PersistMap.kt | 2 +- .../compose/persist/PersistMapCleanup.kt | 2 +- .../compose/persist/PersistMapOwner.kt | 2 +- .../compose/persist/Utils.kt | 2 +- compose-reordering/build.gradle.kts | 2 +- .../compose/reordering/AnimatablesPool.kt | 2 +- .../reordering/AnimateItemPlacement.kt | 2 +- .../compose/reordering/DraggedItem.kt | 2 +- .../compose/reordering/Reorder.kt | 2 +- .../reordering/ReorderingLazyColumn.kt | 2 +- .../compose/reordering/ReorderingLazyList.kt | 2 +- .../compose/reordering/ReorderingState.kt | 2 +- compose-routing/build.gradle.kts | 2 +- .../compose/routing/GlobalRoute.kt | 2 +- .../compose/routing/Route.kt | 2 +- .../compose/routing/RouteHandler.kt | 2 +- .../compose/routing/RouteHandlerScope.kt | 2 +- .../compose/routing/Transitions.kt | 2 +- .../innertube/Innertube.kt | 8 +- .../innertube/models/BrowseResponse.kt | 2 +- .../innertube/models/ButtonRenderer.kt | 2 +- .../innertube/models/Context.kt | 2 +- .../innertube/models/Continuation.kt | 2 +- .../innertube/models/ContinuationResponse.kt | 2 +- .../innertube/models/GetQueueResponse.kt | 2 +- .../innertube/models/GridRenderer.kt | 2 +- .../models/MusicCarouselShelfRenderer.kt | 2 +- .../models/MusicResponsiveListItemRenderer.kt | 2 +- .../innertube/models/MusicShelfRenderer.kt | 2 +- .../models/MusicTwoRowItemRenderer.kt | 2 +- .../innertube/models/NavigationEndpoint.kt | 2 +- .../innertube/models/NextResponse.kt | 2 +- .../innertube/models/PlayerResponse.kt | 2 +- .../models/PlaylistPanelVideoRenderer.kt | 2 +- .../innertube/models/Runs.kt | 2 +- .../innertube/models/SearchResponse.kt | 3 +- .../models/SearchSuggestionsResponse.kt | 2 +- .../innertube/models/SectionListRenderer.kt | 2 +- .../innertube/models/Tabs.kt | 2 +- .../innertube/models/Thumbnail.kt | 2 +- .../innertube/models/ThumbnailRenderer.kt | 4 +- .../innertube/models/bodies/BrowseBody.kt | 4 +- .../models/bodies/ContinuationBody.kt | 4 +- .../innertube/models/bodies/NextBody.kt | 4 +- .../innertube/models/bodies/PlayerBody.kt | 4 +- .../innertube/models/bodies/QueueBody.kt | 4 +- .../innertube/models/bodies/SearchBody.kt | 4 +- .../models/bodies/SearchSuggestionsBody.kt | 4 +- .../innertube/requests/AlbumPage.kt | 8 +- .../innertube/requests/ArtistPage.kt | 20 ++-- .../innertube/requests/ItemsPage.kt | 22 ++--- .../innertube/requests/Lyrics.kt | 14 +-- .../innertube/requests/NextPage.kt | 16 ++-- .../innertube/requests/Player.kt | 12 +-- .../innertube/requests/PlaylistPage.kt | 20 ++-- .../innertube/requests/Queue.kt | 12 +-- .../innertube/requests/RelatedPage.kt | 22 ++--- .../innertube/requests/SearchPage.kt | 16 ++-- .../innertube/requests/SearchSuggestions.kt | 10 +- .../FromMusicResponsiveListItemRenderer.kt | 10 +- .../utils/FromMusicShelfRendererContent.kt | 8 +- .../utils/FromMusicTwoRowItemRenderer.kt | 6 +- .../utils/FromPlaylistPanelVideoRenderer.kt | 6 +- .../innertube/utils/Utils.kt | 6 +- .../it/{vfsfitvnm => hamy}/kugou/KuGou.kt | 8 +- .../it/{vfsfitvnm => hamy}/kugou/Result.kt | 2 +- .../kugou/models/DownloadLyricsResponse.kt | 2 +- .../kugou/models/SearchLyricsResponse.kt | 2 +- .../kugou/models/SearchSongResponse.kt | 2 +- 246 files changed, 1424 insertions(+), 1420 deletions(-) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/1.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/10.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/11.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/12.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/13.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/14.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/15.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/16.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/17.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/18.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/19.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/2.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/20.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/21.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/22.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/23.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/3.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/4.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/5.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/6.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/7.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/8.json (100%) rename app/schemas/{it.vfsfitvnm.vimusic.DatabaseInitializer => it.hamy.muza.DatabaseInitializer}/9.json (100%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/Database.kt (96%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/MainActivity.kt (91%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/MainApplication.kt (78%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/AlbumSortBy.kt (64%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/ArtistSortBy.kt (60%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/BuiltInPlaylist.kt (62%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/CoilDiskCacheSize.kt (89%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/ColorPaletteMode.kt (65%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/ColorPaletteName.kt (67%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/ExoPlayerDiskCacheMaxSize.kt (91%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/PlaylistSortBy.kt (66%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/SongSortBy.kt (65%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/SortOrder.kt (82%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/enums/ThumbnailRoundness.kt (73%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/Album.kt (91%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/Artist.kt (89%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/Event.kt (94%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/Format.kt (94%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/Info.kt (63%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/Lyrics.kt (92%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/Playlist.kt (87%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/PlaylistPreview.kt (83%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/PlaylistWithSongs.kt (93%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/QueuedMediaItem.kt (91%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/SearchQuery.kt (90%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/Song.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/SongAlbumMap.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/SongArtistMap.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/SongPlaylistMap.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/SongWithContentLength.kt (83%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/models/SortedSongPlaylistMap.kt (90%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/service/BitmapProvider.kt (96%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/service/PlaybackExceptions.kt (91%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/service/PlayerMediaBrowserService.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/service/PlayerService.kt (94%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/BottomSheet.kt (99%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/Menu.kt (97%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/MusicBars.kt (98%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/SeekBar.kt (99%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/ShimmerHost.kt (96%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/Dialog.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/DialogTextButton.kt (86%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/FloatingActionsContainer.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/Header.kt (91%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/IconButton.kt (97%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/LayoutWithAdaptiveThumbnail.kt (86%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/MediaItemMenu.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/Menu.kt (93%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/NavigationRail.kt (94%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/PrimaryButton.kt (89%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/Scaffold.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/SecondaryButton.kt (89%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/SecondaryTextButton.kt (83%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/Switch.kt (92%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/components/themed/TextPlaceholder.kt (84%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/items/AlbumItem.kt (90%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/items/ArtistItem.kt (90%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/items/ItemContainer.kt (94%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/items/PlaylistItem.kt (92%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/items/SongItem.kt (93%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/items/VideoItem.kt (89%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/Routes.kt (75%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/album/AlbumScreen.kt (85%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/album/AlbumSongs.kt (81%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/artist/ArtistLocalSongs.kt (80%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/artist/ArtistOverview.kt (88%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/artist/ArtistScreen.kt (90%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt (77%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt (79%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/home/HomeAlbums.kt (81%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/home/HomeArtists.kt (83%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/home/HomePlaylists.kt (83%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/home/HomeScreen.kt (67%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/home/HomeSongs.kt (82%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/home/QuickPicks.kt (87%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/localplaylist/LocalPlaylistScreen.kt (77%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/localplaylist/LocalPlaylistSongs.kt (81%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/player/Controls.kt (91%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/player/Lyrics.kt (87%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/player/PlaybackError.kt (89%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/player/Player.kt (91%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/player/Queue.kt (90%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/player/StatsForNerds.kt (93%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/player/Thumbnail.kt (90%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/playlist/PlaylistScreen.kt (75%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/playlist/PlaylistSongList.kt (80%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/search/LocalSongSearch.kt (81%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/search/OnlineSearch.kt (91%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/search/SearchScreen.kt (86%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/searchresult/ItemsPage.kt (88%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/searchresult/SearchResultScreen.kt (86%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/settings/About.kt (59%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/settings/AppearanceSettings.kt (60%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/settings/CacheSettings.kt (73%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/settings/DatabaseSettings.kt (70%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/settings/OtherSettings.kt (70%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/settings/PlayerSettings.kt (69%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/screens/settings/SettingsScreen.kt (88%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/styling/Appearance.kt (94%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/styling/ColorPalette.kt (97%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/styling/Dimensions.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/ui/styling/Typography.kt (97%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/Configuration.kt (90%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/Context.kt (97%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/DrawScope.kt (96%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/FadingEdge.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/InvincibleService.kt (99%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/LazyGridSnapLayoutInfoProvider.kt (98%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/Player.kt (98%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/PlayerState.kt (98%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/Preferences.kt (99%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/RingBuffer.kt (88%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/ScrollingInfo.kt (98%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/SmoothScrollToTop.kt (64%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/SynchronizedLyrics.kt (95%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/TextStyle.kt (92%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/TimerJob.kt (96%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/Utils.kt (93%) rename app/src/main/kotlin/it/{vfsfitvnm/vimusic => hamy/muza}/utils/YoutubeRadio.kt (86%) create mode 100644 app/src/main/logo.png delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/values/ic_launcher_background.xml rename compose-persist/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/persist/Persist.kt (95%) rename compose-persist/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/persist/PersistMap.kt (55%) rename compose-persist/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/persist/PersistMapCleanup.kt (93%) rename compose-persist/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/persist/PersistMapOwner.kt (62%) rename compose-persist/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/persist/Utils.kt (91%) rename compose-reordering/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/reordering/AnimatablesPool.kt (96%) rename compose-reordering/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/reordering/AnimateItemPlacement.kt (89%) rename compose-reordering/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/reordering/DraggedItem.kt (96%) rename compose-reordering/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/reordering/Reorder.kt (97%) rename compose-reordering/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/reordering/ReorderingLazyColumn.kt (97%) rename compose-reordering/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/reordering/ReorderingLazyList.kt (99%) rename compose-reordering/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/reordering/ReorderingState.kt (99%) rename compose-routing/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/routing/GlobalRoute.kt (91%) rename compose-routing/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/routing/Route.kt (98%) rename compose-routing/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/routing/RouteHandler.kt (98%) rename compose-routing/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/routing/RouteHandlerScope.kt (95%) rename compose-routing/src/main/kotlin/it/{vfsfitvnm => hamy}/compose/routing/Transitions.kt (97%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/Innertube.kt (97%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/BrowseResponse.kt (97%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/ButtonRenderer.kt (78%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/Context.kt (97%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/Continuation.kt (91%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/ContinuationResponse.kt (93%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/GetQueueResponse.kt (87%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/GridRenderer.kt (85%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/MusicCarouselShelfRenderer.kt (96%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/MusicResponsiveListItemRenderer.kt (95%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/MusicShelfRenderer.kt (97%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/MusicTwoRowItemRenderer.kt (86%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/NavigationEndpoint.kt (99%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/NextResponse.kt (98%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/PlayerResponse.kt (97%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/PlaylistPanelVideoRenderer.kt (89%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/Runs.kt (95%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/SearchResponse.kt (69%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/SearchSuggestionsResponse.kt (95%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/SectionListRenderer.kt (95%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/Tabs.kt (93%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/Thumbnail.kt (92%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/ThumbnailRenderer.kt (81%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/bodies/BrowseBody.kt (67%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/bodies/ContinuationBody.kt (64%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/bodies/NextBody.kt (88%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/bodies/PlayerBody.kt (68%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/bodies/QueueBody.kt (69%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/bodies/SearchBody.kt (66%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/models/bodies/SearchSuggestionsBody.kt (64%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/AlbumPage.kt (84%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/ArtistPage.kt (87%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/ItemsPage.kt (85%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/Lyrics.kt (76%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/NextPage.kt (87%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/Player.kt (88%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/PlaylistPage.kt (85%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/Queue.kt (71%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/RelatedPage.kt (81%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/SearchPage.kt (80%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/requests/SearchSuggestions.kt (74%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/utils/FromMusicResponsiveListItemRenderer.kt (84%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/utils/FromMusicShelfRendererContent.kt (95%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/utils/FromMusicTwoRowItemRenderer.kt (93%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/utils/FromPlaylistPanelVideoRenderer.kt (86%) rename innertube/src/main/kotlin/it/{vfsfitvnm => hamy}/innertube/utils/Utils.kt (91%) rename kugou/src/main/kotlin/it/{vfsfitvnm => hamy}/kugou/KuGou.kt (97%) rename kugou/src/main/kotlin/it/{vfsfitvnm => hamy}/kugou/Result.kt (89%) rename kugou/src/main/kotlin/it/{vfsfitvnm => hamy}/kugou/models/DownloadLyricsResponse.kt (78%) rename kugou/src/main/kotlin/it/{vfsfitvnm => hamy}/kugou/models/SearchLyricsResponse.kt (90%) rename kugou/src/main/kotlin/it/{vfsfitvnm => hamy}/kugou/models/SearchSongResponse.kt (90%) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 38bbd8b..c3c3ae2 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -59,7 +59,7 @@ body: If your bug includes a crash, please use `adb logcat` or other ways to provide logs. - type: input - id: vimusic-version + id: muza-version attributes: label: ViMusic version placeholder: | diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b0628b..23cc403 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -8,7 +8,7 @@ android { compileSdk = 33 defaultConfig { - applicationId = "it.vfsfitvnm.vimusic" + applicationId = "it.hamy.muza" minSdk = 21 targetSdk = 33 versionCode = 20 @@ -22,7 +22,7 @@ android { } } - namespace = "it.vfsfitvnm.vimusic" + namespace = "it.hamy.muza" buildTypes { debug { diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/1.json b/app/schemas/it.hamy.muza.DatabaseInitializer/1.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/1.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/1.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/10.json b/app/schemas/it.hamy.muza.DatabaseInitializer/10.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/10.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/10.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/11.json b/app/schemas/it.hamy.muza.DatabaseInitializer/11.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/11.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/11.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/12.json b/app/schemas/it.hamy.muza.DatabaseInitializer/12.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/12.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/12.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/13.json b/app/schemas/it.hamy.muza.DatabaseInitializer/13.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/13.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/13.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/14.json b/app/schemas/it.hamy.muza.DatabaseInitializer/14.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/14.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/14.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/15.json b/app/schemas/it.hamy.muza.DatabaseInitializer/15.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/15.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/15.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/16.json b/app/schemas/it.hamy.muza.DatabaseInitializer/16.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/16.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/16.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/17.json b/app/schemas/it.hamy.muza.DatabaseInitializer/17.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/17.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/17.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/18.json b/app/schemas/it.hamy.muza.DatabaseInitializer/18.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/18.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/18.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/19.json b/app/schemas/it.hamy.muza.DatabaseInitializer/19.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/19.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/19.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/2.json b/app/schemas/it.hamy.muza.DatabaseInitializer/2.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/2.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/2.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/20.json b/app/schemas/it.hamy.muza.DatabaseInitializer/20.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/20.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/20.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/21.json b/app/schemas/it.hamy.muza.DatabaseInitializer/21.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/21.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/21.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/22.json b/app/schemas/it.hamy.muza.DatabaseInitializer/22.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/22.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/22.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/23.json b/app/schemas/it.hamy.muza.DatabaseInitializer/23.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/23.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/23.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/3.json b/app/schemas/it.hamy.muza.DatabaseInitializer/3.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/3.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/3.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/4.json b/app/schemas/it.hamy.muza.DatabaseInitializer/4.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/4.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/4.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/5.json b/app/schemas/it.hamy.muza.DatabaseInitializer/5.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/5.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/5.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/6.json b/app/schemas/it.hamy.muza.DatabaseInitializer/6.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/6.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/6.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/7.json b/app/schemas/it.hamy.muza.DatabaseInitializer/7.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/7.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/7.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/8.json b/app/schemas/it.hamy.muza.DatabaseInitializer/8.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/8.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/8.json diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/9.json b/app/schemas/it.hamy.muza.DatabaseInitializer/9.json similarity index 100% rename from app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/9.json rename to app/schemas/it.hamy.muza.DatabaseInitializer/9.json diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index bfe923e6adf43d55ea472d179fc5e907701bea49..6e73617e58ca43f5f96df5297beb79791dd5ab95 100644 GIT binary patch literal 15542 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

crzt86Yn_eUDw7 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 X9s+Y-3LMbPfa_OHuT))jdGx;kIO0$% literal 15507 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 Unit, onDone: (String) -> Unit, modifier: Modifier = Modifier, - cancelText: String = "Cancel", - doneText: String = "Done", + cancelText: String = "Отмена", + doneText: String = "Готово", initialTextInput: String = "", singleLine: Boolean = true, maxLines: Int = 1, @@ -167,8 +167,8 @@ fun ConfirmationDialog( onDismiss: () -> Unit, onConfirm: () -> Unit, modifier: Modifier = Modifier, - cancelText: String = "Cancel", - confirmText: String = "Confirm", + cancelText: String = "Отменить", + confirmText: String = "Продолжить", onCancel: () -> Unit = onDismiss ) { val (_, typography) = LocalAppearance.current @@ -324,7 +324,7 @@ inline fun ValueSelectorDialog( .padding(end = 24.dp) ) { DialogTextButton( - text = "Cancel", + text = "Отмена", onClick = onDismiss, modifier = Modifier ) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/DialogTextButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/DialogTextButton.kt similarity index 86% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/DialogTextButton.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/DialogTextButton.kt index c3bedcf..8423634 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/DialogTextButton.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/DialogTextButton.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -10,9 +10,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.medium +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.color +import it.hamy.muza.utils.medium @Composable fun DialogTextButton( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/FloatingActionsContainer.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/FloatingActionsContainer.kt similarity index 95% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/FloatingActionsContainer.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/FloatingActionsContainer.kt index 8b0b57c..9bc3425 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/FloatingActionsContainer.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/FloatingActionsContainer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.ExperimentalAnimationApi @@ -24,11 +24,11 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.utils.ScrollingInfo -import it.vfsfitvnm.vimusic.utils.scrollingInfo -import it.vfsfitvnm.vimusic.utils.smoothScrollToTop +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R +import it.hamy.muza.utils.ScrollingInfo +import it.hamy.muza.utils.scrollingInfo +import it.hamy.muza.utils.smoothScrollToTop import kotlinx.coroutines.launch @ExperimentalAnimationApi diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Header.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Header.kt similarity index 91% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Header.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/Header.kt index b848979..f98ddfd 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Header.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Header.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -16,10 +16,10 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.shimmer -import it.vfsfitvnm.vimusic.utils.medium +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.shimmer +import it.hamy.muza.utils.medium import kotlin.random.Random @Composable diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/IconButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/IconButton.kt similarity index 97% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/IconButton.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/IconButton.kt index a5558eb..1500dd5 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/IconButton.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/IconButton.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.annotation.DrawableRes import androidx.compose.foundation.Image diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/LayoutWithAdaptiveThumbnail.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/LayoutWithAdaptiveThumbnail.kt similarity index 86% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/LayoutWithAdaptiveThumbnail.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/LayoutWithAdaptiveThumbnail.kt index 8c362de..773d571 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/LayoutWithAdaptiveThumbnail.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/LayoutWithAdaptiveThumbnail.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.compose.foundation.background import androidx.compose.foundation.layout.BoxWithConstraints @@ -14,11 +14,11 @@ import androidx.compose.ui.graphics.Shape import androidx.compose.ui.unit.dp import coil.compose.AsyncImage import com.valentinilk.shimmer.shimmer -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.ui.styling.shimmer -import it.vfsfitvnm.vimusic.utils.isLandscape -import it.vfsfitvnm.vimusic.utils.thumbnail +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.ui.styling.shimmer +import it.hamy.muza.utils.isLandscape +import it.hamy.muza.utils.thumbnail @Composable inline fun LayoutWithAdaptiveThumbnail( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/MediaItemMenu.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/MediaItemMenu.kt similarity index 95% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/MediaItemMenu.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/MediaItemMenu.kt index 5bc370d..05813e8 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/MediaItemMenu.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/MediaItemMenu.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import android.content.Intent import androidx.activity.compose.BackHandler @@ -43,34 +43,33 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import androidx.media3.common.MediaItem -import it.vfsfitvnm.innertube.models.NavigationEndpoint -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.enums.PlaylistSortBy -import it.vfsfitvnm.vimusic.enums.SortOrder -import it.vfsfitvnm.vimusic.models.Info -import it.vfsfitvnm.vimusic.models.Playlist -import it.vfsfitvnm.vimusic.models.Song -import it.vfsfitvnm.vimusic.models.SongPlaylistMap -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.transaction -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.screens.albumRoute -import it.vfsfitvnm.vimusic.ui.screens.artistRoute -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.favoritesIcon -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.addNext -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.enqueue -import it.vfsfitvnm.vimusic.utils.forcePlay -import it.vfsfitvnm.vimusic.utils.formatAsDuration -import it.vfsfitvnm.vimusic.utils.medium -import it.vfsfitvnm.vimusic.utils.semiBold -import it.vfsfitvnm.vimusic.utils.thumbnail -import kotlin.system.measureTimeMillis +import it.hamy.innertube.models.NavigationEndpoint +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.enums.PlaylistSortBy +import it.hamy.muza.enums.SortOrder +import it.hamy.muza.models.Info +import it.hamy.muza.models.Playlist +import it.hamy.muza.models.Song +import it.hamy.muza.models.SongPlaylistMap +import it.hamy.muza.query +import it.hamy.muza.transaction +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.screens.albumRoute +import it.hamy.muza.ui.screens.artistRoute +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.favoritesIcon +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.addNext +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.enqueue +import it.hamy.muza.utils.forcePlay +import it.hamy.muza.utils.formatAsDuration +import it.hamy.muza.utils.medium +import it.hamy.muza.utils.semiBold +import it.hamy.muza.utils.thumbnail import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.withContext diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Menu.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Menu.kt similarity index 93% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Menu.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/Menu.kt index a7ae862..1c28bf9 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Menu.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Menu.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.annotation.DrawableRes import androidx.compose.foundation.Image @@ -22,9 +22,9 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.medium -import it.vfsfitvnm.vimusic.utils.secondary +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.medium +import it.hamy.muza.utils.secondary @Composable inline fun Menu( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/NavigationRail.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/NavigationRail.kt similarity index 94% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/NavigationRail.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/NavigationRail.kt index d7fff64..f4377ae 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/NavigationRail.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/NavigationRail.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.compose.animation.animateColor import androidx.compose.animation.core.animateFloat @@ -32,13 +32,13 @@ import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.layout.layout import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.center -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.isLandscape -import it.vfsfitvnm.vimusic.utils.semiBold +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.center +import it.hamy.muza.utils.color +import it.hamy.muza.utils.isLandscape +import it.hamy.muza.utils.semiBold @Composable inline fun NavigationRail( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/PrimaryButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/PrimaryButton.kt similarity index 89% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/PrimaryButton.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/PrimaryButton.kt index 6ad94f7..6bc493c 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/PrimaryButton.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/PrimaryButton.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.annotation.DrawableRes import androidx.compose.foundation.Image @@ -14,8 +14,8 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.primaryButton +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.primaryButton @Composable fun PrimaryButton( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Scaffold.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Scaffold.kt similarity index 95% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Scaffold.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/Scaffold.kt index 3f71da7..0944c05 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Scaffold.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Scaffold.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedContentScope @@ -15,7 +15,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.IntOffset -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.LocalAppearance @ExperimentalAnimationApi @Composable diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/SecondaryButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryButton.kt similarity index 89% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/SecondaryButton.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryButton.kt index 9f0fb22..9d9cb73 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/SecondaryButton.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryButton.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.annotation.DrawableRes import androidx.compose.foundation.Image @@ -14,8 +14,8 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.primaryButton +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.primaryButton @Composable fun SecondaryButton( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/SecondaryTextButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryTextButton.kt similarity index 83% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/SecondaryTextButton.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryTextButton.kt index 240f3b6..36ce6fe 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/SecondaryTextButton.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryTextButton.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -9,9 +9,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.primaryButton -import it.vfsfitvnm.vimusic.utils.medium +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.primaryButton +import it.hamy.muza.utils.medium @Composable fun SecondaryTextButton( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Switch.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Switch.kt similarity index 92% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Switch.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/Switch.kt index 14b37e9..131dfc7 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Switch.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Switch.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.compose.animation.animateColor import androidx.compose.animation.core.animateDp @@ -14,8 +14,8 @@ import androidx.compose.ui.geometry.center import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shadow import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.drawCircle +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.drawCircle @Composable fun Switch( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/TextPlaceholder.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextPlaceholder.kt similarity index 84% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/TextPlaceholder.kt rename to app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextPlaceholder.kt index f747e91..c86a2be 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/TextPlaceholder.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextPlaceholder.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.components.themed +package it.hamy.muza.ui.components.themed import androidx.compose.foundation.background import androidx.compose.foundation.layout.Spacer @@ -10,8 +10,8 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.shimmer +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.shimmer import kotlin.random.Random @Composable diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/AlbumItem.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/AlbumItem.kt similarity index 90% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/AlbumItem.kt rename to app/src/main/kotlin/it/hamy/muza/ui/items/AlbumItem.kt index d6d13fd..56d60cb 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/AlbumItem.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/AlbumItem.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.items +package it.hamy.muza.ui.items import androidx.compose.foundation.background import androidx.compose.foundation.layout.Spacer @@ -13,14 +13,14 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil.compose.AsyncImage -import it.vfsfitvnm.vimusic.models.Album -import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.shimmer -import it.vfsfitvnm.vimusic.utils.secondary -import it.vfsfitvnm.vimusic.utils.semiBold -import it.vfsfitvnm.vimusic.utils.thumbnail -import it.vfsfitvnm.innertube.Innertube +import it.hamy.muza.models.Album +import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.shimmer +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold +import it.hamy.muza.utils.thumbnail +import it.hamy.innertube.Innertube @Composable fun AlbumItem( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/ArtistItem.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/ArtistItem.kt similarity index 90% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/ArtistItem.kt rename to app/src/main/kotlin/it/hamy/muza/ui/items/ArtistItem.kt index 732e32e..f11f950 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/ArtistItem.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/ArtistItem.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.items +package it.hamy.muza.ui.items import androidx.compose.foundation.background import androidx.compose.foundation.layout.Spacer @@ -15,14 +15,14 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil.compose.AsyncImage -import it.vfsfitvnm.vimusic.models.Artist -import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.shimmer -import it.vfsfitvnm.vimusic.utils.secondary -import it.vfsfitvnm.vimusic.utils.semiBold -import it.vfsfitvnm.vimusic.utils.thumbnail -import it.vfsfitvnm.innertube.Innertube +import it.hamy.muza.models.Artist +import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.shimmer +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold +import it.hamy.muza.utils.thumbnail +import it.hamy.innertube.Innertube @Composable fun ArtistItem( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/ItemContainer.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/ItemContainer.kt similarity index 94% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/ItemContainer.kt rename to app/src/main/kotlin/it/hamy/muza/ui/items/ItemContainer.kt index fe16910..4c65e05 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/ItemContainer.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/ItemContainer.kt @@ -1,10 +1,9 @@ -package it.vfsfitvnm.vimusic.ui.items +package it.hamy.muza.ui.items import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width @@ -13,7 +12,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.ui.styling.Dimensions +import it.hamy.muza.ui.styling.Dimensions @Composable inline fun ItemContainer( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/PlaylistItem.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/PlaylistItem.kt similarity index 92% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/PlaylistItem.kt rename to app/src/main/kotlin/it/hamy/muza/ui/items/PlaylistItem.kt index a614243..5d7eeb5 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/PlaylistItem.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/PlaylistItem.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.items +package it.hamy.muza.ui.items import androidx.annotation.DrawableRes import androidx.compose.foundation.Image @@ -27,19 +27,19 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil.compose.AsyncImage -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.models.PlaylistPreview -import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.onOverlay -import it.vfsfitvnm.vimusic.ui.styling.overlay -import it.vfsfitvnm.vimusic.ui.styling.shimmer -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.medium -import it.vfsfitvnm.vimusic.utils.secondary -import it.vfsfitvnm.vimusic.utils.semiBold -import it.vfsfitvnm.vimusic.utils.thumbnail -import it.vfsfitvnm.innertube.Innertube +import it.hamy.muza.Database +import it.hamy.muza.models.PlaylistPreview +import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.onOverlay +import it.hamy.muza.ui.styling.overlay +import it.hamy.muza.ui.styling.shimmer +import it.hamy.muza.utils.color +import it.hamy.muza.utils.medium +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold +import it.hamy.muza.utils.thumbnail +import it.hamy.innertube.Innertube import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/SongItem.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/SongItem.kt similarity index 93% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/SongItem.kt rename to app/src/main/kotlin/it/hamy/muza/ui/items/SongItem.kt index f9a6cea..426c846 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/SongItem.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/SongItem.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.items +package it.hamy.muza.ui.items import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -19,15 +19,15 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.media3.common.MediaItem import coil.compose.AsyncImage -import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.shimmer -import it.vfsfitvnm.vimusic.utils.medium -import it.vfsfitvnm.vimusic.utils.secondary -import it.vfsfitvnm.vimusic.utils.semiBold -import it.vfsfitvnm.vimusic.utils.thumbnail -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.vimusic.models.Song +import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.shimmer +import it.hamy.muza.utils.medium +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold +import it.hamy.muza.utils.thumbnail +import it.hamy.innertube.Innertube +import it.hamy.muza.models.Song @Composable fun SongItem( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/VideoItem.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/VideoItem.kt similarity index 89% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/VideoItem.kt rename to app/src/main/kotlin/it/hamy/muza/ui/items/VideoItem.kt index f3ee2f2..8ac4272 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/items/VideoItem.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/VideoItem.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.items +package it.hamy.muza.ui.items import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -16,16 +16,16 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil.compose.AsyncImage -import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.onOverlay -import it.vfsfitvnm.vimusic.ui.styling.overlay -import it.vfsfitvnm.vimusic.ui.styling.shimmer -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.medium -import it.vfsfitvnm.vimusic.utils.secondary -import it.vfsfitvnm.vimusic.utils.semiBold -import it.vfsfitvnm.innertube.Innertube +import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.onOverlay +import it.hamy.muza.ui.styling.overlay +import it.hamy.muza.ui.styling.shimmer +import it.hamy.muza.utils.color +import it.hamy.muza.utils.medium +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold +import it.hamy.innertube.Innertube @Composable fun VideoItem( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/Routes.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/Routes.kt similarity index 75% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/Routes.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/Routes.kt index 5535ccb..c10814c 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/Routes.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/Routes.kt @@ -1,16 +1,16 @@ -package it.vfsfitvnm.vimusic.ui.screens +package it.hamy.muza.ui.screens import android.annotation.SuppressLint import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.runtime.Composable -import it.vfsfitvnm.compose.routing.Route0 -import it.vfsfitvnm.compose.routing.Route1 -import it.vfsfitvnm.compose.routing.RouteHandlerScope -import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist -import it.vfsfitvnm.vimusic.ui.screens.album.AlbumScreen -import it.vfsfitvnm.vimusic.ui.screens.artist.ArtistScreen -import it.vfsfitvnm.vimusic.ui.screens.playlist.PlaylistScreen +import it.hamy.compose.routing.Route0 +import it.hamy.compose.routing.Route1 +import it.hamy.compose.routing.RouteHandlerScope +import it.hamy.muza.enums.BuiltInPlaylist +import it.hamy.muza.ui.screens.album.AlbumScreen +import it.hamy.muza.ui.screens.artist.ArtistScreen +import it.hamy.muza.ui.screens.playlist.PlaylistScreen val albumRoute = Route1("albumRoute") val artistRoute = Route1("artistRoute") diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/album/AlbumScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumScreen.kt similarity index 85% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/album/AlbumScreen.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumScreen.kt index 8b2fdea..0aec2f9 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/album/AlbumScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumScreen.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.album +package it.hamy.muza.ui.screens.album import android.content.Intent import androidx.compose.animation.ExperimentalAnimationApi @@ -17,30 +17,30 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import com.valentinilk.shimmer.shimmer -import it.vfsfitvnm.compose.persist.PersistMapCleanup -import it.vfsfitvnm.compose.persist.persist -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.bodies.BrowseBody -import it.vfsfitvnm.innertube.requests.albumPage -import it.vfsfitvnm.compose.routing.RouteHandler -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.Album -import it.vfsfitvnm.vimusic.models.SongAlbumMap -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderPlaceholder -import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold -import it.vfsfitvnm.vimusic.ui.components.themed.adaptiveThumbnailContent -import it.vfsfitvnm.vimusic.ui.items.AlbumItem -import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder -import it.vfsfitvnm.vimusic.ui.screens.albumRoute -import it.vfsfitvnm.vimusic.ui.screens.globalRoutes -import it.vfsfitvnm.vimusic.ui.screens.searchresult.ItemsPage -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.asMediaItem +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.persist.persist +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.requests.albumPage +import it.hamy.compose.routing.RouteHandler +import it.hamy.muza.Database +import it.hamy.muza.R +import it.hamy.muza.models.Album +import it.hamy.muza.models.SongAlbumMap +import it.hamy.muza.query +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.HeaderIconButton +import it.hamy.muza.ui.components.themed.HeaderPlaceholder +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent +import it.hamy.muza.ui.items.AlbumItem +import it.hamy.muza.ui.items.AlbumItemPlaceholder +import it.hamy.muza.ui.screens.albumRoute +import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.screens.searchresult.ItemsPage +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.asMediaItem import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.combine import kotlinx.coroutines.withContext @@ -122,7 +122,7 @@ fun AlbumScreen(browseId: String) { val (colorPalette) = LocalAppearance.current val context = LocalContext.current - Header(title = album?.title ?: "Unknown") { + Header(title = album?.title ?: "Неизвестный") { textButton?.invoke() Spacer( @@ -182,8 +182,8 @@ fun AlbumScreen(browseId: String) { tabIndex = tabIndex, onTabChanged = { tabIndex = it }, tabColumnContent = { Item -> - Item(0, "Songs", R.drawable.musical_notes) - Item(1, "Other versions", R.drawable.disc) + Item(0, "Песни", R.drawable.musical_notes) + Item(1, "Другие версии", R.drawable.disc) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { @@ -203,7 +203,7 @@ fun AlbumScreen(browseId: String) { headerContent = headerContent, initialPlaceholderCount = 1, continuationPlaceholderCount = 1, - emptyItemsText = "This album doesn't have any alternative version", + emptyItemsText = "Этот альбом не имеет других версий", itemsPageProvider = albumPage?.let { ({ Result.success( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/album/AlbumSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumSongs.kt similarity index 81% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/album/AlbumSongs.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumSongs.kt index ae0352e..a4dff33 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/album/AlbumSongs.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumSongs.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.album +package it.hamy.muza.ui.screens.album import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi @@ -22,30 +22,30 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextOverflow -import it.vfsfitvnm.compose.persist.persistList -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.Song -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.ShimmerHost -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail -import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.center -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.enqueue -import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex -import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning -import it.vfsfitvnm.vimusic.utils.isLandscape -import it.vfsfitvnm.vimusic.utils.semiBold +import it.hamy.compose.persist.persistList +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.models.Song +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.ShimmerHost +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail +import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.center +import it.hamy.muza.utils.color +import it.hamy.muza.utils.enqueue +import it.hamy.muza.utils.forcePlayAtIndex +import it.hamy.muza.utils.forcePlayFromBeginning +import it.hamy.muza.utils.isLandscape +import it.hamy.muza.utils.semiBold @ExperimentalAnimationApi @ExperimentalFoundationApi @@ -86,7 +86,7 @@ fun AlbumSongs( Column(horizontalAlignment = Alignment.CenterHorizontally) { headerContent { SecondaryTextButton( - text = "Enqueue", + text = "В очередь", enabled = songs.isNotEmpty(), onClick = { binder?.player?.enqueue(songs.map(Song::asMediaItem)) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistLocalSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistLocalSongs.kt similarity index 80% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistLocalSongs.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistLocalSongs.kt index aad59e7..65dc964 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistLocalSongs.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistLocalSongs.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.artist +package it.hamy.muza.ui.screens.artist import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi @@ -19,27 +19,27 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import it.vfsfitvnm.compose.persist.persist -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.Song -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.ShimmerHost -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail -import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.enqueue -import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex -import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning +import it.hamy.compose.persist.persist +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.models.Song +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.ShimmerHost +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail +import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.enqueue +import it.hamy.muza.utils.forcePlayAtIndex +import it.hamy.muza.utils.forcePlayFromBeginning @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -81,7 +81,7 @@ fun ArtistLocalSongs( Column(horizontalAlignment = Alignment.CenterHorizontally) { headerContent { SecondaryTextButton( - text = "Enqueue", + text = "В очередь", enabled = !songs.isNullOrEmpty(), onClick = { binder?.player?.enqueue(songs!!.map(Song::asMediaItem)) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistOverview.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistOverview.kt similarity index 88% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistOverview.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistOverview.kt index 74592af..9a17ce2 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistOverview.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistOverview.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.artist +package it.hamy.muza.ui.screens.artist import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi @@ -26,31 +26,31 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.NavigationEndpoint -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.ShimmerHost -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail -import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton -import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder -import it.vfsfitvnm.vimusic.ui.items.AlbumItem -import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.align -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.forcePlay -import it.vfsfitvnm.vimusic.utils.secondary -import it.vfsfitvnm.vimusic.utils.semiBold +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.NavigationEndpoint +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.ShimmerHost +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail +import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.items.AlbumItem +import it.hamy.muza.ui.items.AlbumItemPlaceholder +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.align +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.color +import it.hamy.muza.utils.forcePlay +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -103,7 +103,7 @@ fun ArtistOverview( headerContent { youtubeArtistPage?.shuffleEndpoint?.let { endpoint -> SecondaryTextButton( - text = "Shuffle", + text = "Перемешать", onClick = { binder?.stopRadio() binder?.playRadio(endpoint) @@ -125,14 +125,14 @@ fun ArtistOverview( .padding(endPaddingValues) ) { BasicText( - text = "Songs", + text = "Песни", style = typography.m.semiBold, modifier = sectionTextModifier ) youtubeArtistPage.songsEndpoint?.let { BasicText( - text = "View all", + text = "Все", style = typography.xs.secondary, modifier = sectionTextModifier .clickable(onClick = onViewAllSongsClick), @@ -178,14 +178,14 @@ fun ArtistOverview( .padding(endPaddingValues) ) { BasicText( - text = "Albums", + text = "Альбомы", style = typography.m.semiBold, modifier = sectionTextModifier ) youtubeArtistPage.albumsEndpoint?.let { BasicText( - text = "View all", + text = "Все", style = typography.xs.secondary, modifier = sectionTextModifier .clickable(onClick = onViewAllAlbumsClick), @@ -223,14 +223,14 @@ fun ArtistOverview( .padding(endPaddingValues) ) { BasicText( - text = "Singles", + text = "Синглы", style = typography.m.semiBold, modifier = sectionTextModifier ) youtubeArtistPage.singlesEndpoint?.let { BasicText( - text = "View all", + text = "Все", style = typography.xs.secondary, modifier = sectionTextModifier .clickable(onClick = onViewAllSinglesClick), diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistScreen.kt similarity index 90% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistScreen.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistScreen.kt index d252e97..b4d5bb6 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistScreen.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.artist +package it.hamy.muza.ui.screens.artist import android.content.Intent import androidx.compose.animation.ExperimentalAnimationApi @@ -17,41 +17,41 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import com.valentinilk.shimmer.shimmer -import it.vfsfitvnm.compose.persist.PersistMapCleanup -import it.vfsfitvnm.compose.persist.persist -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.bodies.BrowseBody -import it.vfsfitvnm.innertube.models.bodies.ContinuationBody -import it.vfsfitvnm.innertube.requests.artistPage -import it.vfsfitvnm.innertube.requests.itemsPage -import it.vfsfitvnm.innertube.utils.from -import it.vfsfitvnm.compose.routing.RouteHandler -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.Artist -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderPlaceholder -import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold -import it.vfsfitvnm.vimusic.ui.components.themed.adaptiveThumbnailContent -import it.vfsfitvnm.vimusic.ui.items.AlbumItem -import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder -import it.vfsfitvnm.vimusic.ui.screens.albumRoute -import it.vfsfitvnm.vimusic.ui.screens.globalRoutes -import it.vfsfitvnm.vimusic.ui.screens.searchresult.ItemsPage -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.artistScreenTabIndexKey -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.forcePlay -import it.vfsfitvnm.vimusic.utils.rememberPreference +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.persist.persist +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.models.bodies.ContinuationBody +import it.hamy.innertube.requests.artistPage +import it.hamy.innertube.requests.itemsPage +import it.hamy.innertube.utils.from +import it.hamy.compose.routing.RouteHandler +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.models.Artist +import it.hamy.muza.query +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.HeaderIconButton +import it.hamy.muza.ui.components.themed.HeaderPlaceholder +import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent +import it.hamy.muza.ui.items.AlbumItem +import it.hamy.muza.ui.items.AlbumItemPlaceholder +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.screens.albumRoute +import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.screens.searchresult.ItemsPage +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.artistScreenTabIndexKey +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.forcePlay +import it.hamy.muza.utils.rememberPreference import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt similarity index 77% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt index 2d678d9..8e86543 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.builtinplaylist +package it.hamy.muza.ui.screens.builtinplaylist import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi @@ -6,12 +6,12 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveableStateHolder -import it.vfsfitvnm.compose.persist.PersistMapCleanup -import it.vfsfitvnm.compose.routing.RouteHandler -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist -import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold -import it.vfsfitvnm.vimusic.ui.screens.globalRoutes +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.routing.RouteHandler +import it.hamy.muza.R +import it.hamy.muza.enums.BuiltInPlaylist +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.screens.globalRoutes @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -38,8 +38,8 @@ fun BuiltInPlaylistScreen(builtInPlaylist: BuiltInPlaylist) { tabIndex = tabIndex, onTabChanged = onTabIndexChanged, tabColumnContent = { Item -> - Item(0, "Favorites", R.drawable.heart) - Item(1, "Offline", R.drawable.airplane) + Item(0, "Любимые", R.drawable.heart) + Item(1, "Сохранённые", R.drawable.airplane) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt similarity index 79% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt index 546625e..cdbcae5 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.builtinplaylist +package it.hamy.muza.ui.screens.builtinplaylist import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi @@ -20,28 +20,28 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import it.vfsfitvnm.compose.persist.persistList -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist -import it.vfsfitvnm.vimusic.models.Song -import it.vfsfitvnm.vimusic.models.SongWithContentLength -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.enqueue -import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex -import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning +import it.hamy.compose.persist.persistList +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.enums.BuiltInPlaylist +import it.hamy.muza.models.Song +import it.hamy.muza.models.SongWithContentLength +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.InHistoryMediaItemMenu +import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.enqueue +import it.hamy.muza.utils.forcePlayAtIndex +import it.hamy.muza.utils.forcePlayFromBeginning import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map @@ -94,14 +94,14 @@ fun BuiltInPlaylistSongs(builtInPlaylist: BuiltInPlaylist) { ) { Header( title = when (builtInPlaylist) { - BuiltInPlaylist.Favorites -> "Favorites" - BuiltInPlaylist.Offline -> "Offline" + BuiltInPlaylist.Favorites -> "Любимые" + BuiltInPlaylist.Offline -> "Сохранённые" }, modifier = Modifier .padding(bottom = 8.dp) ) { SecondaryTextButton( - text = "Enqueue", + text = "В очередь", enabled = songs.isNotEmpty(), onClick = { binder?.player?.enqueue(songs.map(Song::asMediaItem)) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeAlbums.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeAlbums.kt similarity index 81% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeAlbums.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeAlbums.kt index 5321ec9..41b6ac8 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeAlbums.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeAlbums.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.home +package it.hamy.muza.ui.screens.home import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.LinearEasing @@ -15,34 +15,32 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.unit.dp -import it.vfsfitvnm.compose.persist.persist -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.enums.AlbumSortBy -import it.vfsfitvnm.vimusic.enums.SortOrder -import it.vfsfitvnm.vimusic.models.Album -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton -import it.vfsfitvnm.vimusic.ui.items.AlbumItem -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.albumSortByKey -import it.vfsfitvnm.vimusic.utils.albumSortOrderKey -import it.vfsfitvnm.vimusic.utils.rememberPreference +import it.hamy.compose.persist.persist +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R +import it.hamy.muza.enums.AlbumSortBy +import it.hamy.muza.enums.SortOrder +import it.hamy.muza.models.Album +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.HeaderIconButton +import it.hamy.muza.ui.items.AlbumItem +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.albumSortByKey +import it.hamy.muza.utils.albumSortOrderKey +import it.hamy.muza.utils.rememberPreference @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -85,7 +83,7 @@ fun HomeAlbums( key = "header", contentType = 0 ) { - Header(title = "Albums") { + Header(title = "Альбомы") { HeaderIconButton( icon = R.drawable.calendar, color = if (sortBy == AlbumSortBy.Year) colorPalette.text else colorPalette.textDisabled, diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeArtists.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeArtists.kt similarity index 83% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeArtists.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeArtists.kt index 4eeba41..16ec07d 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeArtists.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeArtists.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.home +package it.hamy.muza.ui.screens.home import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.LinearEasing @@ -28,23 +28,23 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.unit.dp -import it.vfsfitvnm.compose.persist.persistList -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.enums.ArtistSortBy -import it.vfsfitvnm.vimusic.enums.SortOrder -import it.vfsfitvnm.vimusic.models.Artist -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton -import it.vfsfitvnm.vimusic.ui.items.ArtistItem -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.artistSortByKey -import it.vfsfitvnm.vimusic.utils.artistSortOrderKey -import it.vfsfitvnm.vimusic.utils.rememberPreference +import it.hamy.compose.persist.persistList +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R +import it.hamy.muza.enums.ArtistSortBy +import it.hamy.muza.enums.SortOrder +import it.hamy.muza.models.Artist +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.HeaderIconButton +import it.hamy.muza.ui.items.ArtistItem +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.artistSortByKey +import it.hamy.muza.utils.artistSortOrderKey +import it.hamy.muza.utils.rememberPreference @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -94,7 +94,7 @@ fun HomeArtistList( contentType = 0, span = { GridItemSpan(maxLineSpan) } ) { - Header(title = "Artists") { + Header(title = "Исполнители") { HeaderIconButton( icon = R.drawable.text, color = if (sortBy == ArtistSortBy.Name) colorPalette.text else colorPalette.textDisabled, diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomePlaylists.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomePlaylists.kt similarity index 83% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomePlaylists.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomePlaylists.kt index 91ac7df..6cb1de5 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomePlaylists.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomePlaylists.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.home +package it.hamy.muza.ui.screens.home import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.LinearEasing @@ -30,28 +30,28 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.unit.dp -import it.vfsfitvnm.compose.persist.persistList -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist -import it.vfsfitvnm.vimusic.enums.PlaylistSortBy -import it.vfsfitvnm.vimusic.enums.SortOrder -import it.vfsfitvnm.vimusic.models.Playlist -import it.vfsfitvnm.vimusic.models.PlaylistPreview -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton -import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton -import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog -import it.vfsfitvnm.vimusic.ui.items.PlaylistItem -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.playlistSortByKey -import it.vfsfitvnm.vimusic.utils.playlistSortOrderKey -import it.vfsfitvnm.vimusic.utils.rememberPreference +import it.hamy.compose.persist.persistList +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R +import it.hamy.muza.enums.BuiltInPlaylist +import it.hamy.muza.enums.PlaylistSortBy +import it.hamy.muza.enums.SortOrder +import it.hamy.muza.models.Playlist +import it.hamy.muza.models.PlaylistPreview +import it.hamy.muza.query +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.HeaderIconButton +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.components.themed.TextFieldDialog +import it.hamy.muza.ui.items.PlaylistItem +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.playlistSortByKey +import it.hamy.muza.utils.playlistSortOrderKey +import it.hamy.muza.utils.rememberPreference @ExperimentalAnimationApi @ExperimentalFoundationApi @@ -69,7 +69,7 @@ fun HomePlaylists( if (isCreatingANewPlaylist) { TextFieldDialog( - hintText = "Enter the playlist name", + hintText = "Введите название плейлиста", onDismiss = { isCreatingANewPlaylist = false }, @@ -116,9 +116,9 @@ fun HomePlaylists( .background(colorPalette.background0) ) { item(key = "header", contentType = 0, span = { GridItemSpan(maxLineSpan) }) { - Header(title = "Playlists") { + Header(title = "Плейлисты") { SecondaryTextButton( - text = "New playlist", + text = "Новый плейлист", onClick = { isCreatingANewPlaylist = true } ) @@ -164,7 +164,7 @@ fun HomePlaylists( PlaylistItem( icon = R.drawable.heart, colorTint = colorPalette.red, - name = "Favorites", + name = "Любимые", songCount = null, thumbnailSizeDp = thumbnailSizeDp, alternative = true, @@ -178,7 +178,7 @@ fun HomePlaylists( PlaylistItem( icon = R.drawable.airplane, colorTint = colorPalette.blue, - name = "Offline", + name = "Сохранённые", songCount = null, thumbnailSizeDp = thumbnailSizeDp, alternative = true, diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeScreen.kt similarity index 67% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeScreen.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeScreen.kt index 6dedb89..92aa3a6 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeScreen.kt @@ -1,41 +1,41 @@ -package it.vfsfitvnm.vimusic.ui.screens.home +package it.hamy.muza.ui.screens.home import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.runtime.Composable import androidx.compose.runtime.saveable.rememberSaveableStateHolder import androidx.compose.ui.platform.LocalContext -import it.vfsfitvnm.compose.persist.PersistMapCleanup -import it.vfsfitvnm.compose.routing.RouteHandler -import it.vfsfitvnm.compose.routing.defaultStacking -import it.vfsfitvnm.compose.routing.defaultStill -import it.vfsfitvnm.compose.routing.defaultUnstacking -import it.vfsfitvnm.compose.routing.isStacking -import it.vfsfitvnm.compose.routing.isUnknown -import it.vfsfitvnm.compose.routing.isUnstacking -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.SearchQuery -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold -import it.vfsfitvnm.vimusic.ui.screens.albumRoute -import it.vfsfitvnm.vimusic.ui.screens.artistRoute -import it.vfsfitvnm.vimusic.ui.screens.builtInPlaylistRoute -import it.vfsfitvnm.vimusic.ui.screens.builtinplaylist.BuiltInPlaylistScreen -import it.vfsfitvnm.vimusic.ui.screens.globalRoutes -import it.vfsfitvnm.vimusic.ui.screens.localPlaylistRoute -import it.vfsfitvnm.vimusic.ui.screens.localplaylist.LocalPlaylistScreen -import it.vfsfitvnm.vimusic.ui.screens.playlistRoute -import it.vfsfitvnm.vimusic.ui.screens.search.SearchScreen -import it.vfsfitvnm.vimusic.ui.screens.searchResultRoute -import it.vfsfitvnm.vimusic.ui.screens.searchRoute -import it.vfsfitvnm.vimusic.ui.screens.searchresult.SearchResultScreen -import it.vfsfitvnm.vimusic.ui.screens.settings.SettingsScreen -import it.vfsfitvnm.vimusic.ui.screens.settingsRoute -import it.vfsfitvnm.vimusic.utils.homeScreenTabIndexKey -import it.vfsfitvnm.vimusic.utils.pauseSearchHistoryKey -import it.vfsfitvnm.vimusic.utils.preferences -import it.vfsfitvnm.vimusic.utils.rememberPreference +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.routing.RouteHandler +import it.hamy.compose.routing.defaultStacking +import it.hamy.compose.routing.defaultStill +import it.hamy.compose.routing.defaultUnstacking +import it.hamy.compose.routing.isStacking +import it.hamy.compose.routing.isUnknown +import it.hamy.compose.routing.isUnstacking +import it.hamy.muza.Database +import it.hamy.muza.R +import it.hamy.muza.models.SearchQuery +import it.hamy.muza.query +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.screens.albumRoute +import it.hamy.muza.ui.screens.artistRoute +import it.hamy.muza.ui.screens.builtInPlaylistRoute +import it.hamy.muza.ui.screens.builtinplaylist.BuiltInPlaylistScreen +import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.screens.localPlaylistRoute +import it.hamy.muza.ui.screens.localplaylist.LocalPlaylistScreen +import it.hamy.muza.ui.screens.playlistRoute +import it.hamy.muza.ui.screens.search.SearchScreen +import it.hamy.muza.ui.screens.searchResultRoute +import it.hamy.muza.ui.screens.searchRoute +import it.hamy.muza.ui.screens.searchresult.SearchResultScreen +import it.hamy.muza.ui.screens.settings.SettingsScreen +import it.hamy.muza.ui.screens.settingsRoute +import it.hamy.muza.utils.homeScreenTabIndexKey +import it.hamy.muza.utils.pauseSearchHistoryKey +import it.hamy.muza.utils.preferences +import it.hamy.muza.utils.rememberPreference @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -119,11 +119,11 @@ fun HomeScreen(onPlaylistUrl: (String) -> Unit) { tabIndex = tabIndex, onTabChanged = onTabChanged, tabColumnContent = { Item -> - Item(0, "Quick picks", R.drawable.sparkles) - Item(1, "Songs", R.drawable.musical_notes) - Item(2, "Playlists", R.drawable.playlist) - Item(3, "Artists", R.drawable.person) - Item(4, "Albums", R.drawable.disc) + Item(0, "Обзор", R.drawable.sparkles) + Item(1, "Песни", R.drawable.musical_notes) + Item(2, "Плейлисты", R.drawable.playlist) + Item(3, "Исполнители", R.drawable.person) + Item(4, "Альбомы", R.drawable.disc) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeSongs.kt similarity index 82% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeSongs.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeSongs.kt index c0f6ebb..fb1913f 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeSongs.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeSongs.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.home +package it.hamy.muza.ui.screens.home import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.LinearEasing @@ -31,33 +31,33 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import it.vfsfitvnm.compose.persist.persistList -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.enums.SongSortBy -import it.vfsfitvnm.vimusic.enums.SortOrder -import it.vfsfitvnm.vimusic.models.Song -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton -import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.onOverlay -import it.vfsfitvnm.vimusic.ui.styling.overlay -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.center -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex -import it.vfsfitvnm.vimusic.utils.rememberPreference -import it.vfsfitvnm.vimusic.utils.semiBold -import it.vfsfitvnm.vimusic.utils.songSortByKey -import it.vfsfitvnm.vimusic.utils.songSortOrderKey +import it.hamy.compose.persist.persistList +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.enums.SongSortBy +import it.hamy.muza.enums.SortOrder +import it.hamy.muza.models.Song +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.HeaderIconButton +import it.hamy.muza.ui.components.themed.InHistoryMediaItemMenu +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.onOverlay +import it.hamy.muza.ui.styling.overlay +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.center +import it.hamy.muza.utils.color +import it.hamy.muza.utils.forcePlayAtIndex +import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.semiBold +import it.hamy.muza.utils.songSortByKey +import it.hamy.muza.utils.songSortOrderKey @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -102,7 +102,7 @@ fun HomeSongs( key = "header", contentType = 0 ) { - Header(title = "Songs") { + Header(title = "Песни") { HeaderIconButton( icon = R.drawable.trending, color = if (sortBy == SongSortBy.PlayTime) colorPalette.text else colorPalette.textDisabled, diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/QuickPicks.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/QuickPicks.kt similarity index 87% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/QuickPicks.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/home/QuickPicks.kt index 37f6ff6..83e5822 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/QuickPicks.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/QuickPicks.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.home +package it.hamy.muza.ui.screens.home import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi @@ -38,41 +38,41 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import it.vfsfitvnm.compose.persist.persist -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.NavigationEndpoint -import it.vfsfitvnm.innertube.models.bodies.NextBody -import it.vfsfitvnm.innertube.requests.relatedPage -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.Song -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.ShimmerHost -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder -import it.vfsfitvnm.vimusic.ui.items.AlbumItem -import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder -import it.vfsfitvnm.vimusic.ui.items.ArtistItem -import it.vfsfitvnm.vimusic.ui.items.ArtistItemPlaceholder -import it.vfsfitvnm.vimusic.ui.items.PlaylistItem -import it.vfsfitvnm.vimusic.ui.items.PlaylistItemPlaceholder -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.SnapLayoutInfoProvider -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.center -import it.vfsfitvnm.vimusic.utils.forcePlay -import it.vfsfitvnm.vimusic.utils.isLandscape -import it.vfsfitvnm.vimusic.utils.secondary -import it.vfsfitvnm.vimusic.utils.semiBold +import it.hamy.compose.persist.persist +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.NavigationEndpoint +import it.hamy.innertube.models.bodies.NextBody +import it.hamy.innertube.requests.relatedPage +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.models.Song +import it.hamy.muza.query +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.ShimmerHost +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.items.AlbumItem +import it.hamy.muza.ui.items.AlbumItemPlaceholder +import it.hamy.muza.ui.items.ArtistItem +import it.hamy.muza.ui.items.ArtistItemPlaceholder +import it.hamy.muza.ui.items.PlaylistItem +import it.hamy.muza.ui.items.PlaylistItemPlaceholder +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.SnapLayoutInfoProvider +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.center +import it.hamy.muza.utils.forcePlay +import it.hamy.muza.utils.isLandscape +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold import kotlinx.coroutines.flow.distinctUntilChanged @ExperimentalFoundationApi @@ -152,7 +152,7 @@ fun QuickPicks( ) ) { Header( - title = "Quick picks", + title = "Обзор", modifier = Modifier .padding(endPaddingValues) ) @@ -248,7 +248,7 @@ fun QuickPicks( related.albums?.let { albums -> BasicText( - text = "Related albums", + text = "Похожие альбомы", style = typography.m.semiBold, modifier = sectionTextModifier ) @@ -272,7 +272,7 @@ fun QuickPicks( related.artists?.let { artists -> BasicText( - text = "Similar artists", + text = "Похожие исполнители", style = typography.m.semiBold, modifier = sectionTextModifier ) @@ -296,7 +296,7 @@ fun QuickPicks( related.playlists?.let { playlists -> BasicText( - text = "Playlists you might like", + text = "Плейлисты, которые вам понравятся", style = typography.m.semiBold, modifier = Modifier .padding(horizontal = 16.dp) @@ -323,7 +323,7 @@ fun QuickPicks( Unit } ?: relatedPageResult?.exceptionOrNull()?.let { BasicText( - text = "An error has occurred", + text = "Упс, тут какая-то ошЫбочка...", style = typography.s.secondary.center, modifier = Modifier .align(Alignment.CenterHorizontally) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistScreen.kt similarity index 77% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistScreen.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistScreen.kt index 8df4f82..11118a0 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistScreen.kt @@ -1,14 +1,14 @@ -package it.vfsfitvnm.vimusic.ui.screens.localplaylist +package it.hamy.muza.ui.screens.localplaylist import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.runtime.Composable import androidx.compose.runtime.saveable.rememberSaveableStateHolder -import it.vfsfitvnm.compose.persist.PersistMapCleanup -import it.vfsfitvnm.compose.routing.RouteHandler -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold -import it.vfsfitvnm.vimusic.ui.screens.globalRoutes +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.routing.RouteHandler +import it.hamy.muza.R +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.screens.globalRoutes @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -28,7 +28,7 @@ fun LocalPlaylistScreen(playlistId: Long) { tabIndex = 0, onTabChanged = { }, tabColumnContent = { Item -> - Item(0, "Songs", R.drawable.musical_notes) + Item(0, "Песни", R.drawable.musical_notes) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(currentTabIndex) { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistSongs.kt similarity index 81% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistSongs.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistSongs.kt index ad18145..943e63f 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistSongs.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistSongs.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.localplaylist +package it.hamy.muza.ui.screens.localplaylist import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi @@ -23,44 +23,44 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import it.vfsfitvnm.compose.persist.persist -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.bodies.BrowseBody -import it.vfsfitvnm.innertube.requests.playlistPage -import it.vfsfitvnm.compose.reordering.ReorderingLazyColumn -import it.vfsfitvnm.compose.reordering.animateItemPlacement -import it.vfsfitvnm.compose.reordering.draggedItem -import it.vfsfitvnm.compose.reordering.rememberReorderingState -import it.vfsfitvnm.compose.reordering.reorder -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.PlaylistWithSongs -import it.vfsfitvnm.vimusic.models.Song -import it.vfsfitvnm.vimusic.models.SongPlaylistMap -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.transaction -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.themed.ConfirmationDialog -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton -import it.vfsfitvnm.vimusic.ui.components.themed.IconButton -import it.vfsfitvnm.vimusic.ui.components.themed.InPlaylistMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.Menu -import it.vfsfitvnm.vimusic.ui.components.themed.MenuEntry -import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton -import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.completed -import it.vfsfitvnm.vimusic.utils.enqueue -import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex -import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning +import it.hamy.compose.persist.persist +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.requests.playlistPage +import it.hamy.compose.reordering.ReorderingLazyColumn +import it.hamy.compose.reordering.animateItemPlacement +import it.hamy.compose.reordering.draggedItem +import it.hamy.compose.reordering.rememberReorderingState +import it.hamy.compose.reordering.reorder +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.models.PlaylistWithSongs +import it.hamy.muza.models.Song +import it.hamy.muza.models.SongPlaylistMap +import it.hamy.muza.query +import it.hamy.muza.transaction +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.themed.ConfirmationDialog +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.HeaderIconButton +import it.hamy.muza.ui.components.themed.IconButton +import it.hamy.muza.ui.components.themed.InPlaylistMediaItemMenu +import it.hamy.muza.ui.components.themed.Menu +import it.hamy.muza.ui.components.themed.MenuEntry +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.components.themed.TextFieldDialog +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.completed +import it.hamy.muza.utils.enqueue +import it.hamy.muza.utils.forcePlayAtIndex +import it.hamy.muza.utils.forcePlayFromBeginning import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.runBlocking @@ -102,7 +102,7 @@ fun LocalPlaylistSongs( if (isRenaming) { TextFieldDialog( - hintText = "Enter the playlist name", + hintText = "Введите название плейлиста", initialTextInput = playlistWithSongs?.playlist?.name ?: "", onDismiss = { isRenaming = false }, onDone = { text -> @@ -119,7 +119,7 @@ fun LocalPlaylistSongs( if (isDeleting) { ConfirmationDialog( - text = "Do you really want to delete this playlist?", + text = "Вы реально хотите удалить этот плейлист?", onDismiss = { isDeleting = false }, onConfirm = { query { @@ -149,7 +149,7 @@ fun LocalPlaylistSongs( contentType = 0 ) { Header( - title = playlistWithSongs?.playlist?.name ?: "Unknown", + title = playlistWithSongs?.playlist?.name ?: "Неизвестный", modifier = Modifier .padding(bottom = 8.dp) ) { @@ -179,7 +179,7 @@ fun LocalPlaylistSongs( playlistWithSongs?.playlist?.browseId?.let { browseId -> MenuEntry( icon = R.drawable.sync, - text = "Sync", + text = "Синхр.", onClick = { menuState.hide() transaction { @@ -210,7 +210,7 @@ fun LocalPlaylistSongs( MenuEntry( icon = R.drawable.pencil, - text = "Rename", + text = "Переименовать", onClick = { menuState.hide() isRenaming = true @@ -219,7 +219,7 @@ fun LocalPlaylistSongs( MenuEntry( icon = R.drawable.trash, - text = "Delete", + text = "Удалить", onClick = { menuState.hide() isDeleting = true diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Controls.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Controls.kt similarity index 91% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Controls.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/player/Controls.kt index f5ccd35..c49d80f 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Controls.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Controls.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.player +package it.hamy.muza.ui.screens.player import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.animateDp @@ -35,23 +35,23 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.media3.common.C import androidx.media3.common.Player -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.Song -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.ui.components.SeekBar -import it.vfsfitvnm.vimusic.ui.components.themed.IconButton -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.favoritesIcon -import it.vfsfitvnm.vimusic.utils.bold -import it.vfsfitvnm.vimusic.utils.forceSeekToNext -import it.vfsfitvnm.vimusic.utils.forceSeekToPrevious -import it.vfsfitvnm.vimusic.utils.formatAsDuration -import it.vfsfitvnm.vimusic.utils.rememberPreference -import it.vfsfitvnm.vimusic.utils.secondary -import it.vfsfitvnm.vimusic.utils.semiBold -import it.vfsfitvnm.vimusic.utils.trackLoopEnabledKey +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.models.Song +import it.hamy.muza.query +import it.hamy.muza.ui.components.SeekBar +import it.hamy.muza.ui.components.themed.IconButton +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.favoritesIcon +import it.hamy.muza.utils.bold +import it.hamy.muza.utils.forceSeekToNext +import it.hamy.muza.utils.forceSeekToPrevious +import it.hamy.muza.utils.formatAsDuration +import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold +import it.hamy.muza.utils.trackLoopEnabledKey import kotlinx.coroutines.flow.distinctUntilChanged @Composable diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Lyrics.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Lyrics.kt similarity index 87% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Lyrics.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/player/Lyrics.kt index b0d7665..c02e2b6 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Lyrics.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Lyrics.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.player +package it.hamy.muza.ui.screens.player import android.app.SearchManager import android.content.ActivityNotFoundException @@ -49,32 +49,32 @@ import androidx.compose.ui.unit.dp import androidx.media3.common.C import androidx.media3.common.MediaMetadata import com.valentinilk.shimmer.shimmer -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.bodies.NextBody -import it.vfsfitvnm.innertube.requests.lyrics -import it.vfsfitvnm.kugou.KuGou -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.Lyrics -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.themed.Menu -import it.vfsfitvnm.vimusic.ui.components.themed.MenuEntry -import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog -import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.DefaultDarkColorPalette -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.PureBlackColorPalette -import it.vfsfitvnm.vimusic.ui.styling.onOverlayShimmer -import it.vfsfitvnm.vimusic.utils.SynchronizedLyrics -import it.vfsfitvnm.vimusic.utils.center -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.isShowingSynchronizedLyricsKey -import it.vfsfitvnm.vimusic.utils.medium -import it.vfsfitvnm.vimusic.utils.rememberPreference -import it.vfsfitvnm.vimusic.utils.toast -import it.vfsfitvnm.vimusic.utils.verticalFadingEdge +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.NextBody +import it.hamy.innertube.requests.lyrics +import it.hamy.kugou.KuGou +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.models.Lyrics +import it.hamy.muza.query +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.themed.Menu +import it.hamy.muza.ui.components.themed.MenuEntry +import it.hamy.muza.ui.components.themed.TextFieldDialog +import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.styling.DefaultDarkColorPalette +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.PureBlackColorPalette +import it.hamy.muza.ui.styling.onOverlayShimmer +import it.hamy.muza.utils.SynchronizedLyrics +import it.hamy.muza.utils.center +import it.hamy.muza.utils.color +import it.hamy.muza.utils.isShowingSynchronizedLyricsKey +import it.hamy.muza.utils.medium +import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.toast +import it.hamy.muza.utils.verticalFadingEdge import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.isActive @@ -169,7 +169,7 @@ fun Lyrics( if (isEditing) { TextFieldDialog( - hintText = "Enter the lyrics", + hintText = "Введите текст песни", initialTextInput = text ?: "", singleLine = false, maxLines = 10, @@ -218,7 +218,7 @@ fun Lyrics( .align(Alignment.TopCenter) ) { BasicText( - text = "An error has occurred while fetching the ${if (isShowingSynchronizedLyrics) "synchronized " else ""}lyrics", + text = "Произошла ошибка при синхронизации ${if (isShowingSynchronizedLyrics) "синхронизирован " else ""}текст песни", style = typography.xs.center.medium.color(PureBlackColorPalette.text), modifier = Modifier .background(Color.Black.copy(0.4f)) @@ -235,7 +235,7 @@ fun Lyrics( .align(Alignment.TopCenter) ) { BasicText( - text = "${if (isShowingSynchronizedLyrics) "Synchronized l" else "L"}yrics are not available for this song", + text = "${if (isShowingSynchronizedLyrics) "Синхронизирован текст" else "Т"}екст песни не доступен", style = typography.xs.center.medium.color(PureBlackColorPalette.text), modifier = Modifier .background(Color.Black.copy(0.4f)) @@ -334,8 +334,8 @@ fun Lyrics( Menu { MenuEntry( icon = R.drawable.time, - text = "Show ${if (isShowingSynchronizedLyrics) "un" else ""}synchronized lyrics", - secondaryText = if (isShowingSynchronizedLyrics) null else "Provided by kugou.com", + text = "Показать ${if (isShowingSynchronizedLyrics) "не" else ""}синхронизированный текст", + secondaryText = if (isShowingSynchronizedLyrics) null else "при помощи kugou.com", onClick = { menuState.hide() isShowingSynchronizedLyrics = @@ -345,7 +345,7 @@ fun Lyrics( MenuEntry( icon = R.drawable.pencil, - text = "Edit lyrics", + text = "Изменить текст песни", onClick = { menuState.hide() isEditing = true @@ -354,7 +354,7 @@ fun Lyrics( MenuEntry( icon = R.drawable.search, - text = "Search lyrics online", + text = "Искать текст в интернете", onClick = { menuState.hide() val mediaMetadata = mediaMetadataProvider() @@ -364,19 +364,19 @@ fun Lyrics( Intent(Intent.ACTION_WEB_SEARCH).apply { putExtra( SearchManager.QUERY, - "${mediaMetadata.title} ${mediaMetadata.artist} lyrics" + "${mediaMetadata.title} ${mediaMetadata.artist} текст песни" ) } ) } catch (e: ActivityNotFoundException) { - context.toast("Couldn't find an application to browse the Internet") + context.toast("На вашем смартфоне не установлен поисковик!") } } ) MenuEntry( icon = R.drawable.download, - text = "Fetch lyrics again", + text = "Обновить текст песни", enabled = lyrics != null, onClick = { menuState.hide() diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/PlaybackError.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/PlaybackError.kt similarity index 89% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/PlaybackError.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/player/PlaybackError.kt index a654e67..d8e2c03 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/PlaybackError.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/PlaybackError.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.player +package it.hamy.muza.ui.screens.player import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn @@ -20,11 +20,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.ui.styling.PureBlackColorPalette -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.center -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.medium +import it.hamy.muza.ui.styling.PureBlackColorPalette +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.center +import it.hamy.muza.utils.color +import it.hamy.muza.utils.medium @Composable fun PlaybackError( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Player.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Player.kt similarity index 91% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Player.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/player/Player.kt index 12b6d10..55bda0f 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Player.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Player.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.player +package it.hamy.muza.ui.screens.player import android.content.ActivityNotFoundException import android.content.Intent @@ -46,31 +46,31 @@ import androidx.compose.ui.unit.dp import androidx.media3.common.MediaItem import androidx.media3.common.Player import coil.compose.AsyncImage -import it.vfsfitvnm.innertube.models.NavigationEndpoint -import it.vfsfitvnm.compose.routing.OnGlobalRoute -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.service.PlayerService -import it.vfsfitvnm.vimusic.ui.components.BottomSheet -import it.vfsfitvnm.vimusic.ui.components.BottomSheetState -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.rememberBottomSheetState -import it.vfsfitvnm.vimusic.ui.components.themed.BaseMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.IconButton -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.collapsedPlayerProgressBar -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.DisposableListener -import it.vfsfitvnm.vimusic.utils.forceSeekToNext -import it.vfsfitvnm.vimusic.utils.isLandscape -import it.vfsfitvnm.vimusic.utils.positionAndDurationState -import it.vfsfitvnm.vimusic.utils.seamlessPlay -import it.vfsfitvnm.vimusic.utils.secondary -import it.vfsfitvnm.vimusic.utils.semiBold -import it.vfsfitvnm.vimusic.utils.shouldBePlaying -import it.vfsfitvnm.vimusic.utils.thumbnail -import it.vfsfitvnm.vimusic.utils.toast +import it.hamy.innertube.models.NavigationEndpoint +import it.hamy.compose.routing.OnGlobalRoute +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.service.PlayerService +import it.hamy.muza.ui.components.BottomSheet +import it.hamy.muza.ui.components.BottomSheetState +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.rememberBottomSheetState +import it.hamy.muza.ui.components.themed.BaseMediaItemMenu +import it.hamy.muza.ui.components.themed.IconButton +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.collapsedPlayerProgressBar +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.DisposableListener +import it.hamy.muza.utils.forceSeekToNext +import it.hamy.muza.utils.isLandscape +import it.hamy.muza.utils.positionAndDurationState +import it.hamy.muza.utils.seamlessPlay +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold +import it.hamy.muza.utils.shouldBePlaying +import it.hamy.muza.utils.thumbnail +import it.hamy.muza.utils.toast import kotlin.math.absoluteValue @ExperimentalFoundationApi @@ -404,7 +404,7 @@ private fun PlayerMenu( } ) } catch (e: ActivityNotFoundException) { - context.toast("Couldn't find an application to equalize audio") + context.toast("На вашем смартфоне не найдено эквалайзера") } }, onShowSleepTimer = {}, diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Queue.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Queue.kt similarity index 90% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Queue.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/player/Queue.kt index 912bcf1..027caf2 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Queue.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Queue.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.player +package it.hamy.muza.ui.screens.player import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedContentScope @@ -53,34 +53,34 @@ import androidx.media3.common.MediaItem import androidx.media3.common.Player import androidx.media3.common.Timeline import com.valentinilk.shimmer.shimmer -import it.vfsfitvnm.compose.reordering.ReorderingLazyColumn -import it.vfsfitvnm.compose.reordering.animateItemPlacement -import it.vfsfitvnm.compose.reordering.draggedItem -import it.vfsfitvnm.compose.reordering.rememberReorderingState -import it.vfsfitvnm.compose.reordering.reorder -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.ui.components.BottomSheet -import it.vfsfitvnm.vimusic.ui.components.BottomSheetState -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.MusicBars -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.IconButton -import it.vfsfitvnm.vimusic.ui.components.themed.QueuedMediaItemMenu -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.onOverlay -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.DisposableListener -import it.vfsfitvnm.vimusic.utils.medium -import it.vfsfitvnm.vimusic.utils.queueLoopEnabledKey -import it.vfsfitvnm.vimusic.utils.rememberPreference -import it.vfsfitvnm.vimusic.utils.shouldBePlaying -import it.vfsfitvnm.vimusic.utils.shuffleQueue -import it.vfsfitvnm.vimusic.utils.smoothScrollToTop -import it.vfsfitvnm.vimusic.utils.windows +import it.hamy.compose.reordering.ReorderingLazyColumn +import it.hamy.compose.reordering.animateItemPlacement +import it.hamy.compose.reordering.draggedItem +import it.hamy.compose.reordering.rememberReorderingState +import it.hamy.compose.reordering.reorder +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.ui.components.BottomSheet +import it.hamy.muza.ui.components.BottomSheetState +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.MusicBars +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.IconButton +import it.hamy.muza.ui.components.themed.QueuedMediaItemMenu +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.onOverlay +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.DisposableListener +import it.hamy.muza.utils.medium +import it.hamy.muza.utils.queueLoopEnabledKey +import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.shouldBePlaying +import it.hamy.muza.utils.shuffleQueue +import it.hamy.muza.utils.smoothScrollToTop +import it.hamy.muza.utils.windows import kotlinx.coroutines.launch @ExperimentalFoundationApi @@ -331,7 +331,7 @@ fun Queue( .height(64.dp) ) { BasicText( - text = "${windows.size} songs", + text = "${windows.size} песни", style = typography.xxs.medium, modifier = Modifier .background( @@ -361,7 +361,7 @@ fun Queue( .animateContentSize() ) { BasicText( - text = "Queue loop ", + text = "Повтор очереди ", style = typography.xxs.medium, ) @@ -377,7 +377,7 @@ fun Queue( } ) { BasicText( - text = if (it) "on" else "off", + text = if (it) "ВКЛ." else "ВЫКЛ.", style = typography.xxs.medium, ) } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/StatsForNerds.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/StatsForNerds.kt similarity index 93% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/StatsForNerds.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/player/StatsForNerds.kt index cf54c5c..12881c1 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/StatsForNerds.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/StatsForNerds.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.player +package it.hamy.muza.ui.screens.player import android.text.format.Formatter import androidx.compose.animation.AnimatedVisibility @@ -27,17 +27,17 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.media3.datasource.cache.Cache import androidx.media3.datasource.cache.CacheSpan -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.bodies.PlayerBody -import it.vfsfitvnm.innertube.requests.player -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.models.Format -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.onOverlay -import it.vfsfitvnm.vimusic.ui.styling.overlay -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.medium +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.PlayerBody +import it.hamy.innertube.requests.player +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.models.Format +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.onOverlay +import it.hamy.muza.ui.styling.overlay +import it.hamy.muza.utils.color +import it.hamy.muza.utils.medium import kotlin.math.roundToInt import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Thumbnail.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Thumbnail.kt similarity index 90% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Thumbnail.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/player/Thumbnail.kt index 2cc4e4d..914a963 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/Thumbnail.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Thumbnail.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.player +package it.hamy.muza.ui.screens.player import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedContentScope @@ -30,18 +30,18 @@ import androidx.media3.common.MediaItem import androidx.media3.common.PlaybackException import androidx.media3.common.Player import coil.compose.AsyncImage -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.service.LoginRequiredException -import it.vfsfitvnm.vimusic.service.PlayableFormatNotFoundException -import it.vfsfitvnm.vimusic.service.UnplayableException -import it.vfsfitvnm.vimusic.service.VideoIdMismatchException -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.currentWindow -import it.vfsfitvnm.vimusic.utils.DisposableListener -import it.vfsfitvnm.vimusic.utils.thumbnail +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.service.LoginRequiredException +import it.hamy.muza.service.PlayableFormatNotFoundException +import it.hamy.muza.service.UnplayableException +import it.hamy.muza.service.VideoIdMismatchException +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.currentWindow +import it.hamy.muza.utils.DisposableListener +import it.hamy.muza.utils.thumbnail import java.net.UnknownHostException import java.nio.channels.UnresolvedAddressException diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/playlist/PlaylistScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistScreen.kt similarity index 75% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/playlist/PlaylistScreen.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistScreen.kt index c73ac9b..d9db75c 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/playlist/PlaylistScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistScreen.kt @@ -1,14 +1,14 @@ -package it.vfsfitvnm.vimusic.ui.screens.playlist +package it.hamy.muza.ui.screens.playlist import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.runtime.Composable import androidx.compose.runtime.saveable.rememberSaveableStateHolder -import it.vfsfitvnm.compose.persist.PersistMapCleanup -import it.vfsfitvnm.compose.routing.RouteHandler -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold -import it.vfsfitvnm.vimusic.ui.screens.globalRoutes +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.routing.RouteHandler +import it.hamy.muza.R +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.screens.globalRoutes @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -27,7 +27,7 @@ fun PlaylistScreen(browseId: String) { tabIndex = 0, onTabChanged = { }, tabColumnContent = { Item -> - Item(0, "Songs", R.drawable.musical_notes) + Item(0, "Песни", R.drawable.musical_notes) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/playlist/PlaylistSongList.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistSongList.kt similarity index 80% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/playlist/PlaylistSongList.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistSongList.kt index 08b8013..e055e2a 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/playlist/PlaylistSongList.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistSongList.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.playlist +package it.hamy.muza.ui.screens.playlist import android.content.Intent import androidx.compose.animation.ExperimentalAnimationApi @@ -25,40 +25,40 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import com.valentinilk.shimmer.shimmer -import it.vfsfitvnm.compose.persist.persist -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.bodies.BrowseBody -import it.vfsfitvnm.innertube.requests.playlistPage -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.Playlist -import it.vfsfitvnm.vimusic.models.SongPlaylistMap -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.transaction -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.ShimmerHost -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderIconButton -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderPlaceholder -import it.vfsfitvnm.vimusic.ui.components.themed.LayoutWithAdaptiveThumbnail -import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton -import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog -import it.vfsfitvnm.vimusic.ui.components.themed.adaptiveThumbnailContent -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.completed -import it.vfsfitvnm.vimusic.utils.enqueue -import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex -import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning -import it.vfsfitvnm.vimusic.utils.isLandscape +import it.hamy.compose.persist.persist +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.requests.playlistPage +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.models.Playlist +import it.hamy.muza.models.SongPlaylistMap +import it.hamy.muza.query +import it.hamy.muza.transaction +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.ShimmerHost +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.HeaderIconButton +import it.hamy.muza.ui.components.themed.HeaderPlaceholder +import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail +import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.components.themed.TextFieldDialog +import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.completed +import it.hamy.muza.utils.enqueue +import it.hamy.muza.utils.forcePlayAtIndex +import it.hamy.muza.utils.forcePlayFromBeginning +import it.hamy.muza.utils.isLandscape import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -92,7 +92,7 @@ fun PlaylistSongList( if (isImportingPlaylist) { TextFieldDialog( - hintText = "Enter the playlist name", + hintText = "Введите название плейлиста", initialTextInput = playlistPage?.title ?: "", onDismiss = { isImportingPlaylist = false }, onDone = { text -> @@ -123,9 +123,9 @@ fun PlaylistSongList( .shimmer() ) } else { - Header(title = playlistPage?.title ?: "Unknown") { + Header(title = playlistPage?.title ?: "Неизвестный") { SecondaryTextButton( - text = "Enqueue", + text = "В очередь", enabled = playlistPage?.songsPage?.items?.isNotEmpty() == true, onClick = { playlistPage?.songsPage?.items?.map(Innertube.SongItem::asMediaItem)?.let { mediaItems -> diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/LocalSongSearch.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/LocalSongSearch.kt similarity index 81% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/LocalSongSearch.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/search/LocalSongSearch.kt index 4d32ea9..3e9fe42 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/LocalSongSearch.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/LocalSongSearch.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.search +package it.hamy.muza.ui.screens.search import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi @@ -22,25 +22,25 @@ import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.style.TextAlign -import it.vfsfitvnm.compose.persist.persistList -import it.vfsfitvnm.innertube.models.NavigationEndpoint -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.models.Song -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.align -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.forcePlay -import it.vfsfitvnm.vimusic.utils.medium +import it.hamy.compose.persist.persistList +import it.hamy.innertube.models.NavigationEndpoint +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.models.Song +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.InHistoryMediaItemMenu +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.align +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.forcePlay +import it.hamy.muza.utils.medium @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -95,7 +95,7 @@ fun LocalSongSearch( actionsContent = { if (textFieldValue.text.isNotEmpty()) { SecondaryTextButton( - text = "Clear", + text = "Очистить", onClick = { onTextFieldValueChanged(TextFieldValue()) } ) } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/OnlineSearch.kt similarity index 91% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/search/OnlineSearch.kt index 5299ab1..c26f477 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/OnlineSearch.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.search +package it.hamy.muza.ui.screens.search import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.Image @@ -43,26 +43,26 @@ import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.core.net.toUri -import it.vfsfitvnm.compose.persist.persist -import it.vfsfitvnm.compose.persist.persistList -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.bodies.SearchSuggestionsBody -import it.vfsfitvnm.innertube.requests.searchSuggestions -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.SearchQuery -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.align -import it.vfsfitvnm.vimusic.utils.center -import it.vfsfitvnm.vimusic.utils.medium -import it.vfsfitvnm.vimusic.utils.pauseSearchHistoryKey -import it.vfsfitvnm.vimusic.utils.preferences -import it.vfsfitvnm.vimusic.utils.secondary +import it.hamy.compose.persist.persist +import it.hamy.compose.persist.persistList +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.SearchSuggestionsBody +import it.hamy.innertube.requests.searchSuggestions +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R +import it.hamy.muza.models.SearchQuery +import it.hamy.muza.query +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.align +import it.hamy.muza.utils.center +import it.hamy.muza.utils.medium +import it.hamy.muza.utils.pauseSearchHistoryKey +import it.hamy.muza.utils.preferences +import it.hamy.muza.utils.secondary import kotlinx.coroutines.delay import kotlinx.coroutines.flow.distinctUntilChanged @@ -160,7 +160,7 @@ fun OnlineSearch( val isAlbum = playlistId.startsWith("OLAK5uy_") SecondaryTextButton( - text = "View ${if (isAlbum) "album" else "playlist"}", + text = "Посмотреть ${if (isAlbum) "альбом" else "плейлист"}", onClick = { onViewPlaylist(textFieldValue.text) } ) } @@ -172,7 +172,7 @@ fun OnlineSearch( if (textFieldValue.text.isNotEmpty()) { SecondaryTextButton( - text = "Clear", + text = "Очистить", onClick = { onTextFieldValueChanged(TextFieldValue()) } ) } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/SearchScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/SearchScreen.kt similarity index 86% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/SearchScreen.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/search/SearchScreen.kt index 49426c3..cb0f86b 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/SearchScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/SearchScreen.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.search +package it.hamy.muza.ui.screens.search import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.ExperimentalAnimationApi @@ -16,13 +16,13 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.TextFieldValue -import it.vfsfitvnm.compose.persist.PersistMapCleanup -import it.vfsfitvnm.compose.routing.RouteHandler -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold -import it.vfsfitvnm.vimusic.ui.screens.globalRoutes -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.secondary +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.routing.RouteHandler +import it.hamy.muza.R +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.secondary @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -66,7 +66,7 @@ fun SearchScreen( .align(Alignment.CenterEnd) ) { BasicText( - text = "Enter a name", + text = "Найти...", maxLines = 1, style = LocalAppearance.current.typography.xxl.secondary ) @@ -82,8 +82,8 @@ fun SearchScreen( tabIndex = tabIndex, onTabChanged = onTabChanged, tabColumnContent = { Item -> - Item(0, "Online", R.drawable.globe) - Item(1, "Library", R.drawable.library) + Item(0, "Онлайн", R.drawable.globe) + Item(1, "Библиотека", R.drawable.library) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(currentTabIndex) { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/searchresult/ItemsPage.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/ItemsPage.kt similarity index 88% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/searchresult/ItemsPage.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/ItemsPage.kt index f2c26db..896416c 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/searchresult/ItemsPage.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/ItemsPage.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.searchresult +package it.hamy.muza.ui.screens.searchresult import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.Box @@ -21,15 +21,15 @@ import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import it.vfsfitvnm.compose.persist.persist -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.utils.plus -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.ui.components.ShimmerHost -import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScrollToTop -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.center -import it.vfsfitvnm.vimusic.utils.secondary +import it.hamy.compose.persist.persist +import it.hamy.innertube.Innertube +import it.hamy.innertube.utils.plus +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.ui.components.ShimmerHost +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.center +import it.hamy.muza.utils.secondary import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -43,7 +43,7 @@ inline fun ItemsPage( modifier: Modifier = Modifier, initialPlaceholderCount: Int = 8, continuationPlaceholderCount: Int = 3, - emptyItemsText: String = "No items found", + emptyItemsText: String = "Ничего не нашлось", noinline itemsPageProvider: (suspend (String?) -> Result?>?)? = null, ) { val (_, typography) = LocalAppearance.current diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/searchresult/SearchResultScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/SearchResultScreen.kt similarity index 86% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/searchresult/SearchResultScreen.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/SearchResultScreen.kt index 46266bb..7a14e87 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/searchresult/SearchResultScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/SearchResultScreen.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.searchresult +package it.hamy.muza.ui.screens.searchresult import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi @@ -11,40 +11,40 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp -import it.vfsfitvnm.compose.persist.PersistMapCleanup -import it.vfsfitvnm.compose.persist.persistMap -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.bodies.ContinuationBody -import it.vfsfitvnm.innertube.models.bodies.SearchBody -import it.vfsfitvnm.innertube.requests.searchPage -import it.vfsfitvnm.innertube.utils.from -import it.vfsfitvnm.compose.routing.RouteHandler -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu -import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold -import it.vfsfitvnm.vimusic.ui.items.AlbumItem -import it.vfsfitvnm.vimusic.ui.items.AlbumItemPlaceholder -import it.vfsfitvnm.vimusic.ui.items.ArtistItem -import it.vfsfitvnm.vimusic.ui.items.ArtistItemPlaceholder -import it.vfsfitvnm.vimusic.ui.items.PlaylistItem -import it.vfsfitvnm.vimusic.ui.items.PlaylistItemPlaceholder -import it.vfsfitvnm.vimusic.ui.items.SongItem -import it.vfsfitvnm.vimusic.ui.items.SongItemPlaceholder -import it.vfsfitvnm.vimusic.ui.items.VideoItem -import it.vfsfitvnm.vimusic.ui.items.VideoItemPlaceholder -import it.vfsfitvnm.vimusic.ui.screens.albumRoute -import it.vfsfitvnm.vimusic.ui.screens.artistRoute -import it.vfsfitvnm.vimusic.ui.screens.globalRoutes -import it.vfsfitvnm.vimusic.ui.screens.playlistRoute -import it.vfsfitvnm.vimusic.ui.styling.Dimensions -import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.forcePlay -import it.vfsfitvnm.vimusic.utils.rememberPreference -import it.vfsfitvnm.vimusic.utils.searchResultScreenTabIndexKey +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.persist.persistMap +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.ContinuationBody +import it.hamy.innertube.models.bodies.SearchBody +import it.hamy.innertube.requests.searchPage +import it.hamy.innertube.utils.from +import it.hamy.compose.routing.RouteHandler +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.items.AlbumItem +import it.hamy.muza.ui.items.AlbumItemPlaceholder +import it.hamy.muza.ui.items.ArtistItem +import it.hamy.muza.ui.items.ArtistItemPlaceholder +import it.hamy.muza.ui.items.PlaylistItem +import it.hamy.muza.ui.items.PlaylistItemPlaceholder +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.items.VideoItem +import it.hamy.muza.ui.items.VideoItemPlaceholder +import it.hamy.muza.ui.screens.albumRoute +import it.hamy.muza.ui.screens.artistRoute +import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.screens.playlistRoute +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.forcePlay +import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.searchResultScreenTabIndexKey @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -75,7 +75,7 @@ fun SearchResultScreen(query: String, onSearchAgain: () -> Unit) { ) } - val emptyItemsText = "No results found. Please try a different query or category" + val emptyItemsText = "Ничего не нашлось" Scaffold( topIconButtonId = R.drawable.chevron_back, @@ -83,12 +83,12 @@ fun SearchResultScreen(query: String, onSearchAgain: () -> Unit) { tabIndex = tabIndex, onTabChanged = onTabIndexChanges, tabColumnContent = { Item -> - Item(0, "Songs", R.drawable.musical_notes) - Item(1, "Albums", R.drawable.disc) - Item(2, "Artists", R.drawable.person) - Item(3, "Videos", R.drawable.film) - Item(4, "Playlists", R.drawable.playlist) - Item(5, "Featured", R.drawable.playlist) + Item(0, "Песни", R.drawable.musical_notes) + Item(1, "Альбомы", R.drawable.disc) + Item(2, "Исполнители", R.drawable.person) + Item(3, "Видео", R.drawable.film) + Item(4, "Плейлисты", R.drawable.playlist) + Item(5, "Рекомендации", R.drawable.playlist) } ) { tabIndex -> saveableStateHolder.SaveableStateProvider(tabIndex) { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/About.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/About.kt similarity index 59% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/About.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/settings/About.kt index 8c52397..077f674 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/About.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/About.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.settings +package it.hamy.muza.ui.screens.settings import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.background @@ -14,11 +14,11 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler -import it.vfsfitvnm.vimusic.BuildConfig -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.secondary +import it.hamy.muza.BuildConfig +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.secondary @ExperimentalAnimationApi @Composable @@ -37,40 +37,40 @@ fun About() { .asPaddingValues() ) ) { - Header(title = "About") { + Header(title = "Информация") { BasicText( - text = "v${BuildConfig.VERSION_NAME} by vfsfitvnm", + text = "v${BuildConfig.VERSION_NAME} by Hamy", style = typography.s.secondary ) } - SettingsEntryGroupText(title = "SOCIAL") + SettingsEntryGroupText(title = "СОЦИАЛЬНОЕ") SettingsEntry( title = "GitHub", - text = "View the source code", + text = "Посмотреть исходный код", onClick = { - uriHandler.openUri("https://github.com/vfsfitvnm/ViMusic") + uriHandler.openUri("https://github.com/hammsterr/muza") + } + ) + + SettingsEntry( + title = "Новости", + text = "Следите за новостями в группе ВКонтакте", + onClick = { + uriHandler.openUri("https://vk.com/hamyack") } ) SettingsGroupSpacer() - SettingsEntryGroupText(title = "TROUBLESHOOTING") + SettingsEntryGroupText(title = "ДИАГНОСТИКА") SettingsEntry( - title = "Report an issue", - text = "You will be redirected to GitHub", + title = "Тех. поддержка", + text = "Сообщайте об ошибках или пожеланиях", onClick = { - uriHandler.openUri("https://github.com/vfsfitvnm/ViMusic/issues/new?assignees=&labels=bug&template=bug_report.yaml") - } - ) - - SettingsEntry( - title = "Request a feature or suggest an idea", - text = "You will be redirected to GitHub", - onClick = { - uriHandler.openUri("https://github.com/vfsfitvnm/ViMusic/issues/new?assignees=&labels=enhancement&template=feature_request.yaml") + uriHandler.openUri("https://hamyack.pages.dev") } ) } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/AppearanceSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/AppearanceSettings.kt similarity index 60% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/AppearanceSettings.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/settings/AppearanceSettings.kt index c684cf9..915877a 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/AppearanceSettings.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/AppearanceSettings.kt @@ -1,5 +1,8 @@ -package it.vfsfitvnm.vimusic.ui.screens.settings +package it.hamy.muza.ui.screens.settings +import android.app.AlertDialog +import android.content.ComponentName +import android.content.pm.PackageManager import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -18,20 +21,23 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.enums.ColorPaletteMode -import it.vfsfitvnm.vimusic.enums.ColorPaletteName -import it.vfsfitvnm.vimusic.enums.ThumbnailRoundness -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.applyFontPaddingKey -import it.vfsfitvnm.vimusic.utils.colorPaletteModeKey -import it.vfsfitvnm.vimusic.utils.colorPaletteNameKey -import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid13 -import it.vfsfitvnm.vimusic.utils.isShowingThumbnailInLockscreenKey -import it.vfsfitvnm.vimusic.utils.rememberPreference -import it.vfsfitvnm.vimusic.utils.thumbnailRoundnessKey -import it.vfsfitvnm.vimusic.utils.useSystemFontKey +import androidx.core.content.ContextCompat +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.enums.ColorPaletteMode +import it.hamy.muza.enums.ColorPaletteName +import it.hamy.muza.enums.ThumbnailRoundness +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.applyFontPaddingKey +import it.hamy.muza.utils.colorPaletteModeKey +import it.hamy.muza.utils.colorPaletteNameKey +import it.hamy.muza.utils.isAtLeastAndroid13 +import it.hamy.muza.utils.isShowingThumbnailInLockscreenKey +import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.thumbnailRoundnessKey +import it.hamy.muza.utils.useSystemFontKey +import it.hamy.muza.* + @ExperimentalAnimationApi @Composable @@ -49,6 +55,7 @@ fun AppearanceSettings() { var isShowingThumbnailInLockscreen by rememberPreference( isShowingThumbnailInLockscreenKey, false + ) Column( @@ -62,18 +69,18 @@ fun AppearanceSettings() { .asPaddingValues() ) ) { - Header(title = "Appearance") + Header(title = "Внешний Вид") - SettingsEntryGroupText(title = "COLORS") + SettingsEntryGroupText(title = "ЦВЕТА") EnumValueSelectorSettingsEntry( - title = "Theme", + title = "Цвет темы", selectedValue = colorPaletteName, onValueSelected = { colorPaletteName = it } ) EnumValueSelectorSettingsEntry( - title = "Theme mode", + title = "Ночная тема", selectedValue = colorPaletteMode, isEnabled = colorPaletteName != ColorPaletteName.PureBlack, onValueSelected = { colorPaletteMode = it } @@ -81,17 +88,24 @@ fun AppearanceSettings() { SettingsGroupSpacer() - SettingsEntryGroupText(title = "SHAPES") + SettingsEntryGroupText(title = "ФОРМЫ") EnumValueSelectorSettingsEntry( - title = "Thumbnail roundness", + title = "Скругление", selectedValue = thumbnailRoundness, onValueSelected = { thumbnailRoundness = it }, trailingContent = { Spacer( modifier = Modifier - .border(width = 1.dp, color = colorPalette.accent, shape = thumbnailRoundness.shape()) - .background(color = colorPalette.background1, shape = thumbnailRoundness.shape()) + .border( + width = 1.dp, + color = colorPalette.accent, + shape = thumbnailRoundness.shape() + ) + .background( + color = colorPalette.background1, + shape = thumbnailRoundness.shape() + ) .size(36.dp) ) } @@ -99,18 +113,18 @@ fun AppearanceSettings() { SettingsGroupSpacer() - SettingsEntryGroupText(title = "TEXT") + SettingsEntryGroupText(title = "ТЕКСТ") SwitchSettingEntry( - title = "Use system font", - text = "Use the font applied by the system", + title = "Системный шрифт", + text = "Использовать системный шрифт", isChecked = useSystemFont, onCheckedChange = { useSystemFont = it } ) SwitchSettingEntry( - title = "Apply font padding", - text = "Add spacing around texts", + title = "Заполнение шрифта", + text = "Увеличить пробелы текста", isChecked = applyFontPadding, onCheckedChange = { applyFontPadding = it } ) @@ -118,14 +132,16 @@ fun AppearanceSettings() { if (!isAtLeastAndroid13) { SettingsGroupSpacer() - SettingsEntryGroupText(title = "LOCKSCREEN") + SettingsEntryGroupText(title = "ЭКРАН БЛОКИРОВКИ") SwitchSettingEntry( - title = "Show song cover", - text = "Use the playing song cover as the lockscreen wallpaper", + title = "Показывать обложку", + text = "Использовать обложку в качестве обоев экрана блокировки", isChecked = isShowingThumbnailInLockscreen, onCheckedChange = { isShowingThumbnailInLockscreen = it } ) } } } + + diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/CacheSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/CacheSettings.kt similarity index 73% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/CacheSettings.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/settings/CacheSettings.kt index 8ab6714..4b950e8 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/CacheSettings.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/CacheSettings.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.settings +package it.hamy.muza.ui.screens.settings import android.text.format.Formatter import androidx.compose.animation.ExperimentalAnimationApi @@ -20,15 +20,15 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import coil.Coil import coil.annotation.ExperimentalCoilApi -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.enums.CoilDiskCacheMaxSize -import it.vfsfitvnm.vimusic.enums.ExoPlayerDiskCacheMaxSize -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.coilDiskCacheMaxSizeKey -import it.vfsfitvnm.vimusic.utils.exoPlayerDiskCacheMaxSizeKey -import it.vfsfitvnm.vimusic.utils.rememberPreference +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.enums.CoilDiskCacheMaxSize +import it.hamy.muza.enums.ExoPlayerDiskCacheMaxSize +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.coilDiskCacheMaxSizeKey +import it.hamy.muza.utils.exoPlayerDiskCacheMaxSizeKey +import it.hamy.muza.utils.rememberPreference @OptIn(ExperimentalCoilApi::class) @ExperimentalAnimationApi @@ -58,9 +58,9 @@ fun CacheSettings() { .asPaddingValues() ) ) { - Header(title = "Cache") + Header(title = "Кэш") - SettingsDescription(text = "When the cache runs out of space, the resources that haven't been accessed for the longest time are cleared") + SettingsDescription(text = "Когда в кэше заканчивается свободное место, очищаются ресурсы, которые давно не используются.") Coil.imageLoader(context).diskCache?.let { diskCache -> val diskCacheSize = remember(diskCache) { @@ -69,7 +69,7 @@ fun CacheSettings() { SettingsGroupSpacer() - SettingsEntryGroupText(title = "IMAGE CACHE") + SettingsEntryGroupText(title = "КЭШ КАРТИНОК") SettingsDescription( text = "${ @@ -77,11 +77,11 @@ fun CacheSettings() { context, diskCacheSize ) - } used (${diskCacheSize * 100 / coilDiskCacheMaxSize.bytes.coerceAtLeast(1)}%)" + } использовано (${diskCacheSize * 100 / coilDiskCacheMaxSize.bytes.coerceAtLeast(1)}%)" ) EnumValueSelectorSettingsEntry( - title = "Max size", + title = "Максимальный размер", selectedValue = coilDiskCacheMaxSize, onValueSelected = { coilDiskCacheMaxSize = it } ) @@ -96,12 +96,12 @@ fun CacheSettings() { SettingsGroupSpacer() - SettingsEntryGroupText(title = "SONG CACHE") + SettingsEntryGroupText(title = "КЭШ ПЕСЕН") SettingsDescription( text = buildString { append(Formatter.formatShortFileSize(context, diskCacheSize)) - append(" used") + append(" использовано") when (val size = exoPlayerDiskCacheMaxSize) { ExoPlayerDiskCacheMaxSize.Unlimited -> {} else -> append(" (${diskCacheSize * 100 / size.bytes}%)") @@ -110,7 +110,7 @@ fun CacheSettings() { ) EnumValueSelectorSettingsEntry( - title = "Max size", + title = "Максимальный размер", selectedValue = exoPlayerDiskCacheMaxSize, onValueSelected = { exoPlayerDiskCacheMaxSize = it } ) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/DatabaseSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/DatabaseSettings.kt similarity index 70% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/DatabaseSettings.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/settings/DatabaseSettings.kt index fe0c892..9f09014 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/DatabaseSettings.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/DatabaseSettings.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.settings +package it.hamy.muza.ui.screens.settings import android.annotation.SuppressLint import android.content.ActivityNotFoundException @@ -20,16 +20,16 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.internal -import it.vfsfitvnm.vimusic.path -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.service.PlayerService -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.intent -import it.vfsfitvnm.vimusic.utils.toast +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.internal +import it.hamy.muza.path +import it.hamy.muza.query +import it.hamy.muza.service.PlayerService +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.intent +import it.hamy.muza.utils.toast import java.io.FileInputStream import java.io.FileOutputStream import java.text.SimpleDateFormat @@ -94,16 +94,16 @@ fun DatabaseSettings() { .asPaddingValues() ) ) { - Header(title = "Database") + Header(title = "Данные") - SettingsEntryGroupText(title = "CLEANUP") + SettingsEntryGroupText(title = "ОЧИСТИТЬ") SettingsEntry( - title = "Reset quick picks", + title = "Очистить воспроизведения", text = if (eventsCount > 0) { - "Delete $eventsCount playback events" + "Удалить $eventsCount событий воспроизведения" } else { - "Quick picks are cleared" + "Воспроизведения были удалены!" }, isEnabled = eventsCount > 0, onClick = { query(Database::clearEvents) } @@ -111,34 +111,34 @@ fun DatabaseSettings() { SettingsGroupSpacer() - SettingsEntryGroupText(title = "BACKUP") + SettingsEntryGroupText(title = "БЭКАП") - SettingsDescription(text = "Personal preferences (i.e. the theme mode) and the cache are excluded.") + SettingsDescription(text = "Личные настройки (ночная тема и т.д.) и кэш исключаются") SettingsEntry( - title = "Backup", - text = "Export the database to the external storage", + title = "Бэкап", + text = "Экспорт данных в локальное хранилище", onClick = { @SuppressLint("SimpleDateFormat") val dateFormat = SimpleDateFormat("yyyyMMddHHmmss") try { - backupLauncher.launch("vimusic_${dateFormat.format(Date())}.db") + backupLauncher.launch("muza_${dateFormat.format(Date())}.db") } catch (e: ActivityNotFoundException) { - context.toast("Couldn't find an application to create documents") + context.toast("не найдено приложения для создания документов") } } ) SettingsGroupSpacer() - SettingsEntryGroupText(title = "RESTORE") + SettingsEntryGroupText(title = "ВОССТАНОВЛЕНИЕ") - ImportantSettingsDescription(text = "Existing data will be overwritten.\n${context.applicationInfo.nonLocalizedLabel} will automatically close itself after restoring the database.") + ImportantSettingsDescription(text = "Существующие настройки будут перезаписаны.\n${context.applicationInfo.nonLocalizedLabel} Будет перезапушена.") SettingsEntry( - title = "Restore", - text = "Import the database from the external storage", + title = "Восстановить", + text = "импорт данных из локального хранилища", onClick = { try { restoreLauncher.launch( @@ -149,7 +149,7 @@ fun DatabaseSettings() { ) ) } catch (e: ActivityNotFoundException) { - context.toast("Couldn't find an application to open documents") + context.toast("не найдено приложения для открытия документов") } } ) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/OtherSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/OtherSettings.kt similarity index 70% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/OtherSettings.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/settings/OtherSettings.kt index 769fd87..4ffbca7 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/OtherSettings.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/OtherSettings.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.settings +package it.hamy.muza.ui.screens.settings import android.annotation.SuppressLint import android.content.ActivityNotFoundException @@ -28,19 +28,19 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import it.vfsfitvnm.vimusic.Database -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.service.PlayerMediaBrowserService -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid12 -import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid6 -import it.vfsfitvnm.vimusic.utils.isIgnoringBatteryOptimizations -import it.vfsfitvnm.vimusic.utils.isInvincibilityEnabledKey -import it.vfsfitvnm.vimusic.utils.pauseSearchHistoryKey -import it.vfsfitvnm.vimusic.utils.rememberPreference -import it.vfsfitvnm.vimusic.utils.toast +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.query +import it.hamy.muza.service.PlayerMediaBrowserService +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.isAtLeastAndroid12 +import it.hamy.muza.utils.isAtLeastAndroid6 +import it.hamy.muza.utils.isIgnoringBatteryOptimizations +import it.hamy.muza.utils.isInvincibilityEnabledKey +import it.hamy.muza.utils.pauseSearchHistoryKey +import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.toast import kotlinx.coroutines.flow.distinctUntilChanged @SuppressLint("BatteryLife") @@ -98,36 +98,36 @@ fun OtherSettings() { .asPaddingValues() ) ) { - Header(title = "Other") + Header(title = "Другое") - SettingsEntryGroupText(title = "ANDROID AUTO") + SettingsEntryGroupText(title = "АНДРОИД АВТО") - SettingsDescription(text = "Remember to enable \"Unknown sources\" in the Developer Settings of Android Auto.") + SettingsDescription(text = "Включите опцию \"неизвестные источники\" в настройках разработчика в Андроид Авто.") SwitchSettingEntry( title = "Android Auto", - text = "Enable Android Auto support", + text = "Включить поддержку Андроид Авто", isChecked = isAndroidAutoEnabled, onCheckedChange = { isAndroidAutoEnabled = it } ) SettingsGroupSpacer() - SettingsEntryGroupText(title = "SEARCH HISTORY") + SettingsEntryGroupText(title = "ИСТОРИЯ ПОИСКА") SwitchSettingEntry( - title = "Pause search history", - text = "Neither save new searched queries nor show history", + title = "Приостановить историю", + text = "Не сохранять историю поиска", isChecked = pauseSearchHistory, onCheckedChange = { pauseSearchHistory = it } ) SettingsEntry( - title = "Clear search history", + title = "Очистить историю поиска", text = if (queriesCount > 0) { - "Delete $queriesCount search queries" + "Удалить $queriesCount поисковых запросов" } else { - "History is empty" + "История чиста" }, isEnabled = queriesCount > 0, onClick = { query(Database::clearQueries) } @@ -135,21 +135,21 @@ fun OtherSettings() { SettingsGroupSpacer() - SettingsEntryGroupText(title = "SERVICE LIFETIME") + SettingsEntryGroupText(title = "ОПТИМИЗАЦИЯ БАТАРЕИ") - ImportantSettingsDescription(text = "If battery optimizations are applied, the playback notification can suddenly disappear when paused.") + ImportantSettingsDescription(text = "Если включена экономия батареи, воспроизведение может внезапно остановиться!") if (isAtLeastAndroid12) { - SettingsDescription(text = "Since Android 12, disabling battery optimizations is required for the \"Invincible service\" option to take effect.") + SettingsDescription(text = "Android 12+: Обязательно отключите экономию батареи, прежде чем включать опцию \"Invincible service\"!") } SettingsEntry( - title = "Ignore battery optimizations", + title = "Игнор. экономии батареи ", isEnabled = !isIgnoringBatteryOptimizations, text = if (isIgnoringBatteryOptimizations) { - "Already unrestricted" + "Уже игнорируется" } else { - "Disable background restrictions" + "Отключить остановку приложения в фоне" }, onClick = { if (!isAtLeastAndroid6) return@SettingsEntry @@ -166,7 +166,7 @@ fun OtherSettings() { Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS) ) } catch (e: ActivityNotFoundException) { - context.toast("Couldn't find battery optimization settings, please whitelist ViMusic manually") + context.toast("не найдено настроек батареи! Добавьте приложение в белый список вручную") } } } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/PlayerSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/PlayerSettings.kt similarity index 69% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/PlayerSettings.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/settings/PlayerSettings.kt index 375cbf8..a20f00e 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/PlayerSettings.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/PlayerSettings.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.settings +package it.hamy.muza.ui.screens.settings import android.content.ActivityNotFoundException import android.content.Intent @@ -20,17 +20,17 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets -import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.isAtLeastAndroid6 -import it.vfsfitvnm.vimusic.utils.persistentQueueKey -import it.vfsfitvnm.vimusic.utils.rememberPreference -import it.vfsfitvnm.vimusic.utils.resumePlaybackWhenDeviceConnectedKey -import it.vfsfitvnm.vimusic.utils.skipSilenceKey -import it.vfsfitvnm.vimusic.utils.toast -import it.vfsfitvnm.vimusic.utils.volumeNormalizationKey +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.isAtLeastAndroid6 +import it.hamy.muza.utils.persistentQueueKey +import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.resumePlaybackWhenDeviceConnectedKey +import it.hamy.muza.utils.skipSilenceKey +import it.hamy.muza.utils.toast +import it.hamy.muza.utils.volumeNormalizationKey @ExperimentalAnimationApi @Composable @@ -61,13 +61,13 @@ fun PlayerSettings() { .asPaddingValues() ) ) { - Header(title = "Player & Audio") + Header(title = "Плеер и Аудио") - SettingsEntryGroupText(title = "PLAYER") + SettingsEntryGroupText(title = "Плеер") SwitchSettingEntry( - title = "Persistent queue", - text = "Save and restore playing songs", + title = "Постоянная очередь", + text = "Сохранение и восстановление воспроизводимых песен", isChecked = persistentQueue, onCheckedChange = { persistentQueue = it @@ -76,8 +76,8 @@ fun PlayerSettings() { if (isAtLeastAndroid6) { SwitchSettingEntry( - title = "Resume playback", - text = "When a wired or bluetooth device is connected", + title = "Возобновление музыки", + text = "При подключении bluetooth устройств", isChecked = resumePlaybackWhenDeviceConnected, onCheckedChange = { resumePlaybackWhenDeviceConnected = it @@ -87,11 +87,11 @@ fun PlayerSettings() { SettingsGroupSpacer() - SettingsEntryGroupText(title = "AUDIO") + SettingsEntryGroupText(title = "АУДИО") SwitchSettingEntry( - title = "Skip silence", - text = "Skip silent parts during playback", + title = "Пропускать тишину", + text = "Пропускать тихие фрагменты песен", isChecked = skipSilence, onCheckedChange = { skipSilence = it @@ -99,8 +99,8 @@ fun PlayerSettings() { ) SwitchSettingEntry( - title = "Loudness normalization", - text = "Adjust the volume to a fixed level", + title = "Нормализация звука", + text = "Фиксированный уровень громкости", isChecked = volumeNormalization, onCheckedChange = { volumeNormalization = it @@ -108,8 +108,8 @@ fun PlayerSettings() { ) SettingsEntry( - title = "Equalizer", - text = "Interact with the system equalizer", + title = "Эквалайзер", + text = "Открыть системный эквалайзер", onClick = { val intent = Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL).apply { putExtra(AudioEffect.EXTRA_AUDIO_SESSION, binder?.player?.audioSessionId) @@ -120,7 +120,7 @@ fun PlayerSettings() { try { activityResultLauncher.launch(intent) } catch (e: ActivityNotFoundException) { - context.toast("Couldn't find an application to equalize audio") + context.toast("не найден эквалайзер") } } ) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/SettingsScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SettingsScreen.kt similarity index 88% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/SettingsScreen.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SettingsScreen.kt index aa67bdb..710c6ad 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SettingsScreen.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.screens.settings +package it.hamy.muza.ui.screens.settings import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi @@ -22,16 +22,16 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.unit.dp -import it.vfsfitvnm.compose.routing.RouteHandler -import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold -import it.vfsfitvnm.vimusic.ui.components.themed.Switch -import it.vfsfitvnm.vimusic.ui.components.themed.ValueSelectorDialog -import it.vfsfitvnm.vimusic.ui.screens.globalRoutes -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.color -import it.vfsfitvnm.vimusic.utils.secondary -import it.vfsfitvnm.vimusic.utils.semiBold +import it.hamy.compose.routing.RouteHandler +import it.hamy.muza.R +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.components.themed.Switch +import it.hamy.muza.ui.components.themed.ValueSelectorDialog +import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.color +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold @ExperimentalFoundationApi @ExperimentalAnimationApi @@ -53,12 +53,12 @@ fun SettingsScreen() { tabIndex = tabIndex, onTabChanged = onTabChanged, tabColumnContent = { Item -> - Item(0, "Appearance", R.drawable.color_palette) - Item(1, "Player", R.drawable.play) - Item(2, "Cache", R.drawable.server) - Item(3, "Database", R.drawable.server) - Item(4, "Other", R.drawable.shapes) - Item(5, "About", R.drawable.information) + Item(0, "Вид", R.drawable.color_palette) + Item(1, "Плеер", R.drawable.play) + Item(2, "Кэш", R.drawable.server) + Item(3, "Данные", R.drawable.server) + Item(4, "Другое", R.drawable.shapes) + Item(5, "Инфо", R.drawable.information) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(currentTabIndex) { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Appearance.kt b/app/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt similarity index 94% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Appearance.kt rename to app/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt index 42fa241..9d92dc1 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Appearance.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.styling +package it.hamy.muza.ui.styling import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.saveable.Saver @@ -30,6 +30,7 @@ data class Appearance( RoundedCornerShape(2.dp) -> 2 RoundedCornerShape(4.dp) -> 4 RoundedCornerShape(8.dp) -> 8 + RoundedCornerShape(16.dp) -> 16 else -> 0 } ) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/ColorPalette.kt b/app/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt similarity index 97% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/ColorPalette.kt rename to app/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt index 84cf6b2..40b67d6 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/ColorPalette.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.styling +package it.hamy.muza.ui.styling import android.graphics.Bitmap import androidx.compose.runtime.Immutable @@ -8,8 +8,8 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.core.graphics.ColorUtils import androidx.palette.graphics.Palette -import it.vfsfitvnm.vimusic.enums.ColorPaletteMode -import it.vfsfitvnm.vimusic.enums.ColorPaletteName +import it.hamy.muza.enums.ColorPaletteMode +import it.hamy.muza.enums.ColorPaletteName @Immutable data class ColorPalette( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Dimensions.kt b/app/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt similarity index 95% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Dimensions.kt rename to app/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt index e6b6004..3186430 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Dimensions.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.styling +package it.hamy.muza.ui.styling import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalConfiguration diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Typography.kt b/app/src/main/kotlin/it/hamy/muza/ui/styling/Typography.kt similarity index 97% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Typography.kt rename to app/src/main/kotlin/it/hamy/muza/ui/styling/Typography.kt index 1c1faa1..8f2530c 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/styling/Typography.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/styling/Typography.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.ui.styling +package it.hamy.muza.ui.styling import androidx.compose.runtime.Immutable import androidx.compose.runtime.saveable.Saver @@ -10,7 +10,7 @@ import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp -import it.vfsfitvnm.vimusic.R +import it.hamy.muza.R @Immutable data class Typography( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Configuration.kt b/app/src/main/kotlin/it/hamy/muza/utils/Configuration.kt similarity index 90% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Configuration.kt rename to app/src/main/kotlin/it/hamy/muza/utils/Configuration.kt index 6011a8f..50e5dfd 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Configuration.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/Configuration.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import android.content.res.Configuration import androidx.compose.runtime.Composable diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Context.kt b/app/src/main/kotlin/it/hamy/muza/utils/Context.kt similarity index 97% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Context.kt rename to app/src/main/kotlin/it/hamy/muza/utils/Context.kt index 04ee2b3..a1356f2 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Context.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/Context.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import android.app.Activity import android.app.PendingIntent diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/DrawScope.kt b/app/src/main/kotlin/it/hamy/muza/utils/DrawScope.kt similarity index 96% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/DrawScope.kt rename to app/src/main/kotlin/it/hamy/muza/utils/DrawScope.kt index 0e62796..440cdf8 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/DrawScope.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/DrawScope.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.* diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/FadingEdge.kt b/app/src/main/kotlin/it/hamy/muza/utils/FadingEdge.kt similarity index 95% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/FadingEdge.kt rename to app/src/main/kotlin/it/hamy/muza/utils/FadingEdge.kt index 8d79e5d..583399f 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/FadingEdge.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/FadingEdge.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawWithContent diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/InvincibleService.kt b/app/src/main/kotlin/it/hamy/muza/utils/InvincibleService.kt similarity index 99% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/InvincibleService.kt rename to app/src/main/kotlin/it/hamy/muza/utils/InvincibleService.kt index acfcd27..17e43c9 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/InvincibleService.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/InvincibleService.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import android.app.Notification import android.app.Service diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/LazyGridSnapLayoutInfoProvider.kt b/app/src/main/kotlin/it/hamy/muza/utils/LazyGridSnapLayoutInfoProvider.kt similarity index 98% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/LazyGridSnapLayoutInfoProvider.kt rename to app/src/main/kotlin/it/hamy/muza/utils/LazyGridSnapLayoutInfoProvider.kt index 2fc20ba..ef45f39 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/LazyGridSnapLayoutInfoProvider.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/LazyGridSnapLayoutInfoProvider.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.gestures.Orientation diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Player.kt b/app/src/main/kotlin/it/hamy/muza/utils/Player.kt similarity index 98% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Player.kt rename to app/src/main/kotlin/it/hamy/muza/utils/Player.kt index db99676..429d916 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Player.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/Player.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import androidx.media3.common.C import androidx.media3.common.MediaItem diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/PlayerState.kt b/app/src/main/kotlin/it/hamy/muza/utils/PlayerState.kt similarity index 98% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/PlayerState.kt rename to app/src/main/kotlin/it/hamy/muza/utils/PlayerState.kt index 6229dcb..1880b8f 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/PlayerState.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/PlayerState.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Preferences.kt b/app/src/main/kotlin/it/hamy/muza/utils/Preferences.kt similarity index 99% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Preferences.kt rename to app/src/main/kotlin/it/hamy/muza/utils/Preferences.kt index d97ef52..0693dc3 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Preferences.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/Preferences.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import android.content.Context import android.content.SharedPreferences diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/RingBuffer.kt b/app/src/main/kotlin/it/hamy/muza/utils/RingBuffer.kt similarity index 88% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/RingBuffer.kt rename to app/src/main/kotlin/it/hamy/muza/utils/RingBuffer.kt index 6d403fc..dac9c69 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/RingBuffer.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/RingBuffer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils class RingBuffer(val size: Int, init: (index: Int) -> T) { private val list = MutableList(size, init) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/ScrollingInfo.kt b/app/src/main/kotlin/it/hamy/muza/utils/ScrollingInfo.kt similarity index 98% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/ScrollingInfo.kt rename to app/src/main/kotlin/it/hamy/muza/utils/ScrollingInfo.kt index 6d0f521..5a404ba 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/ScrollingInfo.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/ScrollingInfo.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import androidx.compose.foundation.ScrollState import androidx.compose.foundation.lazy.LazyListState diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/SmoothScrollToTop.kt b/app/src/main/kotlin/it/hamy/muza/utils/SmoothScrollToTop.kt similarity index 64% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/SmoothScrollToTop.kt rename to app/src/main/kotlin/it/hamy/muza/utils/SmoothScrollToTop.kt index 02a75ff..6b4fb16 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/SmoothScrollToTop.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/SmoothScrollToTop.kt @@ -1,13 +1,7 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.grid.LazyGridState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.derivedStateOf -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue suspend fun LazyGridState.smoothScrollToTop() { if (firstVisibleItemIndex > layoutInfo.visibleItemsInfo.size) { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/SynchronizedLyrics.kt b/app/src/main/kotlin/it/hamy/muza/utils/SynchronizedLyrics.kt similarity index 95% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/SynchronizedLyrics.kt rename to app/src/main/kotlin/it/hamy/muza/utils/SynchronizedLyrics.kt index d7dc6ef..1ed8554 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/SynchronizedLyrics.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/SynchronizedLyrics.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/TextStyle.kt b/app/src/main/kotlin/it/hamy/muza/utils/TextStyle.kt similarity index 92% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/TextStyle.kt rename to app/src/main/kotlin/it/hamy/muza/utils/TextStyle.kt index b8638de..95abb15 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/TextStyle.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/TextStyle.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable @@ -7,7 +7,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign -import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.LocalAppearance fun TextStyle.style(style: FontStyle) = copy(fontStyle = style) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/TimerJob.kt b/app/src/main/kotlin/it/hamy/muza/utils/TimerJob.kt similarity index 96% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/TimerJob.kt rename to app/src/main/kotlin/it/hamy/muza/utils/TimerJob.kt index 381743a..ce5d4bc 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/TimerJob.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/TimerJob.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Utils.kt b/app/src/main/kotlin/it/hamy/muza/utils/Utils.kt similarity index 93% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Utils.kt rename to app/src/main/kotlin/it/hamy/muza/utils/Utils.kt index d6562d1..cf5beef 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Utils.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/Utils.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import android.net.Uri import android.os.Build @@ -7,11 +7,11 @@ import androidx.core.net.toUri import androidx.core.os.bundleOf import androidx.media3.common.MediaItem import androidx.media3.common.MediaMetadata -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.bodies.ContinuationBody -import it.vfsfitvnm.innertube.requests.playlistPage -import it.vfsfitvnm.innertube.utils.plus -import it.vfsfitvnm.vimusic.models.Song +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.ContinuationBody +import it.hamy.innertube.requests.playlistPage +import it.hamy.innertube.utils.plus +import it.hamy.muza.models.Song val Innertube.SongItem.asMediaItem: MediaItem get() = MediaItem.Builder() diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/YoutubeRadio.kt b/app/src/main/kotlin/it/hamy/muza/utils/YoutubeRadio.kt similarity index 86% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/YoutubeRadio.kt rename to app/src/main/kotlin/it/hamy/muza/utils/YoutubeRadio.kt index 67f1746..27707a2 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/YoutubeRadio.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/YoutubeRadio.kt @@ -1,10 +1,10 @@ -package it.vfsfitvnm.vimusic.utils +package it.hamy.muza.utils import androidx.media3.common.MediaItem -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.bodies.ContinuationBody -import it.vfsfitvnm.innertube.models.bodies.NextBody -import it.vfsfitvnm.innertube.requests.nextPage +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.ContinuationBody +import it.hamy.innertube.models.bodies.NextBody +import it.hamy.innertube.requests.nextPage import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/app/src/main/logo.png b/app/src/main/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7ffbb4a6ffd52db8d9bdbf92c7ac953291670dbb GIT binary patch literal 12875 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 Q3P<=@@u>pxf%)721JndO$N&HU literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 7005cb8..036d09b 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,6 +1,5 @@ - - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 7005cb8..036d09b 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,6 +1,5 @@ - - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 7bf4509a285d143f13e8b3932db4e4fde7fbc70e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1746 zcmV;@1}*uCP)E@iY(*Z3M>O^@6;tPf#0)kQgCwA65WdwsJj?m0Q+kV6hRTs@!%$EkZs3Dm@@bST!WS<{n!O)Al4ZTt=bLsVnAQ1!aNP*pS+ zqW&>pbjns&0zWhT?5Kfgv8K_kFgGOW=t(+PbD=6g0zzCLswG&Z=D5?Ie64mw`}pKS zR4FE7l8sUVHTfyeYKX*EbL^-|rXofjgD!-%n=(Ry(Y z|Dbc5q-zjrN(5iO_#LR#5rcaAD^Kq+btpZ9Oq!BN2F1srR!0o#HIhr%+uj-b2Cj`M zgOXs#i2Vmpt3w8j2>c_))S-k88XgyqS{*bfA=cEPbPXCja{ocpDjUQg8)O67ARD;6 zLF1=tV8yDd@Zo|>g5Nm0yPu7RREwQw?_6lO+V6kNwLFgYtL<{s4zfF%M*C=q@BWlYhgyDR?vpeg3m5P zO-)l<8|>p@bps^)c@LH@&xSD*QUq=6rP~aew=e^;a&*wt)M8-_pEPY1HIZ#=X8LR` z=yVN&c8I~y3bF5|k*AWeFeKokpR#NneQ5cIyV zJu-DhI?Wiioi&Wc7O2%X!6PyhaR{@0bwsxr^mkH)U|3nBuC5tYug$Z1#$=B{e6Vh@ zeRV{)88kT}4U$#&p`pPj5WrGgqK6OW35&0!4MKv(s9^o(>rh!)FA%|k8K)d$*u~mT?SE^~Y;dSL? z72akL*_WByeV;3Mzm5>CK?p7oH%H%qhYv05 z3}zN?CGeV#400BtHVDB?z-=7xpJdSD$~Wm-QfqLdD;v}b)|AVc z)oli)X&*p!>t%2H}`- zr^5|z>s&~zpz9sh5Ek5Wbmm@~y@<-7sMWbNd$#So)%F@1wRU~J%~=hPHtIr%E}D%yoWuY$L9xrEfN@G z22T^&{+xlR48ly=6I(!Q4%Q>~_Yrfn^hA+0r}SPO%$n=``h$qdAO!bcxZlFP*PQv5 z_rj(`qzP^{<1OYNHsuTYaTcO82*EoSS=l=J4-89|W|H-h1}05UgWY=zEY7L1CT-t! z3xdb01${URQ5u9`Jv#795tNl1;9CA;xJQN&&Twc@9m$%^tZG=YEQ=0HwyiS}twCn+ z&c*VTIS{?$ChQ>DvSG`0x}apQdsc|vpzcOC$Of`OHjoXnfozZsoMTYHDd~S#W7xiU z)asByeiF_glcppX+NBKQPHva_7wX>g-5rZs9WrR}(4CR(oh1w2#C1u=mAcVic@_o^ zTD1tZDikrjSs$Jf^b4-f6J8(Y|64YuB6f&INdpxfUJBpXT%yt2q}7fu^!&;oqk=K55q<2PA={5z63zU~KJV-`&!W%h<35UQ$MCbG2GoL@P@A{6_luUQ z?Ta2>US2Pe$JYpN65b{Zba7AvYI&8!%jD6%p=CW3y*)g9Jo@$>;Mu3o8?U%Br~$R0 oCRU|00^ODZa>yZv94-<61FE~kq#9X1rvLx|07*qoM6N<$f_Xhh$N&HU diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..55e632df65eab45d259a0d29e00ef9f20f0e09d5 GIT binary patch literal 1018 zcmVZUPP)`L0FY=3${^SFfg~t^EJ%Q~%nSGjaky#u z|9@;|1_~e%NML#(VXcB>DWqix5JAT5LIfW2CJccjV~8wa{# zbcVHfwJKDxDjj~UO5gvs{`;-=r^7jT8;(~2en4$BS-*{^n*jN4vg?;&`KOR}ZF^}) zySB&eL2cW%+l+17wppC9Rk!2$fd|D5Aw`QcCsOo1#34Fs9X{MatOskBkV9yk=yX8r$OK znfEJ;BpBc7?V0aOS*FH!`EtCFXD81ydA9$_CF);5LgA+NzCo?pQAjc+m38(rx2m%& zNt*1I0p{GV;7qMr4r@U-19}_Fax+Pxv6lhe+A2eS4?|ylj-6a0r(QAWdvGJjmLEFX3>Sg_f789XZ zZ>vM4Kt9WL+Y@#Mkba(KBY zR~>HG@+@_@y(-FmcV~FcxKpAGyE|p|OvByq|ArxVr+JjSAyIC-duZX*?rw>4cGT5S z6%Vwl(X*lyUw1KjF@Y!H!l;XDMWRskm3xknJLl6a+-c|TD961k)fQnWb;GiCl{Sls z(Ce0MNVNzg@ISn#^6cPwE(^xD@jQu>WNK_5&wk6)gbX_N&2ityo<#WsZXS=Fk`S~f z*eA*pI_CFt_q&hd!jHY(`@`>~;rX|q@DoQ5961Q!FhB$l2p|Fo00qFyTYB{~YlUeg6JsR`@T93{$-%H2$Rm0G>+k9smFU literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..c8c9275f322b10e7dafbb404ca6024fe26e7edf0 GIT binary patch literal 1214 zcmV;v1VQ^!Nk&Gt1ONb6MM6+kP&iDg1ONapp+G1Qx8*pJBuA-U^bh=h;u}WXFmm`!QtX?5ilI*S;PI=9`9*y6wl9nQD)f> zVwUaCEbnEONEd-2jQ!9c#C|Xg(M1@-5QH!q4hpwz9g-whr=r@nZQHhO8)LR@+qUx$ z_LmVEFXE07-}hd`7t#L-DEZ&5RXy7@Z&<&U6Pgl7hWk~7NNLxW)i#uM(uu>NvQ-@? z#A~-R!MoV8t_}G*d?{c9npl91`vLM83B-VU7Ai{s zE;X@WV?(c_h1-E#WgR?q4YhU_a4TY^wGkyutCNM?jaExc%}7;NW71WWdN`naP-=sU zDK$rBC^baYh*Eu24Jg$@C6p}eKTWbjhexseW=Tz6w&kZIM@7U$yljg7&5@n9@z7C^ zHkqFNEs>cQ9W82~#ceLZ<=)DSIP!mOYV2t%O5`}0;*>6=-9iOMEzR4k) zDaz&6_e3Ex5uI23l=3eXDPln5jw)wZf{8-L;aQ>hE=M8xUarWUTlF&M5iv z@DLh9^%pV<%^by6OEgw6nw5&BRE$ESi4{|*OjX2aepHO0GE(san!Sp_RE8+_qB*EY zQ_+eT%^^jGicuW;bLQA_TE`PK*`0S^=lRXOuTwPiSNCJ)*LQbhfGoI^FZgH)g+-6J z;GOv}*1pZV{IJWv_&vLP7lBy#Ht+iVBEMo`*KZd>$lcC+e3bS_$L#TT7QtrryvHBS zo;M-5;_aG0*S%dv@YvgPe_nV?5Pa~)gZvoG-UR^{akw8*5%}NyJ{3Xxp^NYl!4q#U zt*@`VJwb5Q+YNuj+f@WRyq)#uj5mWI^U%xVLH-O%ygV=n?2?b}KCiMqvv&7ku>-;G zPTc6zj_+r*n@_tP5cb03LeJJ%f~%hvdVImcu!B$Ce9!#x*2$p`$zdmMeay4DDT5s# z*4oV22`PtgYJ$l)6hkJY|DI9{l~AgWssW{js2Wjfj;aNvHmKTC>Vc{!rOIkdx{8u% ziK&?(-3=4dDy@yEP8luJ3Q=oAys|DHE!0d0Jlc@I)C5gaL(dGThlK~4Aoi(=gkuxT z?npYDpvH`X6BFFN^)PTB6XbzS5i}JO?2GN|hFzTwmr4R()w*t&)ovvw6wA6cs}3jK ctXo_Xo;7;4Y2L6wt?-bfQ48)-Uh=lmN0cM;T!2Y$q#c6(^l?GE5GuHl}vJfx{MZwX;fU3@J)z3?xFjN;T(bJ298#rBoKQoNnw2>o2H zw-jHYs1|U=XelbkJ(Lm3PD5R^A#T%EZ)|blNwE(DYS2B@z^5qIQX|W#;RG<4T|<36 z+6E~&!s(Wlgx zKBZ&4BGwvD#1~J2*F_-8RCG*lD(ENH-D|=EU#h7fgL7kn9I1k>2h5wS*No{K28(U* zxY#|Xa0CJ|-?2SFwpQ46v=V*#x{+dAJSMC`z1eEHmB?Y>rv><2NK#T)4-wnswlJ48 zTJrj0Sg{VJO0;&=lVr-jHpuwR0I_X1Eo=@!7mWclTX6yTRwRdkk)%uCd|a#jxTDy{ zn-W&pXf6~|d20^H&Vsi=o4RHbHI3Vgl9=tBF!wW93MaP|IS)KsLZ-j6k4$`Fx9pxf zpjoYkrhcL^=DZ}f)oEdiJ>%d_;Rds<3XQrl&q>WFB9A`t9r=9m5wiWevt-xqa`Nvl zkB~9rzn7J52qQ;rCkGE#kjlzxa{l}^lDpzK8TZUiVj99H33tG+=WIlqwy`Qn|49$A z%}xm`OuZ(@RqruV1Ll8lh#Wt0nbg+Rkvb7hoV-jXJhw|$M+vXL^^-$g;7nN+S-$c( zN4~VY>wryGl44l7lA6lxbV_JY7UpjHv^>3#(w$mUrDqnAsWbMH!@pjX879V&qm|^b zC!02K=ByuObs1`EYRNALE6B&6{z_h?eZt$)2Fu%M3e>(Ededf-sQWxaYzskm58jvc>54*Yz9lx#ms zHs+ls-!3~wMvd7aYf}nl+aSY=A|Gc0Hghvw+U7(yAv8GYK}ELTWd<~a>g%=S>m|R* z+7QDTf*Ql-{L`{F6>tM~>e4rnxP(P|F$aoLKfKKOi(K&@VD9?|$>qz}Wr{Y0>y)Hv zGxxDow+!wQ1TU4gsRZ6eD@oSnd?n^UCd|Eby4+x+*;tdNf{SNrAjMd z-NsXj0k*ja0`wMZo!*p3;h;!D9U#gg!~JI`@8UcX@vZdtE2O%*@fhbiLDpKV&(xYluTd%-4CWK~go6`@H1FdR zUQP3lJieVH275tL0>n_7C3~MBKFw?Nxkr6`0s753QHSs2UtFA-*HxEv@2*1g0R$xPx@>*xNz9= z5Ef>)CuqNX)zgbrv^RIb!6sMpO~LyFVX>M=V%2kIgA1j_>TLtm?+lf0T)B(P;l*Uv zo^qMNuEM(nS+U(gv}qeibe|~?gA0f44q>dd2?Dh=TdrJy zHsqcO3QFt=E*v(@AOd6UHO7_eP{~un?1gE2I0LaT{b5%*+4kMp2Dd001GY+}ZF>qV z{-~2b$)_B2ka!O-!kBBPPX2H*DtRi^vm@laKc3?jpg5X-deSbkDepA7>VjwC)K=QI z$3RC5b`xXz&w82TK>exG%T=69sX{{Zy>;fzXHn4;!|bhhf94Eazwwmp-olR#lM5H* zlR_nUYlyMom26m69vqy27pqjV;l(5-Ci`~!ConnXYme^%qc8b)96t`ID@UC%|kQnDj{rwK+tvy>Ss3^pEcIT$bLH z?-4H={nQR};>2Zc!+s=Pk4f(XhYnZB$N`GCo*@~-ie=^92lJjaBqHj`$6>QtJzgm| z%OyPAcqjc6nlR{#HAsK1yg=0ukj*Y$tS0+@JWn1_7-}a^UY3!AcZoo*w5%t9*YFTV z2E@OQ)6`JGX6Ga;D+{s6KRDE+O-Wr>$)DA`pV4sgfH%+ZKF@5L-LQb2La*f&mO7kr z;PXy8XUcliwUY^FQJ=Z=Ih8@3Q&M58(P(Tu_DCf>{7Ep{x$nR?vhfxcCCRN=1c2zr z$L=7j*PZ0N1G|Rj&RydOL8gL-;Tm4089u`CDB5$tvZAO~o3@_xika~?Yzzy_x=U)m zGvXT*6piDL$au}7JU*+rKhzj-^n$i^ZkPthm1-T} zrznh^$e!b;z=rniwfLTf$H-yQrhWTpB#95mh&jo+C6(db zN5OL<0|H{OAuoRi(L>V4-#-z*d=L@Z)qH*O%;?buO`ZxeT+=-aFBjJJ~Y-&Wv>wG2^qVxU8^erZK?@2T%l-SB1JE`qKe zk2y_=Z)j*}yLRn@@X}+?PMrp3^jFVYpJH4^@YP3ws9J9hJ$}i6UvT;}4LU+siSErRxB2_`!q~o-BBpEj$T4w=A8bLU<97pW_(2lR5S}b|Jj;56 zCxuQixHfr@L0{;zTSV4V&;hy#I=QyK@}h9w=?zth3j;p?L<9c>eBqmM3KhG4q_udGBuht}XV z4N2R;z^DLW*ny~+4jsCsM)#gPYe4*hyd>?{r?7j64RWl9;1zb#8Uj400N*pk*99mk zOHRclEZmGX(Kh-(U+5EkLk9Wlojfr zZW!9)C#_M~B5k(R?QNlk#N3XjjoIwocX#jP=jYd%UdM0*aR~C=1mH8Sg`f<|q7LsV zF*tSj(~#1baL3&~KG;%GtD>T!?!c?a06yaye~%-h#RBgC0jS15nJIC!kN^Mx07*qo IM6N<$f^OkQ#sB~S diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..25f6472e69a6d1292770ffd8299cb4d4779b264e GIT binary patch literal 2692 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 8929582df61f9cf0cc47daa3e900aa576420b58c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1243 zcmV<11SI>3P)1f_7{}475lKv-CPtzpn%H31mf*^nvO9ZCTci|=1x-A{Arym#4;YY&j6uXJ;RB>{ zgcOudXc}O(F?KsWp<4>{Vu6&lUKQxB-J`U$d*yMS*`4hid(;m*GsHg0KeIFQzVrTn z@4V;Ev}seJ;wUXWok0+F4=E}1Aoi6qD2jRzCBCjy{3k#BgeH?M(`>Gpqaz!hQ9@WY zdWh#OZg2^TimZhZ?<`& z0AX=W$Sw2`1@O+FPi6DH3WB>hZ{eXVJz4AKGK(K5xA*|r^LA_aUIiflQ0W_ZA$Qk{ ze6NC-0!Wk64q(iupL#%9?v-3 zx;+X94&DGmzBJwX&8;vp5`fWr0jU1vZ}wcACXvztfDfcT>jtma58-e)rm?XgeDRG# zk{)Y+bTkl47YKyFaor0izVC-m_jSY8ZI@upo989@(gr}TsDs~rzbi1$$>|z{vaM}N z0r*0g@$n%02C*56%SsCXK5)<8E^sks#fDHFoo-lB(l99izLpnHuvn%(kVtQ>Z-Le}7u$r;6duc|PS_F! zxZFO(&KWotyuG0X%J+0a#nB$9I{POaJ${pg6+cr}02Fp!YxO{^sW`5AVBID=4Bz#~ z0K|EcNp=8~sgQc`*M*t{XR_y!oD%-ZPZ{Q@SdH`(O+jq9J%Zu|Z zPN<=8gN;!z6lqSX1}I==(I2Y*kc{_!-bkZr0Gtbwjq$1mcwCtM@Nn{AUx7J$9`ufmNUAFN{b2kYLo16_Y7Hkt8t>BSH$^~ zNfv-zpL9Z3w+B|PZe-7KSzODEK4O4hZMP(OQ%M$p;?gGQ?Hh&iM0D*zURHNS29Wp@38`{R<=o8xZuCo5S2(xLw;!2SH^u6D`6 zxoUj_IXOFW_+ACUeKg3;rJmMXYW~4YI@NsOsDnJCbto%q%X8?FASfvSM)dQ|ql@!S zon{~aGa^XjsDvVA>&!KvU3|ET@isl-Cnk*O&5T*IvNbO+`u6Nn;*2}b_>+&J_ePF# zDpKZB!x{HW3lE)}Idd*HpNymc7|{gN89kesxxh4gPGQlLvq?pSWiuYk=mkBcG|vSl z)Mzx1Fh6H7dR$@6KrfRv&kyV@TJ4dCl~lqGI~6L4e*x#+HZshJ61@Nb002ovPDHLk FV1lv6MYjL| diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..6b8ba77d6d15ae76dfb62ccc734dea43a9e3b84c GIT binary patch literal 828 zcmV-C1H=4MNk&FA0{{S5MM6+kP&iB{0{{RoFTe{Bf8{umBuA;HyR3g}-{22y-gXNv`* zh@ikwNb)D7aaW6JVORoID*{mn(-}d2Z@R;7EQYyGuh&bweU|O-?-$(Vwd+`=eu}x( z|7pLQ|M|VVAFrDIC!_xHbliSycI(mS{g!-g&X?oZCh@*ME>ZvFXuH}fl<0NzdkBI~ zM+yRkPKSUX=ns?!glmameQNChoNW0Yud+YzL))&o&$Ic=wq%G(cm zklS$%r{u%b(+g25d7q|cI-?NMo-xKI&nu+8WsHq?+wS!-{(ZD;Xo4}uUM9QOC3u}8 z8({owhI`!}^$TXaSeHiwf?0%K!MhmQ-~{&~*}e29jIoJ&Do=aE_1Nyw(vQ=x>Z25B z{^!}}T~QQ)MkV~RsB%<%oJ~;>|Fd;XZptpMX>v;x0yj2{ZF39R+>V^T17jQzzme5Q zBNEw&T)E~?K;--A>c54#1=P8PzgHgnN`UwWJ-B-h`R>CYe*$uHKOhi2;64H6u~GCf G@Rk6GQk5hgfSs zXe7yz6lbv>a}VI|f2NaR+qRLIXa9lQ-q}@c+p0333lWGzCu%x;5yD+|089OS4EJ!R zLs8XO6xDz9Dy%saFAgdwpxVI@h9E=+MS>7221P;`g4jWz2&2R~mRT4g6A0oCL?U4% z1R)3^G8hSAAPiB;?6&hE1R-X(*$^8j3Ib&dq8E2VB>pdi=zqlB^gqHPm02V*^g?71 zgfJ4%tri><@Ps1-9uNrZ;U^(E2Q6yL!M!M!2?>YH4{19~^4{M`A>r2cLXsMz>Z$bD zwrv}kwQcW?ZT|F`u1TuCwer0c(f3Crdt!U^fJpeJa5&*z)Pz))yBcgu~j_1f{Gi(I&-) zrX4}+hNcB#j`W0VVr*zh5Y)zN*(Zm!9FnuE<$xUimddDT?Hd|3eO!@AomDklH$FJYMoJ&)dHpk}m;|3zE+h69-zp7SbFn|8b9gBo( z^D*BPC@C=WF`0tOPqF+5N_al@r%D2D&O3acp}@d_e~W;}PW%Q1Jnz&H@Wj!X0yts< zp1SDiFJw<#!~_^e^$LumM+97R@-AJ0VJFuJsQu{Ro=|z;!3PlFUyb!TUkP5vx*{mB zu7AGZMU_x%o?pN>EE0Ub?(Vba4<}QFYD_+S{_Jj@Q0oOR|M)s2XIINUIeS_X$cfhy zvWZC!Y2gK8j#%#oF&ml^ZBlG#;x$q@pgSBPgu~i+n-C7@53Z20!Y<&`B_eRjuEYun wD`1xfwr=5bx;>=IGsh`Q=21#!s47iTe7@= zFxiEZGSYn}r@J>4;8>|M)E2SHbAs(~gz`h0m{zAJjgYS3#7#~QAtQ9Nzsgna4{Ew3 z%qnmWwYdi*QUhd#<`CjNd~%D^O`jtHw8b64IV^Tzjv9xsM5;()b(KF{gl@Ae1R{h! z(Kh|J#ZkOQjY~)(tplYvEiex1hpnurW(W^(U-)*x2v) z!jn&Z3BP}#5+0wnACpfphU3vE_QC4+Yv8YokHSNb?N$693^+HlTim0wZOM>wRERY0 zN$6BCBmSh4VzR3Y^0w5&*|Y7?+1U*zPF{qU|5zQ=iRJH|fZpC-xN@Z%Dyy2{jlUd$ z%wHRf<1sRU&!_Dx-^!;)Ist#~;UG0Gu;(S9x2Yhv;na&~CM=t1?!B$w4 zmX`AaDQ7C&BZF7ngmT&jFoo^^eIx(ZC1E z6~n==Tzg^r&NKAXMbZbzF1)+!>xeo)&V$DL66eMH9MERujy5}mWON`+N>0rY*lG5)Rl%ykk3nZ2>lU82ji%Yb&cfk#t~O z!fUjYQqgD^$C1lJBOfGJycW>tv>D}4NJ0l&4Qvar*E#-mE7X7EZ#^RAfZkSke$4n; zqkRs<#ZA47w|rf5ipW$Q=ML7`&hni?ACa2E%na(8pSdVo1=w^Ad6nXeGua%u6ykiZ9~eYc+FHV1@CP zHqhp6{igo}?NSlw>?6M}Q`iUvCZ|A~IdVU~G-m8G=`4D3FnWCL^so%eXC9^?1Z}6~ zXu5C(7X9rQea5!o#kmKeS=Qrll$JGu?H5WLp@DHq)vqrlTz|+Yi`;o0B&9B&g)wFh zBaEuQY6iFGT)?~8FCC<}EV%>Q3QjBZLxa#qR-c4V5sXh-h~YCN;9AMAXSd%z`fj|o zp_1B_QVsZ};q;kynEtyjeeZB5aJ8l6FSlQX8P8TI^g{u^QtC|kwXw1B@lwt{5k2~D zV)D}Y_$>w##vH;f+&`IIGrbKoLGhWt$NK;$k5y`Oe*Hkh$G`fCZ~YlLDlYXX5|8dk zw`{Fq%Aw^#)}#{Hu=x}m`F9H}d+!8%vZWr{$%-R+Jdv@~%5_2q16-bQc>=V0lI6ZGTP09T#>L&r;6 zhk~wAV`jLJn^v2v{$Y!Y=tS(#CoX;qYcAbBQo@wRZ!E;J*=Nk$1Db>dZzCtw&`}DO zCb~s;CZ(_1h<8vke$p63C+J-CGYUDhQkLZ*7se@skGm*hKHyf3N>0z+F75>2mdYoK zJXqM^oDQcB#7{`fdE02)-iec8Y(~xzA8~5SU@PbxpZMkyoD=6BFnKO4oHRF+ z$2;$ie{xEier*-o4ZkB|euU$USQr>_`Z<%>OeMDO`pML3I2X*uYwg6srmS4>XQ55D?tz*E&=Eoe>2_^=dhpe?kCwy#;| zuU{Zqoa7dQ5d=RQInw%oX2QHTCZ?^(OVxi|p)=>#>Mft0(_0IgD9AIuOVh8bz%e)$ zb%-v0SwI`NFq^Xe=0*zUhIp``Gx*IOiNq6(jfwe@Ha0fNJbbvxiNI%khrfwqa4hQ3 zTa}_Q8(e{CtP~ne{>@^Z@ZG`x|L}bg_>Avja17q0SarGnIR8HrD)AOx+WLtA0000< KMNUMnLSTX?g_W!T diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..ad20e13b8b1508ab025abd492fdeb3b78e8f3110 GIT binary patch literal 1872 zcmV-W2e0^2Nk&FU2LJ$9MM6+kP&iCH2LJ#sFTe{B6^DYf4Vcxx?L7$*F#+-bA4^Bp zw#9PuFGAV_Za@oA%F-SnXNHuSnVFfHS;KI<|2x7>40c~w!CTdWaC!q8g)FsL>IIBq zsRnY%_V0*8*Nxm}h}ap!ADZz-j_9j0bJUTc!^vg>$BiUOs-WcRuFBm7{NM@XNRkxE zf?|0O8!I!91-R$J)wb=76lZPQtZa0)ZCjnq1F*fPU}M}TnW@({l5Ya!*w%Jz&&U*; zoo(AmX``~O-?nWVL;0TPe!q7Nf0bHq_YNWE1a!xFtF&MF&mgwh|9#firL#tGt(7{% zNcmKd1OO}}E4s#3-HvT*w}c}A0DAn{9p0K-xC`h3o>(<$YuV z5O6x6>40ziKS&8p=}HSBP6sR<2xQ++X(`8_x$?FB!}+(6U3j7J1c0>NF8oLdKR%~; zbEF#1pSt1Z>EccM_rDK*4M2E7bAelFNdec}+`MrEssX*nu0FaKYXWX?ED0-3RV&8_ zV-TrEPzv&A;2_J_5b=R7;X+8;4>m}K>QHm6gFjUE2=2rsw!+pV)MNMLCN4yOf6x6 z!OJG#Q&mQRDf^rv88+lz%&W_gZK;D-WaJ$gc*JI#GLMyI1haQ+P(ZO{=99h}Htnj1 z0N`Oa9~z2b=zEeUXpZ%T53ebMe1lGgpeUpmr39f2!<7)Ee1;RJdA28ZE2{{{j?`wi zguXXoD|RGPhXLXN0trV7i~`cmVFc?6zZF%~i$ukC2I69Z66jSN>=WsgVgw0s!>87; zI#q^rAdn6ykWz0GkN&ir9N-H+Xd! zlBn4v#Ep$}!9V-kDetXp_ERKmg+@t>l{1lPc-fltG-uNwj=^%$qYeg0a0;HKpk@K(L5q znX0dKtto;yn-ke#Q|>{DQ8!)E?SR=UN1uMw<;vIeI_#D5cu`-|~)42%Tqo z0>d+GQuK|MM`G2m`=FFkjk`B{C>0oL@}bLh_@k6k-CoCXIFTf#b=zT^BhY}RpHy>N zQ}=C3IBnB%hLBHjTGw}!ZIkwuPi!RFTB&OBY638zW2!T)5tjwg z-KTAti-^{xL<}^L4n)Z&y{I+fyr9F@+)ecI!t6B$q;R7PTJ>a_;bC$kq|`8aXIs>j z=>BS6srrRf!-t1j^L9-A+T!^hh$TRz0}2LOTdM=&(O-Btw5fi5hFl1aN7UN+5a zqs}v;Df=!;x}<4QKN4Koo;d-e7{PCZWDSG1x0R#=0eGm=C+nS>rSG%NUla)3`d>@t z8J`Kx4xdYcmi2>hF9Xo`#yZVa$lVSe0Kq_Q!mf6of$JuKC@0qL@0v~9{~HfLT{=l| z?|;~gJB}ED8F^#S%$|P)0C-?vzER1DM}Ghi=_LB!H(J&ATGkJSUzU!8Y^wKGu~}OToK7tP0{Y8NF|a$jQ+-p!`75x$oCxixzI$&UfAv%u0`)2bb)n(BN36SQ3h_MZ#~!+Foe)c z2jV>jI;F4XmwR1&s&bF0_I!!Vz5Ap5S4)fE6COfrm5u-XQ{#bp?=1$J476W4`qq27 K8~+co%tF9I&6aEc literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 64ff0ac63b1c309f568abdd1943e1a41a6b41d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2438 zcmV;133>L3P)-X~eNg{1e*{6-o{ z``+mP-~Ha(_wCO1>BE8r3l=O`uwcQ0h5tlSQqsdJRa#$0T3^&csE^lz?^O7Cut%@x zB9mzz;opnJ`9F{)YMzqI)jyFavxfvD_}@_j)WVuZ9u3}I(!r0UimX*qWmbVqsnL?x zM)In|*IL4-p%+) zM+cIQ%CIAeGP7N($S}y18Ae8i5w$=~P@9B_N3O)irbJq5=T`8INaPvGxaUjcnH|K4 z?}d8+gJ>exbV%gK;pYiEKeg1(<>04RF)=CqNC$R8o=cIDsxV6p zT?*d8(UNULWQvShY+RyLcM3aZm_ThXON^E7s}se3G|W;%m%_a9LnB9Sex7vD#CIa> zm|>#J0NDY(NVIGeYUc?99)3Z*@dYU}z%E?|jNjk%?640;qjsJ!psy%)-HTFYfL-n% z0sHka&%GOm+A#xq5oUmoVFvgZW`K`j2KX3efRAAY_!z%50N0nM%*uvYs*^BdZVo7? zX{g^g!i340@ayFTkhZr1cBYlXFBj*+_(}Bdyop~KfWo8bTmE?!O3HLlTiXh^@3g?F z(^~lLM}gw8H`@gQkoCV+YTJ6HG3|PCq2&$`_y9BeuU@$_; z7iCTf_m9+TR69t6t_`*kBUG<^M{VP2{K9}=y_pAv|E&k3krvC6jt(QN_`?Nidt2Bt zz_Pu9!aCUWSt-2sMlMWDq}yogD?YJWZLX(NZ(rlt!)NM3~N-})Wh5b^hp&nzzuNO0nZU?Y8@M(4<4za z+F%BFfLC5S4fzGNlqf=)nmXXUWd+@~T}jTGEsvsOWV~3vp%{uwbkz1e5!41Cc*2JB zetYA>1#*IBxty?U#rbZFaR&}na-ZXXkLDaXS`C#|db>*?L2m#ePt?F)HWovDgY8)o zPGi@RvtNE2TL$o8nw$0VNm#zJ5Vn4E9Wt}-Kxvr{v^A|zPiA9y^q}czl)}bL%N_w^ z0D|WX?=LSP^Z$F4_&hiu^YsIJ1_(hzu>P>%)zh$$q`udes0b^R#6CZdq+(26zaZE@B-Smm0p_dX0<&*I~n^5?J!~S$ON+b5K)bTD}mTU@-&S z1cm?bcZF~^zZP^PwOG~bJwb<&cFFAKu2V4Zs>M3WuWerN+tAv$%T&uKdsWYf5qXTG)rT@oNK)t4#*r9WKJ}X3skb z>df0Vi!#>uX6Fs69dF~;2JGE`lM@b8k?=btab^}AI#T7(2^#)p^;+u}aCsBIHel77 zOPqK`Bn1h-

T?%5hja3Q!(^v(zQ)b`%SuMNQBxK`WBUGsx?un52B!4=R(K|w~y z#mfyguOam&er*7*e(p*u=h6q}ds{c@VO0#j7mChr1*FHzg|27YY-g0~0VC~x8h z+vHDd=kV=2ZcxJWXtM9Xq-n0*;o>fSZve8Cq?iU>JGUnEn-9-Z-{X;S^msKTJc74C z;fzVRO>Yqp1|W;x%!8YidT4Jqa`zETnr_;or@oZUO)ss@gif8&a#y|y+v-gM#sCD1 zGP~2uxoQ{|+pBLibF&+v_*GSU*tof*%OqbCPzE5FZeCt^3f65Xf`9*~k~>>QFa_<| zSHWF$i&InKcD^Fu4DdIY0X~Kq;A5BpK86|KW0(Oxh8f^vm;pY98Q^2O3>d$^$)g60 z7_nxAlo?#=EraJ z4GW8nOqh7=GJAwc&!9G_(WtT8%0fb(eG;`(sZ_2TfFTwy!H1MRI(p33FUV0qI?{AV z6&dUyJ{0QjQJaJbhhcc^`c%}+tetydZX_%sN;WbsVb@Km;sjtvG9^B`N!=+?o(OU< zC1)5+JLU-x$9+{baNy5y01g+4R6i8z=}J5l87adj0zLWk)2ex+#-vt_n{bG89rGOn z$%Jua&lku2z51yizqAmwiij8+j@k*dbU7Xg508!@uQ883K1wbck-S43zvXJ2WS1^p zvZpy-ny%+wg9-D0CRw2owGa(Y+BtC0i%QfeEbIw?B#AOHXW diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..ee28e15f43a50ac21e313f5adb5ca826042c9910 GIT binary patch literal 1658 zcmV-=28H=jNk&F;1^@t8MM6+kP&iCx1^@srU%(d-B0AUpo3@?#C2nlischS*Y}>YN z+qQFT+gQl=;NEM^ojI#;X4uB=!s{}&?X(LZQHg}wr%TEQZx9a*w(ge%RP(V{r@2{0*CC7SWMuL zjDSXRr@K4VqPx4h!+oFgzTt(WZQHTs_`g5fwr$t2qYW6V>1f!zaidy|t&wf>oB**I z>kYUr*nsQ89JJfQ=@eXaI;m~IbrC{@ab4v4tSeBHlqtz7Wjrtc5g{s5a*E9VE=6bU zjP}$JVrS^K23_VGHVU%amRId7gUoKz|cm072=c28$5jW$#w9%iYu*-HrhXb_bt zI7NK;cbZ0X(N3(TKksJY$=zq|mQ}rC%;*3MUN(*K7lY@U0U6B^P&9iQnn5 ze**MR<|x?3%rEDo72>K!8!F~ka**v&YFxAIY`ioKNz=8qSbH;8h4 zxSM%xZ=G=K=phi{&E#YtCC3ySLYNOhE(E#|>_Ma-2@$2mrC{+W6YDb{8&*=6 z#l&fW-!$J(0xrRmwlC21i+vV`&;mQuir2p<*|Cv0+IVOmXBg4{@o>hVmZ z-3wCViVnilie==fJOH>>*OhEOMEG$t0Nl5ZsU$@3s}?`gFPQRvH+~0DsD;hhx-8B z{sC*hEg>lYmXM^xh$P*EvH+Kd1*~~l;Q}7}K~jGFHULk4z*fPM(gI*bb$OMRES?XP z_j7=)9UlW8J3vx@^19m>*Qb%Ctnw)mRN#3RH<#Ds^jw4TD$+ z@u-I>80l;nCs7&o6orjWe2cFbSks_wjcmJ!STrhsXy`#V1J@Qd>UfmKtG&*`(7>BW zifVHhD{EzF+j)OQrMEd48gvUuF)`p_(E&y}9l|mS(UASG!%)q?7>Ew)LnEJs`$c7n zM>vek`U%Ovt24gIVa+kt1te8phq|AHf!<~j>=6s{<-xXL?VSj}=*T(0(b)*B)LTrV zub7Z=VV$w<)@cQ`ISV65?lKNNw z?>o{FhS)*5Ild4TRAtGEl&_}7<=$P|v~pTPwbB!k<~LQ0ZXV!iDhphkXyM8g6HjjH zr7`Eu;W`D?9Z$k7ukXj~Uf*uceoQ+Rvolj;f44N+P%*!}Xp-fnyuaU8$*lZimcBR~ zHY4U*-xEn7l0D>i=QB~!X!EUL{`sJw`rjup_`^cyXBPI|OPC`N2|e&vbOf7T9A_rd zK05K|as|~N^OtLwpM7>&OK|F;~tFHWpyP7sKQwu)wC5QvJ7%I6Kvvwvi9P0{tEK*Q6= zFw5(=Fw5&#JJSw(km1?W`E%?ZTxz#;&QR4h3MMmu5ftkYi0HP9XXaHU5KT>`_4oH& zvtqcfrZp3NG^`$Hywr1r()tH}t6HXHJsN^Q1Oy_c)!eb{rg=T31fr5a)Dnm~=Fht9 z_v^mAOVF)HAR-AweDmo8>8<39=CqtWlG|eDP#)vol&pAAt$Koby<>i<#r!YF)DxR6 E1@~h=)&Kwi literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..2b44f5588167e5844dec92333eaa645908ba3591 GIT binary patch literal 2046 zcmVVS*W2Yv$0am-G7~_G~xmz!2 zoq(MA{}0m-&*;-04LEGYZ3yc~R-vdG|KClaB?G$bYf(&%LZ&(#;S2wo&K0iEE-QK; z-{5Nkc1~sp?^ffRU#0Ubhc>oJEhwB@y*~_W>YhBT(K8N}A@^4I1C;Gzq5v{!^@kY+ z1~fclSrGDQ3c?fc{b+cmfG+%+h6%m$P8rL@_3B~KbcE%PNXq|b#jTr?#clZeEOGqU zZdz{th~jalsk!qQ!~Sy9b9q06J@^TdYY|Z3Yg6>~z+VT`rs+%Pj>^u1e==%9hUU>X$Ukz|;MWH1MLS9HDU2_OByoiUSQl{k%AE z>fKCxH1HK?u6WdLPMW&sZfqswNtwomkmt*xOk<9cr^z&|f;{zuO;c2rr|&y(^<9ov zIgqg{Vyn+)myHgwVo7=H`+Q}nZL=?7t$B0#n~2XCWJbX=5*qD9Cfgd@o1pMl*QK;r zx(V1Mr14SE*o);W)wMxgRh@O#O(rHUdFOMY4{cR-)|iaPMtU~6+PLZ_D08=XOu|Qc zJ}X>&9VuwdONjY7+?BDlJs>HeCb#*Z%2}l|8XjrX%FSeNzHpHx%0<%QoMl8>EA?~m zq!vmi^(Us&=i41|yow@ia1zci{3h@-#v;>&l3uAj0h@ve3gfZSl75t| z)Q^!SGtLu^u}VLbv@+J)n8L?sMag7h7<&^;(a*?Xq&yBCEvw5EU8CU9`n8OZqh&H$ zcG(nVTPt%KA%}7-ttsTxwK0WnGC5jSA3_dfB($bc=bFN`v=Rq15ON?(UTYdXCYeqR zLm^~;7RGdXOwy{A@Axi*{QP&`|Cl#l=k2%o=xc`jk7<6%Ws~-A5+VE3eD=pRt9R}+ z1IG*)A_6m*z#|#F*!Tv0l z%pQnlhd`=Cyl{*CEJNb*zwqe>ONFJkWtGuikU^ z6ndQTcgsh)mOSR52`bPq3SzR*;Tk{L*| znx5~ZVdru+_?iGN!ptwbN((BC1xeo%*JR`_3*5#wsk5XqvQVk?K6=I>6H#6|cS!-{ zA<3(iEd%@wKS8nt9{K!e5f0Co&=rJq?n6kPDPS(g&D1@4206Hz=?t#2|+{yxi< z6jz%W==e1q%!GjX#P#Yk)Tw*&5BQ0Y%U?!5KU%QEGgb-wD#7dT`;7Ov%t!#39%RVf zI@~I^O=Y@_dd-6DRqWH+myCSyH32&(^x;*dFRORU89q&gf<-m7pR3B;{3Qx^S;@Y5 c)aSP1x7LwoMb-G7CbeYPult<&{}1{C04MwXxBvhE literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 98ede1054e15d779015b61ad0815d6d7e54fc2b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5308 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 O0000?(Y8F-QC~2?k*+g;0&VII(6#Q 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 TSm$X6N~e3nNV`(gG4g)^@$(2N diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..aa00305c06f152c8fb03acaaf6ffc020234eb978 GIT binary patch literal 2284 zcmVf=sBN1YGc)5a*gi2cGcz+Y zGc$9UnVFd>jE1-0K~^lCdN&3+PDY_umFtY5=rXsVL0mV3*rSWrC)drDqAhQ3tm3js z*0$}eophE#| zww*qetDAt$EH~?~hlKwr$7W&Dz2-VB1=V)24`k&3A-Pwfr zKk46sAXs^kC0I3KaZXDspK58Pli$FsN)PzV)h%wkZBEqRA@M?WKBV<9c3b9V7 zCM=F9Hr0e9XQ1;(qs-e4!3xDJv`pMfSBJ$r=LZy{QM6_8%f|~g&de6fFsuMd1UvsP zIKwGcwX`zuZhcjSzjI0I0pt00nFLU(D)2LB1YW{Jy#H!zPqzV-R{Yh$R0wA2j+0yR z)d63fz46jp6BZi8U;R9UnOrWJxr;Vc_;ssY6BfI!NW4Tko8><4-F|lcpy?~_>Tnm+ z0F+kp$A#W-+^7P_&KCL4!HuWaPR@Vg=7w|#07}pE>QMg&_-UT|6kKs=Re%5&UZ%Ctt$D*5*Q`<1 zvJJ+_2nBzE9@=(UokA)bOGTBGUkJ}~;TbmQS{xa_)Gnl1IXDXq;A5jxaW&-O0%7Ya zu7%nK^S0r@l;UlnY9{3u0^!zCHJ!XHC^*Wgl}`@Bz2l1<{It<6gTT#bts7>PPxEkr z=Q2pDH*B@lh$2EF|o_d?+1Fwe!}pX}&gs|3Q}J+~}wuC#Hu*ER|D9 z#z$_2L?U5l)G3-z9h^-a;R6b01uRXpogA?<-kNpUmG4m z1Jumfvut3>!-c+X%B{Pviz%mOE;(?ZB4}K-JX|1*`GruwY%=9qe$T-`T-jC(c$rpE z3WPD!V5Qt!4VetY9*I7=d?FFX0%C}waHA$LkRdYin%2$2kcSI%DeSo}220bLp)SZn zaV-(X+WDkFQ#vt_QL%{YWnm~8Nx2lhEt$d63vF^T(Y4H?e4J&`A;~h*jOh#&lS$!) zQX!cb(v3)~kxN9^(yq%WKVvL9WH`z~0~A#PLrE=Jd15W0C5DL(gn60BCj_0G`embh ztyeOJBrnSl)}&?@opdkLc+70k@gj?yjo9WcM>GBt;a>{~z@J9aS@)zmX3HEayr8_^T1&9jvQBcNV zS8UtEw#{MF-T8!F{?b}B!IS1qT=CM}qOMsQZ9|clh4Y`7sON5{tYj1l50p|-WQls7 z_ryAwK+n8W@0zIh4#%vB3I&=nc%G>DsrRgd3Do3X|IW5OV)}`Dp0Ro*K&xBA6j6V} z_3x02m?{~#MYb0`vp^4!a)yd*-Cv@`FwBb8zuwzgylrtX~2T`4o(x8GV93)V<*S!M=d!4aJ zr1&~G?xwLb6jcGKhzbL{<8Rtzq|gU`!p!QROV&yUq*g7Yu`)mS6BI4~|H{Vj@GmHk zl!t!7z~<1)*0Ke}&|(^PJZ>!PJ~k+9x1Gg|u@p7(Q!KVSYI+@Y-R4mEbB?}ldj0bx z3mG|7DVxCl7c8v!pWT#??kited|39faVQi$lzLluR&{(dOBHZvQmy0F>NfPDM6=N`3Ti+b(tB5HFgr2!q_eihnxy96)8i zB|tc4&G=kn#UD3shx$oP2(h9HEVWtggF7#7xMw_s8J-6LK#5If_RR!P@wyYcwl~dx z{5C^N2rx1&JjDC2#Fq=d*BaNUJ9WdUJ+mYT07~C{cE2(J)!%q>-NmNa_ojU^4HwhG zwX{+d{;msl%)dI^O<>FiP~JKdy3_%vUq!QQEDkIu-0jPiV(e0;iKEC#GzE{WIl>Kq-e=X(l zeuMa{uzu`CfcW~cmtk$~>3+GN*Z=2zdGyWoM^`;reRTVo_+FE;i3CGP08l1?iU3qA z1E_DYUiF3+>s4=LgDHJh_FOV_b3bO(iM>}2KY{rDnBgb(SUhBFgDE{$7VA}S)SM{K znb9=?Kq*iq0Hu0n0H|h(J`LK|7}KF|nE_1(05o96;DRYpV|&iG{cqvH<2__6CBuJ9LV+n)8 Go0S4Uk8pti literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..b9d283803ad5f0ac2faf3beb9b233f90956f2bbb GIT binary patch literal 2756 zcmV;#3On^uNk&Gz3IG6CMM6+kP&iDl3IG5vL%~oG-eBamZ5ZkQ|6X0s+c_c>xNW1f z$2j~14)Bje2ZAOOhI|(SF$(3jdOGACsKF{0Nb9`7RwrzX1k!}4zCT-*2@s>XQ zp8&7_U;n@U|5&?wX2P_vqy!TPuntbpeFq7U1tkEov%GBXd-whEjNM1`Mvh5E>!Cy7 z4wNHI18w7};IWcBJZ^ zofD0>u~H5So+8uHeNQ=9_op#)q1zl?5?J&rG9LVIYMrBH0dRu*$oy3ahkbp|$&)Mv zfnX)otuaot0VIRMlPPVotk3T_(9xhVB~$y&O53LcS3xAWsm2Ex)hEo&pz>r|SWSY~ zqUD0jm!fqBNw>2Eoh5a;%#m)##vpX#7GqwNptQU*rFWQK2B|Nn8}e5(Xa(_V`yey= z{Eo9Ni2Z-R6-g$8TIiS&q76arH4_@kR43Uv*=tN`L6W7QS7gzEhe7Z|^{xw#41tFm z+Eoc06mL@QHTdHQ@_R?Ol!FGzk^`$Y8@#dvUS@07yXp&?CG~2Cw!@RemSVRGPmkZ~ z1&IdHSQFL@955y9snzFqGEio!V4p-Qq%A>p(nhVIqg+9UwGtk=0{2Qa)`=!?HKAuF z)M$H!pZ#sb#TPJk_8MZ)Lr@~gzDd-;W zh2Gz~KI?eb{;KUoApC7;rAwyozm7Leb}D4K%u}(&fO~i`p!fZ`^ZGyet_!8pz51)? z(2oU2Hh;Rf?(!XOTq5BL>50fl@S<}0VHZcwPYu>mu#uF>=mJfRWVhV*bCn9(sMNlphU@q<_0od9P0{hGu*5@JLBd(>+&0_g8aC*||@; z3|bt;K_i7lQ(;2GQ5~-XgL) z5qSak`fIIELJmKw6PiD1)y1JjN$5I1LSDOzSZHKx)M5)~ba}+KzFxcYjxF?ZyDQYS zIrEa8v+J&Of5ifO4B+qCc93^7;@X~h$;J%w|2r(Y<#$lLY;ZQ)pOWIYxCK$dc# z#~OLVNbB+}9v)eq)o{aMN&Eh5v@y#Pd45HiFBv;o&ST&06-)f>TuYRU&WEsfbLo@S zXkf!xa(6U1EA$1zs#RolQHNVB{ia1$Xd1d!eq$w_c#stg&bAT-EP$-YBC@!6B`f*# z@DNZEvIwrGlf^vdeSWc`_s%BdqY#cVOgk zcp6UdczAwR+V6o;qYau?dSFq&0<8EHH!K0(Q)G}c~|0R1cB=;u{MW-Xas)p*@NEh@lGGXw?R|U<9rHQ${L*t zn&n_8K;TvyWb{2yQ`LkB1f^wK+XBMdGj$ZnMUPexcz}=qd zB?KZrZU%x9kh5mppiQ`$0h+6uxu6-iDVKmM6}qWVfXZdK$zu;{yrr8)TcGD~lSv*l zN;j>~Knrn`f*sWHo^CqcfL_MUB9LD&nriVrC=kk<=cqAkI z&T%T;KFSDBK*PdOA>wKrb)3B%#2p=igr@t9gr!pIl!zG#pTWU{Kr-Ceqs|RoGCTx? zgO6l5F-DyeqGb382Z#B|u$zrKyIRR`cmNLkGMI=eJ|p9<7C6{OPl}HBRQXeiwKyRi<#L;E{`gSx9^$YoO}hfRjA4*&;zpoh3`BkDx_;@VyV zf`of#iMzIg6~4AjT!(vrg>J9D6}6o~yGtsyy|k^KsNJl3`~xg-G?b{@hOyGO4iXg$ z7c@90#fUl7$ETL>P(Lx>_5H;I|G&G9h#gIu>|(_m@7mEw#2z;7t}zi@Z&kp)0YyTr ze6i3rdiDjvj0zqcw5v9sk2N@<)~;PGs+Tb`qWQ7E?D?Vorckl|x`VvzIWnllF-8ab zZXLF*fwir5u5RULCH>cR{BLd3>%BfPLYP~fyS&l%MzFP)l{MMN8eMg1*;?3NS2SvU zj@8c;W`82uMMd9lsnL%W=jFseb-Krzt)2MQihj)eet9C6pLLimj|?^1R;g5>^i=0Z ztm(j01Lq70u`aXbF?2mRP-3g-1Tt*x)d{570!f|FeP`>KPT+(saHJDhXA7+ABoJ%~ zxK1g-*pdpOQ(9Qq>K!JX8tX)$!qtSqCeX=+N3Ot~D-9jt3Ob|}(iX0gHfkluq=l)1 zeG;uavCkCPb+yrnFojM?ua=q`6nT2wSfh9?e?kDBy*qhqE8dy0#)ABE1o`RyG^TDY3Ct0s-<5Bjqk#v8Hgue$Y3IGMGgM)7{iU+VkI14M z*ndoUk{yufaZX`@zhLKu+bBBD&15$cUt@zSX53S)@M?TelNS(g*29L5G*gF{x*5&rDc_SrSCR!5TP5`qrFN@}taYemk^s>V$bmz5ajw K|N8%9?FImCRdcHV literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 65b55108be5dfcbadae69ff8ba4b605d37bc7e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8353 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 UhDljw!il12wOXxO0%Te5z5r1D)Bpeg literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 891d1e00e3c81aea0fd314d7c73a14063788cfd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5323 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 Gu>S%AMAYg4 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..281042d1f401c470b9a24f74992e2e139e036a2c GIT binary patch literal 3276 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 KyAlSHcXbiV`&YOC literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..7bdeae10d596e3feb98fa1732a02eafef2a5098f GIT binary patch literal 4488 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 IBuzv94-)jQ`2YX_ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..3cb030bfa76b9d533b8eedb3307c8c5f3317c6d7 GIT binary patch literal 8898 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 QITY~_A|5OhS&uqn07VG-IsgCw literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index cc7e329..5f9e09d 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,5 +1,4 @@ - #4046bf #ffffff diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..fef3d10 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #EFE0FF + \ No newline at end of file diff --git a/compose-persist/build.gradle.kts b/compose-persist/build.gradle.kts index ac8ccf6..6365389 100644 --- a/compose-persist/build.gradle.kts +++ b/compose-persist/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } android { - namespace = "it.vfsfitvnm.compose.persist" + namespace = "it.hamy.compose.persist" compileSdk = 33 defaultConfig { diff --git a/compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/Persist.kt b/compose-persist/src/main/kotlin/it/hamy/compose/persist/Persist.kt similarity index 95% rename from compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/Persist.kt rename to compose-persist/src/main/kotlin/it/hamy/compose/persist/Persist.kt index 65eb114..ded6d72 100644 --- a/compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/Persist.kt +++ b/compose-persist/src/main/kotlin/it/hamy/compose/persist/Persist.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.persist +package it.hamy.compose.persist import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState diff --git a/compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/PersistMap.kt b/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt similarity index 55% rename from compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/PersistMap.kt rename to compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt index 2cb0b5c..13e6762 100644 --- a/compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/PersistMap.kt +++ b/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt @@ -1,3 +1,3 @@ -package it.vfsfitvnm.compose.persist +package it.hamy.compose.persist typealias PersistMap = HashMap diff --git a/compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/PersistMapCleanup.kt b/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt similarity index 93% rename from compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/PersistMapCleanup.kt rename to compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt index c236622..02c2c55 100644 --- a/compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/PersistMapCleanup.kt +++ b/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.persist +package it.hamy.compose.persist import android.app.Activity import androidx.compose.runtime.Composable diff --git a/compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/PersistMapOwner.kt b/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapOwner.kt similarity index 62% rename from compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/PersistMapOwner.kt rename to compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapOwner.kt index a6bec64..b07413f 100644 --- a/compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/PersistMapOwner.kt +++ b/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapOwner.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.persist +package it.hamy.compose.persist interface PersistMapOwner { val persistMap: PersistMap diff --git a/compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/Utils.kt b/compose-persist/src/main/kotlin/it/hamy/compose/persist/Utils.kt similarity index 91% rename from compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/Utils.kt rename to compose-persist/src/main/kotlin/it/hamy/compose/persist/Utils.kt index b91c4eb..e77129d 100644 --- a/compose-persist/src/main/kotlin/it/vfsfitvnm/compose/persist/Utils.kt +++ b/compose-persist/src/main/kotlin/it/hamy/compose/persist/Utils.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.persist +package it.hamy.compose.persist import android.content.Context import android.content.ContextWrapper diff --git a/compose-reordering/build.gradle.kts b/compose-reordering/build.gradle.kts index f2ae44b..4f01d5e 100644 --- a/compose-reordering/build.gradle.kts +++ b/compose-reordering/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } android { - namespace = "it.vfsfitvnm.compose.reordering" + namespace = "it.hamy.compose.reordering" compileSdk = 33 defaultConfig { diff --git a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/AnimatablesPool.kt b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimatablesPool.kt similarity index 96% rename from compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/AnimatablesPool.kt rename to compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimatablesPool.kt index f0a968c..074eb5c 100644 --- a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/AnimatablesPool.kt +++ b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimatablesPool.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.reordering +package it.hamy.compose.reordering import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.AnimationVector diff --git a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/AnimateItemPlacement.kt b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimateItemPlacement.kt similarity index 89% rename from compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/AnimateItemPlacement.kt rename to compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimateItemPlacement.kt index 69a3859..877061d 100644 --- a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/AnimateItemPlacement.kt +++ b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimateItemPlacement.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.reordering +package it.hamy.compose.reordering import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.lazy.LazyItemScope diff --git a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/DraggedItem.kt b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/DraggedItem.kt similarity index 96% rename from compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/DraggedItem.kt rename to compose-reordering/src/main/kotlin/it/hamy/compose/reordering/DraggedItem.kt index d626e29..cf88a37 100644 --- a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/DraggedItem.kt +++ b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/DraggedItem.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.reordering +package it.hamy.compose.reordering import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.layout.offset diff --git a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/Reorder.kt b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/Reorder.kt similarity index 97% rename from compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/Reorder.kt rename to compose-reordering/src/main/kotlin/it/hamy/compose/reordering/Reorder.kt index 7b7d591..bfdc9fa 100644 --- a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/Reorder.kt +++ b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/Reorder.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.reordering +package it.hamy.compose.reordering import androidx.compose.foundation.gestures.detectDragGestures import androidx.compose.foundation.gestures.detectDragGesturesAfterLongPress diff --git a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/ReorderingLazyColumn.kt b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyColumn.kt similarity index 97% rename from compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/ReorderingLazyColumn.kt rename to compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyColumn.kt index e970e7e..0eb1b73 100644 --- a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/ReorderingLazyColumn.kt +++ b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyColumn.kt @@ -1,6 +1,6 @@ @file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") -package it.vfsfitvnm.compose.reordering +package it.hamy.compose.reordering import androidx.compose.foundation.gestures.FlingBehavior import androidx.compose.foundation.gestures.ScrollableDefaults diff --git a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/ReorderingLazyList.kt b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyList.kt similarity index 99% rename from compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/ReorderingLazyList.kt rename to compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyList.kt index 8752a51..91f325a 100644 --- a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/ReorderingLazyList.kt +++ b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyList.kt @@ -1,6 +1,6 @@ @file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") -package it.vfsfitvnm.compose.reordering +package it.hamy.compose.reordering import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.OverscrollEffect diff --git a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/ReorderingState.kt b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt similarity index 99% rename from compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/ReorderingState.kt rename to compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt index 11f4dc9..8630c73 100644 --- a/compose-reordering/src/main/kotlin/it/vfsfitvnm/compose/reordering/ReorderingState.kt +++ b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt @@ -1,6 +1,6 @@ @file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") -package it.vfsfitvnm.compose.reordering +package it.hamy.compose.reordering import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.AnimationVector1D diff --git a/compose-routing/build.gradle.kts b/compose-routing/build.gradle.kts index b33472c..474e8be 100644 --- a/compose-routing/build.gradle.kts +++ b/compose-routing/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } android { - namespace = "it.vfsfitvnm.compose.routing" + namespace = "it.hamy.compose.routing" compileSdk = 33 defaultConfig { diff --git a/compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/GlobalRoute.kt b/compose-routing/src/main/kotlin/it/hamy/compose/routing/GlobalRoute.kt similarity index 91% rename from compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/GlobalRoute.kt rename to compose-routing/src/main/kotlin/it/hamy/compose/routing/GlobalRoute.kt index 920343b..c6a2d27 100644 --- a/compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/GlobalRoute.kt +++ b/compose-routing/src/main/kotlin/it/hamy/compose/routing/GlobalRoute.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.routing +package it.hamy.compose.routing import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect diff --git a/compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/Route.kt b/compose-routing/src/main/kotlin/it/hamy/compose/routing/Route.kt similarity index 98% rename from compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/Route.kt rename to compose-routing/src/main/kotlin/it/hamy/compose/routing/Route.kt index 5c6b02c..ad202cd 100644 --- a/compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/Route.kt +++ b/compose-routing/src/main/kotlin/it/hamy/compose/routing/Route.kt @@ -1,6 +1,6 @@ @file:Suppress("UNCHECKED_CAST") -package it.vfsfitvnm.compose.routing +package it.hamy.compose.routing import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable diff --git a/compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/RouteHandler.kt b/compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandler.kt similarity index 98% rename from compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/RouteHandler.kt rename to compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandler.kt index 212fd58..4a8df5f 100644 --- a/compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/RouteHandler.kt +++ b/compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandler.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.routing +package it.hamy.compose.routing import androidx.activity.compose.BackHandler import androidx.activity.compose.LocalOnBackPressedDispatcherOwner diff --git a/compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/RouteHandlerScope.kt b/compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandlerScope.kt similarity index 95% rename from compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/RouteHandlerScope.kt rename to compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandlerScope.kt index 17429af..530177b 100644 --- a/compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/RouteHandlerScope.kt +++ b/compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandlerScope.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.routing +package it.hamy.compose.routing import android.annotation.SuppressLint import androidx.compose.runtime.Composable diff --git a/compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/Transitions.kt b/compose-routing/src/main/kotlin/it/hamy/compose/routing/Transitions.kt similarity index 97% rename from compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/Transitions.kt rename to compose-routing/src/main/kotlin/it/hamy/compose/routing/Transitions.kt index 3be3f19..3a9781d 100644 --- a/compose-routing/src/main/kotlin/it/vfsfitvnm/compose/routing/Transitions.kt +++ b/compose-routing/src/main/kotlin/it/hamy/compose/routing/Transitions.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.compose.routing +package it.hamy.compose.routing import androidx.compose.animation.AnimatedContentScope import androidx.compose.animation.ContentTransform diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/Innertube.kt b/innertube/src/main/kotlin/it/hamy/innertube/Innertube.kt similarity index 97% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/Innertube.kt rename to innertube/src/main/kotlin/it/hamy/innertube/Innertube.kt index 2443610..4423765 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/Innertube.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/Innertube.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube +package it.hamy.innertube import io.ktor.client.HttpClient import io.ktor.client.engine.okhttp.OkHttp @@ -12,9 +12,9 @@ import io.ktor.client.request.header import io.ktor.http.ContentType import io.ktor.http.HttpHeaders import io.ktor.serialization.kotlinx.json.json -import it.vfsfitvnm.innertube.models.NavigationEndpoint -import it.vfsfitvnm.innertube.models.Runs -import it.vfsfitvnm.innertube.models.Thumbnail +import it.hamy.innertube.models.NavigationEndpoint +import it.hamy.innertube.models.Runs +import it.hamy.innertube.models.Thumbnail import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/BrowseResponse.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/BrowseResponse.kt similarity index 97% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/BrowseResponse.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/BrowseResponse.kt index ef7e2f8..12253d8 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/BrowseResponse.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/BrowseResponse.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/ButtonRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/ButtonRenderer.kt similarity index 78% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/ButtonRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/ButtonRenderer.kt index 12d8507..1ab2a8e 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/ButtonRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/ButtonRenderer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Context.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt similarity index 97% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Context.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt index 369d7f0..a29574e 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Context.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Continuation.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/Continuation.kt similarity index 91% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Continuation.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/Continuation.kt index 61f8099..6850eff 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Continuation.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/Continuation.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/ContinuationResponse.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/ContinuationResponse.kt similarity index 93% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/ContinuationResponse.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/ContinuationResponse.kt index 9f321c3..44987ca 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/ContinuationResponse.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/ContinuationResponse.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/GetQueueResponse.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/GetQueueResponse.kt similarity index 87% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/GetQueueResponse.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/GetQueueResponse.kt index 02a3899..73f2c57 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/GetQueueResponse.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/GetQueueResponse.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/GridRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/GridRenderer.kt similarity index 85% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/GridRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/GridRenderer.kt index 2a000cf..6535435 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/GridRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/GridRenderer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicCarouselShelfRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/MusicCarouselShelfRenderer.kt similarity index 96% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicCarouselShelfRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/MusicCarouselShelfRenderer.kt index f7f1d16..9bdf8a2 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicCarouselShelfRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/MusicCarouselShelfRenderer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicResponsiveListItemRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/MusicResponsiveListItemRenderer.kt similarity index 95% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicResponsiveListItemRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/MusicResponsiveListItemRenderer.kt index bbd178e..9c83330 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicResponsiveListItemRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/MusicResponsiveListItemRenderer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicShelfRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/MusicShelfRenderer.kt similarity index 97% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicShelfRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/MusicShelfRenderer.kt index 15e8659..31bf7eb 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicShelfRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/MusicShelfRenderer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicTwoRowItemRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt similarity index 86% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicTwoRowItemRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt index 17f755d..4bd0f7a 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/MusicTwoRowItemRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/NavigationEndpoint.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt similarity index 99% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/NavigationEndpoint.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt index 91efa5c..bd651f6 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/NavigationEndpoint.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/NextResponse.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/NextResponse.kt similarity index 98% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/NextResponse.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/NextResponse.kt index a165974..42a1176 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/NextResponse.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/NextResponse.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/PlayerResponse.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/PlayerResponse.kt similarity index 97% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/PlayerResponse.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/PlayerResponse.kt index d913698..d63046c 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/PlayerResponse.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/PlayerResponse.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/PlaylistPanelVideoRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/PlaylistPanelVideoRenderer.kt similarity index 89% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/PlaylistPanelVideoRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/PlaylistPanelVideoRenderer.kt index 6e0b497..1cffa18 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/PlaylistPanelVideoRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/PlaylistPanelVideoRenderer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Runs.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt similarity index 95% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Runs.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt index c2a9463..c560180 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Runs.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/SearchResponse.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/SearchResponse.kt similarity index 69% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/SearchResponse.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/SearchResponse.kt index c6b6d96..87f50ed 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/SearchResponse.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/SearchResponse.kt @@ -1,6 +1,5 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models -import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable @Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/SearchSuggestionsResponse.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/SearchSuggestionsResponse.kt similarity index 95% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/SearchSuggestionsResponse.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/SearchSuggestionsResponse.kt index b61de04..d8f978d 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/SearchSuggestionsResponse.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/SearchSuggestionsResponse.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/SectionListRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/SectionListRenderer.kt similarity index 95% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/SectionListRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/SectionListRenderer.kt index 0d52b65..62fb3f3 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/SectionListRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/SectionListRenderer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Tabs.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/Tabs.kt similarity index 93% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Tabs.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/Tabs.kt index ad4a3fb..c8e504b 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Tabs.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/Tabs.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Thumbnail.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt similarity index 92% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Thumbnail.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt index 7db4281..d64619f 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/Thumbnail.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/ThumbnailRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/ThumbnailRenderer.kt similarity index 81% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/ThumbnailRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/ThumbnailRenderer.kt index 1153a4f..6730118 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/ThumbnailRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/ThumbnailRenderer.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.models +package it.hamy.innertube.models import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable @@ -16,7 +16,7 @@ data class ThumbnailRenderer( ) { @Serializable data class Thumbnail( - val thumbnails: List? + val thumbnails: List? ) } } diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/BrowseBody.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/BrowseBody.kt similarity index 67% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/BrowseBody.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/bodies/BrowseBody.kt index 7c35633..debb125 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/BrowseBody.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/BrowseBody.kt @@ -1,6 +1,6 @@ -package it.vfsfitvnm.innertube.models.bodies +package it.hamy.innertube.models.bodies -import it.vfsfitvnm.innertube.models.Context +import it.hamy.innertube.models.Context import kotlinx.serialization.Serializable @Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/ContinuationBody.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/ContinuationBody.kt similarity index 64% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/ContinuationBody.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/bodies/ContinuationBody.kt index 946dd11..4786cff 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/ContinuationBody.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/ContinuationBody.kt @@ -1,6 +1,6 @@ -package it.vfsfitvnm.innertube.models.bodies +package it.hamy.innertube.models.bodies -import it.vfsfitvnm.innertube.models.Context +import it.hamy.innertube.models.Context import kotlinx.serialization.Serializable @Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/NextBody.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/NextBody.kt similarity index 88% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/NextBody.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/bodies/NextBody.kt index d3f2bd8..075aa46 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/NextBody.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/NextBody.kt @@ -1,6 +1,6 @@ -package it.vfsfitvnm.innertube.models.bodies +package it.hamy.innertube.models.bodies -import it.vfsfitvnm.innertube.models.Context +import it.hamy.innertube.models.Context import kotlinx.serialization.Serializable @Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/PlayerBody.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/PlayerBody.kt similarity index 68% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/PlayerBody.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/bodies/PlayerBody.kt index b09dd2f..71d1fe3 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/PlayerBody.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/PlayerBody.kt @@ -1,6 +1,6 @@ -package it.vfsfitvnm.innertube.models.bodies +package it.hamy.innertube.models.bodies -import it.vfsfitvnm.innertube.models.Context +import it.hamy.innertube.models.Context import kotlinx.serialization.Serializable @Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/QueueBody.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/QueueBody.kt similarity index 69% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/QueueBody.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/bodies/QueueBody.kt index 2f9288c..86de51f 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/QueueBody.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/QueueBody.kt @@ -1,6 +1,6 @@ -package it.vfsfitvnm.innertube.models.bodies +package it.hamy.innertube.models.bodies -import it.vfsfitvnm.innertube.models.Context +import it.hamy.innertube.models.Context import kotlinx.serialization.Serializable @Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/SearchBody.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchBody.kt similarity index 66% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/SearchBody.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchBody.kt index d21af57..f834398 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/SearchBody.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchBody.kt @@ -1,6 +1,6 @@ -package it.vfsfitvnm.innertube.models.bodies +package it.hamy.innertube.models.bodies -import it.vfsfitvnm.innertube.models.Context +import it.hamy.innertube.models.Context import kotlinx.serialization.Serializable @Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/SearchSuggestionsBody.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchSuggestionsBody.kt similarity index 64% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/SearchSuggestionsBody.kt rename to innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchSuggestionsBody.kt index c0115e9..8fcdd62 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/models/bodies/SearchSuggestionsBody.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchSuggestionsBody.kt @@ -1,6 +1,6 @@ -package it.vfsfitvnm.innertube.models.bodies +package it.hamy.innertube.models.bodies -import it.vfsfitvnm.innertube.models.Context +import it.hamy.innertube.models.Context import kotlinx.serialization.Serializable @Serializable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/AlbumPage.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt similarity index 84% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/AlbumPage.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt index 378f96b..0bf18b5 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/AlbumPage.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt @@ -1,9 +1,9 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.http.Url -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.NavigationEndpoint -import it.vfsfitvnm.innertube.models.bodies.BrowseBody +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.NavigationEndpoint +import it.hamy.innertube.models.bodies.BrowseBody suspend fun Innertube.albumPage(body: BrowseBody): Result? { return playlistPage(body)?.map { album -> diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/ArtistPage.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt similarity index 87% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/ArtistPage.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt index 7b59519..ebc50df 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/ArtistPage.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt @@ -1,17 +1,17 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.BrowseResponse -import it.vfsfitvnm.innertube.models.MusicCarouselShelfRenderer -import it.vfsfitvnm.innertube.models.MusicShelfRenderer -import it.vfsfitvnm.innertube.models.SectionListRenderer -import it.vfsfitvnm.innertube.models.bodies.BrowseBody -import it.vfsfitvnm.innertube.utils.findSectionByTitle -import it.vfsfitvnm.innertube.utils.from -import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.BrowseResponse +import it.hamy.innertube.models.MusicCarouselShelfRenderer +import it.hamy.innertube.models.MusicShelfRenderer +import it.hamy.innertube.models.SectionListRenderer +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.utils.findSectionByTitle +import it.hamy.innertube.utils.from +import it.hamy.innertube.utils.runCatchingNonCancellable suspend fun Innertube.artistPage(body: BrowseBody): Result? = runCatchingNonCancellable { diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/ItemsPage.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/ItemsPage.kt similarity index 85% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/ItemsPage.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/ItemsPage.kt index f4c17bd..1eebafd 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/ItemsPage.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/ItemsPage.kt @@ -1,18 +1,18 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.BrowseResponse -import it.vfsfitvnm.innertube.models.ContinuationResponse -import it.vfsfitvnm.innertube.models.GridRenderer -import it.vfsfitvnm.innertube.models.MusicResponsiveListItemRenderer -import it.vfsfitvnm.innertube.models.MusicShelfRenderer -import it.vfsfitvnm.innertube.models.MusicTwoRowItemRenderer -import it.vfsfitvnm.innertube.models.bodies.BrowseBody -import it.vfsfitvnm.innertube.models.bodies.ContinuationBody -import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.BrowseResponse +import it.hamy.innertube.models.ContinuationResponse +import it.hamy.innertube.models.GridRenderer +import it.hamy.innertube.models.MusicResponsiveListItemRenderer +import it.hamy.innertube.models.MusicShelfRenderer +import it.hamy.innertube.models.MusicTwoRowItemRenderer +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.models.bodies.ContinuationBody +import it.hamy.innertube.utils.runCatchingNonCancellable suspend fun Innertube.itemsPage( body: BrowseBody, diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/Lyrics.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/Lyrics.kt similarity index 76% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/Lyrics.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/Lyrics.kt index a4c0615..6b23f96 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/Lyrics.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/Lyrics.kt @@ -1,14 +1,14 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.BrowseResponse -import it.vfsfitvnm.innertube.models.NextResponse -import it.vfsfitvnm.innertube.models.bodies.BrowseBody -import it.vfsfitvnm.innertube.models.bodies.NextBody -import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.BrowseResponse +import it.hamy.innertube.models.NextResponse +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.models.bodies.NextBody +import it.hamy.innertube.utils.runCatchingNonCancellable suspend fun Innertube.lyrics(body: NextBody): Result? = runCatchingNonCancellable { val nextResponse = client.post(next) { diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/NextPage.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/NextPage.kt similarity index 87% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/NextPage.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/NextPage.kt index edb84d0..8da1525 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/NextPage.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/NextPage.kt @@ -1,15 +1,15 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.ContinuationResponse -import it.vfsfitvnm.innertube.models.NextResponse -import it.vfsfitvnm.innertube.models.bodies.ContinuationBody -import it.vfsfitvnm.innertube.models.bodies.NextBody -import it.vfsfitvnm.innertube.utils.from -import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.ContinuationResponse +import it.hamy.innertube.models.NextResponse +import it.hamy.innertube.models.bodies.ContinuationBody +import it.hamy.innertube.models.bodies.NextBody +import it.hamy.innertube.utils.from +import it.hamy.innertube.utils.runCatchingNonCancellable diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/Player.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/Player.kt similarity index 88% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/Player.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/Player.kt index d2fa6a4..23155ff 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/Player.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/Player.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.get @@ -6,11 +6,11 @@ import io.ktor.client.request.post import io.ktor.client.request.setBody import io.ktor.http.ContentType import io.ktor.http.contentType -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.Context -import it.vfsfitvnm.innertube.models.PlayerResponse -import it.vfsfitvnm.innertube.models.bodies.PlayerBody -import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.Context +import it.hamy.innertube.models.PlayerResponse +import it.hamy.innertube.models.bodies.PlayerBody +import it.hamy.innertube.utils.runCatchingNonCancellable import kotlinx.serialization.Serializable suspend fun Innertube.player(body: PlayerBody) = runCatchingNonCancellable { diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/PlaylistPage.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/PlaylistPage.kt similarity index 85% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/PlaylistPage.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/PlaylistPage.kt index a9824d3..43e25d5 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/PlaylistPage.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/PlaylistPage.kt @@ -1,17 +1,17 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.BrowseResponse -import it.vfsfitvnm.innertube.models.ContinuationResponse -import it.vfsfitvnm.innertube.models.MusicCarouselShelfRenderer -import it.vfsfitvnm.innertube.models.MusicShelfRenderer -import it.vfsfitvnm.innertube.models.bodies.BrowseBody -import it.vfsfitvnm.innertube.models.bodies.ContinuationBody -import it.vfsfitvnm.innertube.utils.from -import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.BrowseResponse +import it.hamy.innertube.models.ContinuationResponse +import it.hamy.innertube.models.MusicCarouselShelfRenderer +import it.hamy.innertube.models.MusicShelfRenderer +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.models.bodies.ContinuationBody +import it.hamy.innertube.utils.from +import it.hamy.innertube.utils.runCatchingNonCancellable suspend fun Innertube.playlistPage(body: BrowseBody) = runCatchingNonCancellable { val response = client.post(browse) { diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/Queue.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/Queue.kt similarity index 71% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/Queue.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/Queue.kt index 9ea86ea..d35365a 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/Queue.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/Queue.kt @@ -1,13 +1,13 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.GetQueueResponse -import it.vfsfitvnm.innertube.models.bodies.QueueBody -import it.vfsfitvnm.innertube.utils.from -import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.GetQueueResponse +import it.hamy.innertube.models.bodies.QueueBody +import it.hamy.innertube.utils.from +import it.hamy.innertube.utils.runCatchingNonCancellable suspend fun Innertube.queue(body: QueueBody) = runCatchingNonCancellable { val response = client.post(queue) { diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/RelatedPage.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/RelatedPage.kt similarity index 81% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/RelatedPage.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/RelatedPage.kt index 41d0b8e..14c6fda 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/RelatedPage.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/RelatedPage.kt @@ -1,18 +1,18 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.BrowseResponse -import it.vfsfitvnm.innertube.models.MusicCarouselShelfRenderer -import it.vfsfitvnm.innertube.models.NextResponse -import it.vfsfitvnm.innertube.models.bodies.BrowseBody -import it.vfsfitvnm.innertube.models.bodies.NextBody -import it.vfsfitvnm.innertube.utils.findSectionByStrapline -import it.vfsfitvnm.innertube.utils.findSectionByTitle -import it.vfsfitvnm.innertube.utils.from -import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.BrowseResponse +import it.hamy.innertube.models.MusicCarouselShelfRenderer +import it.hamy.innertube.models.NextResponse +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.models.bodies.NextBody +import it.hamy.innertube.utils.findSectionByStrapline +import it.hamy.innertube.utils.findSectionByTitle +import it.hamy.innertube.utils.from +import it.hamy.innertube.utils.runCatchingNonCancellable suspend fun Innertube.relatedPage(body: NextBody) = runCatchingNonCancellable { val nextResponse = client.post(next) { diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/SearchPage.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchPage.kt similarity index 80% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/SearchPage.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/SearchPage.kt index 6e57d28..f9db35b 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/SearchPage.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchPage.kt @@ -1,15 +1,15 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.ContinuationResponse -import it.vfsfitvnm.innertube.models.MusicShelfRenderer -import it.vfsfitvnm.innertube.models.SearchResponse -import it.vfsfitvnm.innertube.models.bodies.ContinuationBody -import it.vfsfitvnm.innertube.models.bodies.SearchBody -import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.ContinuationResponse +import it.hamy.innertube.models.MusicShelfRenderer +import it.hamy.innertube.models.SearchResponse +import it.hamy.innertube.models.bodies.ContinuationBody +import it.hamy.innertube.models.bodies.SearchBody +import it.hamy.innertube.utils.runCatchingNonCancellable suspend fun Innertube.searchPage( body: SearchBody, diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/SearchSuggestions.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchSuggestions.kt similarity index 74% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/SearchSuggestions.kt rename to innertube/src/main/kotlin/it/hamy/innertube/requests/SearchSuggestions.kt index bb00be9..6cd1610 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/requests/SearchSuggestions.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchSuggestions.kt @@ -1,12 +1,12 @@ -package it.vfsfitvnm.innertube.requests +package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.SearchSuggestionsResponse -import it.vfsfitvnm.innertube.models.bodies.SearchSuggestionsBody -import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.SearchSuggestionsResponse +import it.hamy.innertube.models.bodies.SearchSuggestionsBody +import it.hamy.innertube.utils.runCatchingNonCancellable suspend fun Innertube.searchSuggestions(body: SearchSuggestionsBody) = runCatchingNonCancellable { val response = client.post(searchSuggestions) { diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromMusicResponsiveListItemRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicResponsiveListItemRenderer.kt similarity index 84% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromMusicResponsiveListItemRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicResponsiveListItemRenderer.kt index 7339f0c..8eebdeb 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromMusicResponsiveListItemRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicResponsiveListItemRenderer.kt @@ -1,9 +1,9 @@ -package it.vfsfitvnm.innertube.utils +package it.hamy.innertube.utils -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.MusicResponsiveListItemRenderer -import it.vfsfitvnm.innertube.models.NavigationEndpoint -import it.vfsfitvnm.innertube.models.Runs +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.MusicResponsiveListItemRenderer +import it.hamy.innertube.models.NavigationEndpoint +import it.hamy.innertube.models.Runs fun Innertube.SongItem.Companion.from(renderer: MusicResponsiveListItemRenderer): Innertube.SongItem? { return Innertube.SongItem( diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromMusicShelfRendererContent.kt b/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicShelfRendererContent.kt similarity index 95% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromMusicShelfRendererContent.kt rename to innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicShelfRendererContent.kt index 1cbcab6..fe507b8 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromMusicShelfRendererContent.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicShelfRendererContent.kt @@ -1,8 +1,8 @@ -package it.vfsfitvnm.innertube.utils +package it.hamy.innertube.utils -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.MusicShelfRenderer -import it.vfsfitvnm.innertube.models.NavigationEndpoint +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.MusicShelfRenderer +import it.hamy.innertube.models.NavigationEndpoint fun Innertube.SongItem.Companion.from(content: MusicShelfRenderer.Content): Innertube.SongItem? { val (mainRuns, otherRuns) = content.runs diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromMusicTwoRowItemRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt similarity index 93% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromMusicTwoRowItemRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt index 15dc097..3fb8a1c 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromMusicTwoRowItemRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt @@ -1,7 +1,7 @@ -package it.vfsfitvnm.innertube.utils +package it.hamy.innertube.utils -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.MusicTwoRowItemRenderer +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.MusicTwoRowItemRenderer fun Innertube.AlbumItem.Companion.from(renderer: MusicTwoRowItemRenderer): Innertube.AlbumItem? { return Innertube.AlbumItem( diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromPlaylistPanelVideoRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt similarity index 86% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromPlaylistPanelVideoRenderer.kt rename to innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt index 92ea20c..3d97f88 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/FromPlaylistPanelVideoRenderer.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt @@ -1,7 +1,7 @@ -package it.vfsfitvnm.innertube.utils +package it.hamy.innertube.utils -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.PlaylistPanelVideoRenderer +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.PlaylistPanelVideoRenderer fun Innertube.SongItem.Companion.from(renderer: PlaylistPanelVideoRenderer): Innertube.SongItem? { return Innertube.SongItem( diff --git a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/Utils.kt b/innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt similarity index 91% rename from innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/Utils.kt rename to innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt index 6a2acf8..5fcf861 100644 --- a/innertube/src/main/kotlin/it/vfsfitvnm/innertube/utils/Utils.kt +++ b/innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt @@ -1,8 +1,8 @@ -package it.vfsfitvnm.innertube.utils +package it.hamy.innertube.utils import io.ktor.utils.io.CancellationException -import it.vfsfitvnm.innertube.Innertube -import it.vfsfitvnm.innertube.models.SectionListRenderer +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.SectionListRenderer internal fun SectionListRenderer.findSectionByTitle(text: String): SectionListRenderer.Content? { return contents?.find { content -> diff --git a/kugou/src/main/kotlin/it/vfsfitvnm/kugou/KuGou.kt b/kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt similarity index 97% rename from kugou/src/main/kotlin/it/vfsfitvnm/kugou/KuGou.kt rename to kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt index 8c1875e..60716ce 100644 --- a/kugou/src/main/kotlin/it/vfsfitvnm/kugou/KuGou.kt +++ b/kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.kugou +package it.hamy.kugou import io.ktor.client.HttpClient import io.ktor.client.call.body @@ -13,9 +13,9 @@ import io.ktor.http.ContentType import io.ktor.http.encodeURLParameter import io.ktor.serialization.kotlinx.json.json import io.ktor.util.decodeBase64String -import it.vfsfitvnm.kugou.models.DownloadLyricsResponse -import it.vfsfitvnm.kugou.models.SearchLyricsResponse -import it.vfsfitvnm.kugou.models.SearchSongResponse +import it.hamy.kugou.models.DownloadLyricsResponse +import it.hamy.kugou.models.SearchLyricsResponse +import it.hamy.kugou.models.SearchSongResponse import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json diff --git a/kugou/src/main/kotlin/it/vfsfitvnm/kugou/Result.kt b/kugou/src/main/kotlin/it/hamy/kugou/Result.kt similarity index 89% rename from kugou/src/main/kotlin/it/vfsfitvnm/kugou/Result.kt rename to kugou/src/main/kotlin/it/hamy/kugou/Result.kt index 7d89d5c..65297cb 100644 --- a/kugou/src/main/kotlin/it/vfsfitvnm/kugou/Result.kt +++ b/kugou/src/main/kotlin/it/hamy/kugou/Result.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.kugou +package it.hamy.kugou import kotlin.coroutines.cancellation.CancellationException diff --git a/kugou/src/main/kotlin/it/vfsfitvnm/kugou/models/DownloadLyricsResponse.kt b/kugou/src/main/kotlin/it/hamy/kugou/models/DownloadLyricsResponse.kt similarity index 78% rename from kugou/src/main/kotlin/it/vfsfitvnm/kugou/models/DownloadLyricsResponse.kt rename to kugou/src/main/kotlin/it/hamy/kugou/models/DownloadLyricsResponse.kt index 049b482..5d41d21 100644 --- a/kugou/src/main/kotlin/it/vfsfitvnm/kugou/models/DownloadLyricsResponse.kt +++ b/kugou/src/main/kotlin/it/hamy/kugou/models/DownloadLyricsResponse.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.kugou.models +package it.hamy.kugou.models import kotlinx.serialization.Serializable diff --git a/kugou/src/main/kotlin/it/vfsfitvnm/kugou/models/SearchLyricsResponse.kt b/kugou/src/main/kotlin/it/hamy/kugou/models/SearchLyricsResponse.kt similarity index 90% rename from kugou/src/main/kotlin/it/vfsfitvnm/kugou/models/SearchLyricsResponse.kt rename to kugou/src/main/kotlin/it/hamy/kugou/models/SearchLyricsResponse.kt index 342b867..78351b7 100644 --- a/kugou/src/main/kotlin/it/vfsfitvnm/kugou/models/SearchLyricsResponse.kt +++ b/kugou/src/main/kotlin/it/hamy/kugou/models/SearchLyricsResponse.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.kugou.models +package it.hamy.kugou.models import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/kugou/src/main/kotlin/it/vfsfitvnm/kugou/models/SearchSongResponse.kt b/kugou/src/main/kotlin/it/hamy/kugou/models/SearchSongResponse.kt similarity index 90% rename from kugou/src/main/kotlin/it/vfsfitvnm/kugou/models/SearchSongResponse.kt rename to kugou/src/main/kotlin/it/hamy/kugou/models/SearchSongResponse.kt index 97d9dbd..4698082 100644 --- a/kugou/src/main/kotlin/it/vfsfitvnm/kugou/models/SearchSongResponse.kt +++ b/kugou/src/main/kotlin/it/hamy/kugou/models/SearchSongResponse.kt @@ -1,4 +1,4 @@ -package it.vfsfitvnm.kugou.models +package it.hamy.kugou.models import kotlinx.serialization.Serializable