Releases: rukamori/canary
Release list
N20260724
Release ArchiveTune Nightly artifact, generated on 2026/07/24 - 07:32:20 (UTC +0)
π MVP Committer
Congratulations to @rukamori for contributing 113 commit(s) in this release! π
π Contribution Leaderboard
π₯ @rukamori: 113 commit(s)
π₯ @mikooochi: 61 commit(s)
π₯ @ffelixm: 8 commit(s)
π€ @gallegonovato: 8 commit(s)
π€ @midomizo933: 3 commit(s)
π€ @ooobamboo: 2 commit(s)
π€ @ValteMCPE: 2 commit(s)
π€ @Mickael81: 2 commit(s)
π€ @adam-adrian: 2 commit(s)
π€ @beebtw: 2 commit(s)
π€ @Anonymous: 2 commit(s)
π€ @IIXII-L192: 1 commit(s)
π€ @avatrax6: 1 commit(s)
π€ @marstraveler01: 1 commit(s)
π€ @Simone20031: 1 commit(s)
β¨ Changelog
30d9a77- "refactor(MainActivity): update visible condition in AnimatedVisibility using playerBottomSheetState #1019" by (@rukamori)bfae1cc- "refactor(MainActivity): replace playerBottomSheetState isCollapsed and isDismissed with isExpandedOrExpanding" by (@rukamori)59b4c96- "feat(QRCParser): add BetterLyrics Portato support #1060" by (@rukamori)53c9906- "feat(YTPlayerUtils): add ANDROID_VR_1_65_10 client and update client ordering logic in getOrderedStreamClients" by (@rukamori)9559ff8- "refactor(StreamClientUtils): replace ANDROID_VR_NO_AUTH with ANDROID_VR_1_65_10" by (@rukamori)a636357- "refactor(YouTubeLoginRepository): extract verificationAuthState and reorder accountInfo invocation" by (@rukamori)b36ceb6- "refactor(LoginViewModel): remove LoginEvent and delegate login initiation to startLogin" by (@rukamori)02d5a0e- "refactor(LoginScreen): extract YouTubeLoginWebViewClient" by (@rukamori)2672807- "refactor(App): replace visitorData with sessionId in authState check" by (@rukamori)0e9b892- "refactor(YTPlayerUtils): extract mintWebPlaybackPoTokens and add isForbiddenPlayerRequest" by (@rukamori)b345c9b- "refactor(PoTokenExtractionActivity): use YouTube.currentPlaybackAuthState to derive tokenBindingId and persistedVisitorData in completeIfReady" by (@rukamori)69072ce- "refactor(BrowserSupportPageRepository): remove existing start.io integration" by (@mikooochi)0aa793c- "feat(MediaItemExt): replace platform-specific null check with direct uri conversion for notification artwork" by (@mikooochi)09975ef- "feat(MediaItemExt): add conditional uri generation for ice cream build to avoid Android 15 metadata artwork crash" by (@rukamori)b5bcd42- "fix(CanvasArtworkPlayer): stop unsupported Canvas retry crashes #1047" by (@rukamori)01d373e- "feat(CanvasArtworkPlaybackCache): add media codec check to validate canvas video compatibility #1047" by (@rukamori)034ef42- "fix(MainActivity): replace playerBottomSheetState.isExpanded with playerBottomSheetState.isExpandedOrExpanding in shouldHideStatusBars condition #1038" by (@rukamori)9537323- "fix(App): use when (result) to handle GatekeeperResult.Allowed and Unavailable cases with Unit handling, replace if condition with retryable check" by (@rukamori)f1c4790- "fix(GatekeeperViewModel): handle blocked result by sending message through channel" by (@rukamori)f4d12df- "fix(GatekeeperRepository): handle IOException by returning Unavailable instead of Blocked" by (@rukamori)715b836- "update domain" by (@rukamori)6caef14- "fix(recognition,downloads,aod,sleeptimer,lyrics,gms): recognition flow, download controls, AOD touch, sleep timer pause, synced lyrics & Start.io GPL compliance (#1053)" by (@IIXII-L192)df82fcf- "bump release" by (@rukamori)169f858- "fix(FadingEdge): swap Color.Black and Color.Transparent in horizontalGradient colors" by (@rukamori)cb57019- "feat(OnlinePlaylistScreen): add fallbackPlaySong fallback to playerConnection.playQueue via toPlaylistPlaybackEndpoint" by (@rukamori)0c42fde- "refactor(MediaDetailHero): replace Row with BoxWithConstraints and use fadingEdge for MediaDetailPrimaryActions" by (@rukamori)a2b2a60- "refactor(MediaDetailHero): add horizontalScroll with LaunchedEffect to MediaDetailPrimaryActions" by (@rukamori)3248c0b- "refactor(MediaDetailHero): make MediaDetailHero MediaDetailPrimaryActions MediaDetailAction MediaDetailIconAction public and replace constrainWidth" by (@rukamori)64ea48c- "refactor(Queue): replace dragInfo pair with QueueDragInfo and QueueDragDestination" by (@rukamori)4d21e6c- "refactor(LibraryPlaylistsScreen): replace Row toggle with DropdownMenuItem and IconButton using weight and spacedBy" by (@rukamori)e188193- "refactor(MediaDetailHero): replace horizontalScroll row with MediaDetailBalancedActionLayout using layoutId MediaDetailActionLayoutId" by (@rukamori)22fd494- "refactor(PlaylistMenu): add catch for CancellationException and make PlaylistMenu public" by (@rukamori)42d097c- "fix(OnlinePlaylistViewModel): use compareAndSet" by (@rukamori)2addb5c- "feat(DatabaseDao): add clearAlbumSongs to delete song_album_map by" by (@rukamori)6a12e2b- "refactor(constant): remove AiProvider CLAUDE and OPENROUTER support" by (@rukamori)8db146b- "refactor(StartIoSupportAdRepository): add SupportAdMode enum with Rewarded and Automatic fallback handling" by (@rukamori)5e78cdd- "fix(BotGuardTokenGenerator): use stable continuation APIs #1034" by (@rukamori)76abc3f- "refactor(BotGuardTokenGenerator): wrap JS bridge callbacks in dispatchBridgeCallback with tryResume to prevent resume crashes #1034" by (@rukamori)4f4301f- "refactor(LocalPlaylistScreen): extract isReorderingEnabled and isSwipeToDeleteEnabled flags to simplify swipe/drag logic #1034" by (@rukamori)a1fd55d- **"feat(PlayerConnection...
N20260712
Release ArchiveTune Nightly artifact, generated on 2026/07/12 - 14:18:55 (UTC +0)
π MVP Committer
Congratulations to @rukamori for contributing 42 commit(s) in this release! π
π Contribution Leaderboard
π₯ @rukamori: 42 commit(s)
π₯ @mikooochi: 7 commit(s)
π₯ @adam-adrian: 3 commit(s)
π€ @renovate[bot]: 1 commit(s)
β¨ Changelog
a05cff1- "feat(DownloadLibraryScreen): refine searchable media rows" by (@rukamori)96ff825- "refactor(DatabaseDao): Suppress RoomWarnings.QUERY_MISMATCH on allAlbumsForDownloads()" by (@rukamori)8bd6218- "refactor(DownloadLibraryScreen): Import asPaddingValues" by (@rukamori)5998bda- "feat(DownloadLibraryScreen): add grouped download management tabs" by (@rukamori)cde262b- "fix(DownloadProgressFloatingToolbar): restore paused download controls" by (@rukamori)49e081d- "fix(MusicService): prevent current song queue duplicates" by (@rukamori)45e785e- "fix(YouTubeClient): preserve signed-in playback authentication" by (@rukamori)40aef26- "perf(YTPlayerUtils): reuse playback data for downloads" by (@rukamori)8e5895a- "fix(YTPlayerUtils): prefer Web Remix playback" by (@rukamori)599586a- "remove android vr selection" by (@rukamori)c1472fc- "fix(deps): update all dependencies (#995)" by (@renovate[bot])eeeafc8- "fix(YTPlayerUtils): mark stream client failed when httpStatusCode is null #984" by (@rukamori)ae69949- "refactor(MusicService): define isFullyDownloadedMedia via downloadCache.isCached and ContentMetadata #984" by (@rukamori)a244bd0- "refactor(Updater): migrate nightly channels to canary" by (@rukamori)cb396c5- "fix(CanvasArtworkPlaybackCache): preserve and reuse cached canvas videos" by (@rukamori)30f8c86- "fix(DownloadUtil): restore artwork for downloaded songs" by (@rukamori)93dd9b3- "fix(MoriCipherRuntime): prevent throttled playback URLs" by (@rukamori)ac766bd- "update all submodule" by (@rukamori)855df2e- "update all links" by (@rukamori)f5f2e68- "fix(player): crash on API 29 when opening output switcher (#991)" by (@adam-adrian, @rukamori)4e50247- "fix(player): improve formattedFileSize to dynamically support multi-unit and decimal precision (#988)" by (@adam-adrian, @rukamori)cdba7d0- "reverted screen to previous state" by (@rukamori)5590836- "fix color transparent" by (@rukamori)13e67c8- "fix error coroutines violations" by (@rukamori)e3cf5b4- "fix(CipherSettingsUseCases): reset manual refresh after 24 hours" by (@rukamori)f3c2ac3- "fix(PlaybackAuthPreferences): preserve dataSyncId during playback recovery" by (@rukamori)01dae88- "fix(AboutScreen): avoid composable calls inside remember" by (@rukamori)074a319- "feat(AboutScreen): reconstruct about layout" by (@rukamori)8dd0db0- "refactor(StatsScreen): move artist chart above favourites" by (@rukamori)3ac1d24- "fix(StatsScreen): differentiate artist chart colors" by (@rukamori)615dd76- "update icon pack" by (@rukamori)23efbc7- "fix(StatsScreen): always fill donut chart and remove remaining arc segment" by (@rukamori)2ecd038- "fix(App): reuse cold-start BotGuard warm-up for playback" by (@rukamori)41ceb6a- "fix(LyricsMenu): update controls switch immediately" by (@rukamori)4f4837a- "refactor(GenerateIconPackTask): sample background color from rasterized icon for integrated backgrounds" by (@rukamori)7ba7d44- "fix(GenerateIconPackTask): prevent duplicate launcher icon layers" by (@rukamori)6632d38- "fix(StatsScreen): resolve compose compiler" by (@rukamori)841df4e- "fix(ChiperSettings): animate only changed countdown digits" by (@rukamori)d7ff283- "refactor(StatsScreen): reconstruct listening dashboard and data" by (@rukamori)51c7208- "feat(AppearanceSettings): add V7 and V8 volume bar toggle" by (@mikooochi)a722316- "feat(LyricsScreen): add player controls visibility toggle" by (@mikooochi)dac10b3- "feat(player): native output switcher + reactive device pill for V7/V8 (#981)" by (@adam-adrian, @rukamori)2356c4a- "feat(MusicService): close inactive together rooms" by (@mikooochi)2276dba- "fix(IconScreen): correct search and sort types" by (@mikooochi)c1a7a67- "feat(IconScreen): add icon search, sorting and update existing icons" by (@mikooochi)bd9ea76- "fix(LyricsMenuViewModel): encapsulate isRefetching state and emit completion events on refetch" by (@mikooochi)809ce0d- "fix(LyricsMenu): replace state-based refetch dialog with flow-driven dismiss and add refetch action to search result header" by (@mikooochi)95ace31- "fix(MusicService): reconstruct queue bootstrap" by (@rukamori)4dc44da- "fix(CipherSettingsUseCases): use actual refresh timestamp for rate limit recording" by (@rukamori)815e4cc- **"feat(ChiperSettings)...
N20260705
Release ArchiveTune Nightly artifact, generated on 2026/07/05 - 00:13:13 (UTC +0)
π MVP Committer
Congratulations to @rukamori for contributing 27 commit(s) in this release! π
β¨ Changelog
b4858b0- "style(PoTokenScreen): add explicit Unit return to copyToken lambda" by (@rukamori)9bfc594- "perf(JavaScriptPlanCompiler): bound cipher dependency extraction" by (@rukamori)0028bae- "fix(PoTokenExtractionActivity): auto-complete token extraction" by (@rukamori)af4398d- "refactor(PoTokenScreen): simplify token generation" by (@rukamori)d6e97e5- "fix(BotGuardTokenGenerator): reuse startup warm-up for first playback" by (@rukamori)f15af63- "style(ChiperSettings): inline rememberCipherStatusShape without redundant remember block" by (@rukamori)e151217- "fix(YTPlayerUtils): remove redundant stream preflight latency to prevent long loading web remix" by (@rukamori)829ea1d- "style: remake chiper configuration" by (@rukamori)780ee81- "feat(ChiperSettingsViewModel): add progress percent to Loading state" by (@rukamori)e4359f7- "fix(AlbumScreen): stabilize download state smart casts" by (@rukamori)c3df0c7- "fix(MoriCipherRuntime): offload refresh compilation from main thread" by (@rukamori)aaff33f- "fix(HeaderDownloadState): synchronize header pause controls" by (@rukamori)ce95018- "refactor(GlobalLog): GlobalLogTree to extend Timber.DebugTree" by (@rukamori)743505f- "feat(LogcatScreen): apply LocalPlayerAwareWindowInsets to AnimatedVisibility" by (@rukamori)f169301- "fix(LogcatRepository): tag comparison for null capturedEntry.tag" by (@rukamori)8b0be76- "update deobfuscator submodules" by (@rukamori)03ba33e- "fix(JavaScriptPlanCompiler): replace raw backtick string terminators with ["'] in n-function patterns" by (@rukamori)30e87e7- "fix(JavaScriptPlanCompiler): anchor n-function patterns to string argument and inject global shims into program" by (@rukamori)9d0b659- "fix(JavaScriptPlanCompiler): broaden patterns, raise limits, and fix dependency detection" by (@rukamori)4e869e8- "fix: update deobfuscator submodules" by (@rukamori)f022587- "fix(PlayerComponents): update InlineTextContent imports to foundation.text for Compose 1.12" by (@rukamori)5661c5c- "feat(PlayerComponents): show explicit badges in all player styles" by (@rukamori)3164f03- "feat(LogcatScreen): add dedicated unified log viewer" by (@rukamori)2fa6d24- "fix(release): package signed FOSS APK" by (@rukamori)8568820- "fix(ChiperSettingsViewModel): resolve type-flow" by (@rukamori)08a43ed- "fix(MoriCipherRuntime): resolve cipher module caller" by (@rukamori)0e1ca2e- "feat(MoriCipherRuntime): add self-healing YouTube decryption" by (@rukamori)
N20260704
Release ArchiveTune Nightly artifact, generated on 2026/07/04 - 00:13:09 (UTC +0)
π MVP Committer
Congratulations to @mikooochi for contributing 8 commit(s) in this release! π
π Contribution Leaderboard
π₯ @mikooochi: 8 commit(s)
π₯ @rukamori: 2 commit(s)
β¨ Changelog
69d9f5d- "fix(main): preserve PoToken base64url padding" by (@rukamori)d345585- "fix(PlayerSettings): gate extractor and validate PoTokens" by (@rukamori)262e642- "feat(MusicRecognitionScreen): add background recognition setting" by (@mikooochi)2f8874f- "fix(BackgroundMusicRecognitionService): resolve recognition compile failures" by (@mikooochi)133adca- "fix(MusicService): persist favorite action for uncached songs #973" by (@mikooochi)dbda7aa- "fix(LibraryPlaylistsScreen): preserve playlist spacing in pure black #967" by (@mikooochi)256c8fa- "fix(SongWithStats): preserve nullable artwork in stats #969" by (@mikooochi)2a67e4a- "feat(MusicRecognitionTileService): recognize device audio in background and recognize device audio in background" by (@mikooochi)f9ca7b4- "fix(DefaultCastPlaybackRepository): prevent crash on cast disconnect" by (@mikooochi)dd5d62c- "fix(GenerateIconPackTask): correct adaptive icon scaling" by (@mikooochi)
N20260703
Release ArchiveTune Nightly artifact, generated on 2026/07/03 - 00:13:29 (UTC +0)
π MVP Committer
Congratulations to @rukamori for contributing 22 commit(s) in this release! π
π Contribution Leaderboard
π₯ @rukamori: 22 commit(s)
π₯ @mikooochi: 6 commit(s)
π₯ @hijasongood: 5 commit(s)
π€ @Mickael81: 2 commit(s)
π€ @renovate[bot]: 1 commit(s)
π€ @beebtw: 1 commit(s)
β¨ Changelog
67a43ff- "bump app to 13.7.0" by (@rukamori)2327b21- "build(GenerateIconPackTask): increase AdaptiveIconForegroundInset to 20dp" by (@rukamori)48600c8- "fix(DiscordSocialPresenceClient): serialize selected activity platform" by (@rukamori)01dbf09- "fix(MusicService): prevent playing presence from rendering as paused" by (@rukamori)a934377- "fix(DiscordImageResolver): prevent thumbnail from replacing artist artwork" by (@rukamori)8cc7a1f- "Merge branch 'dev' of github-rukamori:ArchiveTuneApp/ArchiveTune into dev" by (@rukamori)01ae481- "fix(GenerateIconPackTask): create adaptive drawable directory" by (@rukamori)2078055- "fix(deps): update dependency com.mocharealm.accompanist:lyrics-core to v0.4.7 (#966)" by (@renovate[bot])2da16d6- "Merge branch 'dev'" by (@rukamori)67f8d8f- "Merge branch 'translate'" by (@rukamori)722f857- "fix(GenerateIconPackTask): resolve JAXP property compatibility" by (@rukamori)6d52c5b- "fix(GenerateIconPackTask): preserve SVG launcher artwork" by (@rukamori)27e4e0d- "feat(LibraryAlbumsScreen): add downloaded album filter" by (@rukamori)3b573e8- "fix(Queue): use bundle-safe list keys" by (@rukamori)0fe4c7b- "update docs and assets" by (@rukamori)8e93f08- "correct my language strings" by (@rukamori)fcb9742- "fix(DebugSettings): use compatible connected button shapes" by (@rukamori)824887b- "fix(DebugActivity): share crash log and developer log as text file" by (@rukamori)3b34bb1- "feat(AppearanceSettings): Integrate Force High Refresh Rate" by (@mikooochi)951e233- "Translated using Weblate (Chinese (Traditional Han script))" by (@hijasongood)1f4fe5b- "Translated using Weblate (Chinese (Traditional Han script))" by (@hijasongood)17a7cb8- "fix(IconScreen): prevent main-thread vector inflation" by (@mikooochi)4d932c7- "fix(MusicRecognitionScreen): correct composable shape creation" by (@mikooochi)de2d1a6- "feat(MusicRecognitionScreen): restrained Material Shape recognition ancho" by (@rukamori)ae5d423- "format and cleanup unused import" by (@rukamori)e048613- "Merge branch 'translate'" by (@mikooochi)05be2fa- "feat(LibraryAlbumsScreen): show downloaded album" by (@mikooochi)a77050f- "fix(Queue): prevent list flicker and forced scrolling" by (@mikooochi)1c1b801- "feat(Theme): apply global Material motion scheme" by (@rukamori)770148f- "fix(MusicTogetherViewModel): mark sessions active only when connected" by (@rukamori)951ebd9- "fix(GenerateIconPackTask): prevent duplicate adaptive icon layers" by (@rukamori)5230779- "Translated using Weblate (Chinese (Traditional Han script))" by (@hijasongood)adcc42d- "Translated using Weblate (Chinese (Traditional Han script))" by (@hijasongood)a9addae- "Translated using Weblate (Chinese (Traditional Han script))" by (@hijasongood)1c6ea8d- "Translated using Weblate (French)" by (@Mickael81)6e6b739- "Translated using Weblate (French)" by (@Mickael81)b2394c5- "Translated using Weblate (Urdu)" by (@beebtw)
N20260702
Release ArchiveTune Nightly artifact, generated on 2026/07/02 - 01:26:50 (UTC +0)
π MVP Committer
Congratulations to @rukamori for contributing 37 commit(s) in this release! π
π Contribution Leaderboard
π₯ @rukamori: 37 commit(s)
π₯ @beebtw: 18 commit(s)
π₯ @hijasongood: 13 commit(s)
π€ @flue17: 12 commit(s)
π€ @Mickael81: 11 commit(s)
π€ @hsp1020: 10 commit(s)
π€ @gallegonovato: 6 commit(s)
π€ @Ur_lightmoon: 4 commit(s)
π€ @ValteMCPE: 4 commit(s)
π€ @Anonymous: 4 commit(s)
π€ @Yar270: 3 commit(s)
π€ @FullGa123: 3 commit(s)
π€ @renovate[bot]: 2 commit(s)
π€ @adam-adrian: 2 commit(s)
π€ @MadameVulva: 2 commit(s)
π€ @Davidzinco: 2 commit(s)
π€ @sang765: 1 commit(s)
π€ @andres2: 1 commit(s)
π€ @AlmazzikDev: 1 commit(s)
π€ @vintagezero: 1 commit(s)
π€ @nekohepott: 1 commit(s)
π€ @Nijeryaprensi: 1 commit(s)
π€ @Myrdincx: 1 commit(s)
π€ @radenya86: 1 commit(s)
π€ @wynriu: 1 commit(s)
β¨ Changelog
3a2b2d5- "refactor(IconScreen): Remove redundant remember from AppIconRow variables" by (@rukamori)964e6aa- "Merge branch 'dev'" by (@rukamori)481f018- "fix(AppBar): ensure TopAppBarState heightOffset and contentOffset reset" by (@rukamori)a923703- "perf(IconScreen): Memoize ListItemDefaults calls in AppIconRow" by (@rukamori)d21bbf6- "fix(IconScreen): align selected stroke with row shape" by (@rukamori)9b93682- "Translated using Weblate (Urdu)" by (@beebtw)0069c35- "fix generator icon" by (@rukamori)f7e02f7- "disable caching" by (@rukamori)5396119- "fix(GenerateIconPackTask): pass SVG source as path" by (@rukamori)8636b9d- "refactor(GenerateIconPackTask): generate adaptive icons from svg metadata" by (@rukamori)9767ba9- "feat(build): comment generated icon preview table" by (@rukamori)f2ce5ef- "fix(process_icon_submission): enforce 512 vector dimensions" by (@rukamori)c099617- "Merge branch 'dev' of github-rukamori:ArchiveTuneApp/ArchiveTune into dev" by (@rukamori)36f9a60- "update submodules" by (@rukamori)43aa542- "Translated using Weblate (Spanish)" by (@gallegonovato)7fd2938- "Translated using Weblate (Spanish)" by (@gallegonovato)edba3a1- "Update all dependencies (#964)" by (@renovate[bot])6689b3f- "fix(GenerateIconPackTask): handle missing vector fill colors" by (@rukamori)b7e2f61- "remove duplicate string" by (@rukamori)98455ae- "update submodules" by (@rukamori)201548e- "fix(frostwave_japanese_winter_animesh_950492): add opaque vector fill" by (@rukamori)22e4ab3- "new icon submission" by (@rukamori)fc6c2e8- "Merge branch 'translate'" by (@rukamori)bd8001f- "Refactor/main header scroll style (#963)" by (@adam-adrian, @rukamori)dda9f04- "Translated using Weblate (Italian)" by (@MadameVulva)a8c30f6- "Translated using Weblate (German)" by (@flue17)b823e16- "Translated using Weblate (German)" by (@flue17)b4f006f- "new icon submission" by (@rukamori)f1aace4- "fix(LocalPlaylistScreen): correct search mode layout" by (@rukamori)e241006- "refactor(ArtistScreen): use segmented overflow actions" by (@rukamori)0a07791- "fix(AodCustomizedScreen): fill shape picker grid width" by (@rukamori)498cd34- "feat(ArtistScreen): integrate artist blocked and their content globally #940" by (@rukamori)1b5deba- "fix(LyricsMenuViewModel): classify TTML sync badges correctly" by (@rukamori)148749a- "fix(StorageSettings): prevent cache clearing freezes" by (@rukamori)3b767ff- "Merge branch 'dev'" by (@rukamori)360894f- "Merge branch 'translate'" by (@rukamori)497fe06- "Refactor instructions for clarity and focus" by (@rukamori)030e0ac- "Android development guidelines for reviewing pull" by (@rukamori)d2e3db4- "fix(deps): update dependency com.mocharealm.accompanist:lyrics-core to v0.4.6 (#962)" by (@renovate[bot], @rukamori)aec98bc- "Merge branch 'dev' of github-rukamori:ArchiveTuneApp/ArchiveTune into dev" by (@rukamori)7e25e62- "fix(TTMLParser): preserve line-synced Better Lyrics #961" by (@rukamori)60b26af- "Translated using Weblate (Chinese (Traditional Han script))" by (@hijasongood)ab9836d- "Translated using Weblate (Chinese (Traditional Han script))" by (@hijasongood)a55ce3b- "feat: open search overlay when tapping Search tab while already on search screen (#944)" by (@sang765, @rukamori)34a9db7- "Translated using Weblate (Chinese (Traditional Han script))" by (@hijasongood)6f647be- "Translated using Weblate (German)" by (@flue17)744a979- "Translated using Weblate (Korean)" by (@hsp1020)826ad4a- "Translated using Weblate (German)" by (@Flu...
N20260701
Release ArchiveTune Nightly artifact, generated on 2026/07/01 - 00:13:53 (UTC +0)
π MVP Committer
Congratulations to @rukamori for contributing 16 commit(s) in this release! π
π Contribution Leaderboard
π₯ @rukamori: 16 commit(s)
π₯ @sang765: 1 commit(s)
β¨ Changelog
9ea19ea- "fix(AppIconRepository): synchronize selected launcher task icon" by (@rukamori)cf0f947- "fix(HomeScreen): tighten section spacing" by (@rukamori)d9c4146- "patch ui issues" by (@rukamori)0790217- "style(SearchScreen): set PrimaryTabRow containerColor to Color.Transparent" by (@rukamori)7983c77- "fix(AccountSettings): allow saving current account" by (@rukamori)3d724c8- "fix(IconScreen): derive community icon state in view model and cleanup resource" by (@rukamori)0d3ad0e- "feat(Screen): replace previous mesh with tonal backdrop" by (@rukamori)9f67409- "feat(IconScreen): match icon selector design" by (@rukamori)4f5d9be- "fix(HomeScreen): reserve chip slot during loading" by (@rukamori)6b013d8- "fix(process_icon_submission): sanitize SVG doctype declarations" by (@rukamori)cec71e5- "fix(GenerateIconPackTask): generate full adaptive launcher icons" by (@rukamori)ca64405- "feat(IconScreen): add GitHub author actions" by (@rukamori)50222ed- "fix(HomeScreen): prevent app bar overlap" by (@rukamori)e8f877e- "Merge branch 'dev' of github-rukamori:ArchiveTuneApp/ArchiveTune into dev" by (@rukamori)93f5472- "fix(MusicService): forward gvs token to extractor" by (@rukamori)0cef391- "fix(process_icon_submission): accept JSON-only PR metadata" by (@rukamori)a80a2bc- "Merge pull request #949 from sang765/fix/thumbnail-swap-music-video-only" by (@sang765)
N20260630
Release ArchiveTune Nightly artifact, generated on 2026/06/30 (UTC +0)
What changed on this release?
β¨ Features
- Added a metadata-driven launcher icon selector, allowing users to choose from multiple app icons directly from the Appearance settings.
- Introduced a new "Javanese" (jv) language localization for both core strings and specific ArchiveTune strings.
π¨ UI
- Redesigned the home screen with a cleaner section layout, removing old navigation title components and replacing them with unified section headers that include proper spacing.
- Adjusted HomeCategoryChips colors and HomeSectionHeader font weight for better visual hierarchy.
- Replaced the old
NavigationTitlecomposable across AccountPlaylistsTitle, SimilarRecommendationsTitle, and HomePageSectionTitle with the newHomeSectionHeadercomponent. - Replaced custom
RenderScript-based blur implementations with a newImageBlurUtilsstack blur, used across player backgrounds, lyrics screen, and thumbnail backdrops.
π΅ Audio
- Fixed equalizer audio session recovery by introducing retry logic and a player listener to rebind audio effects when the session ID changes.
π Translation
- Updated Indonesian locale strings and added full Javanese (jv) localization for both
archivetune_strings.xmlandstrings.xml. - Improved Vietnamese locale color palette strings to disambiguate between blue and green neon/pastel variants.
β‘ Performance
- Improved download reliability by adding HTTP connection timeouts, read timeouts, and a dedicated
CacheDataSinkfactory with a 256KB write buffer. - Improved thumbnail loading by adding a
ThumbnailSwapStatemechanism that replaces YouTube Music thumbnails with directi.ytimg.comURLs for music videos when not in low-data mode.
π§ Logic
- Rebuilt the Music Recognition flow using a new repository, use case, and ViewModel layer (replacing the old inline approach) to handle audio capture, Shazam recognition, and history persistence.
- Rebuilt the Home screen logic into a UDF architecture with
HomeScreenState,HomeAction,HomeUiState, and anonActionentry point in the HomeViewModel. - Standardized settings screens by removing the shared
scrollBehaviorparameter from around 15 settings composables and instead callingappBarScrollBehavior()internally where needed.
π§Ή Refactor
- Refactored the search result list to use a UDF-style data flow with grouped, segmented list items and extracted section-header composables.
- Massively reduced diff noise and formatting inconsistencies in settings screens using ktlint (added
.editorconfigrule anddetekt.ymlfor unused-private-member/empty-function-block checks). - Removed duplicated empty-state and container composables (
HomeLoadingShimmer,HomeCategoryChipsduplicates,Account/Recommendationcontainer helpers) from HomeScreen. - Restructured lyrics screen background to restore the conditional blur overlay tied to
PlayerBackgroundStyleandblurRadiussettings (previously reverted, now re-applied).
π¦ Dependencies
- Bumped
aboutLibrarieslibrary from15.0.2to15.0.3(Kotlin-basedbuildSrcconfiguration). - Updated Gradle wrapper from
9.6.0to9.6.1.
π MVP Highlight
rukamori β This release's most impactful commit is the complete UI/architecture rebuild of the Music Recognition screen (3528cd4). It replaced a large, monolithic composable and state machine with a clean, testable architecture (dedicated MusicRecognitionRepository, use cases, RecognizedTrack/RecognitionHistoryEntry domain models, and MusicRecognitionViewModel) while also building a brand-new visual flowβa huge contribution to both code health and user experience.
π MVP Committer
Congratulations to @rukamori for contributing 21 commit(s) in this release! π
π Contribution Leaderboard
π₯ @rukamori: 21 commit(s)
π₯ @renovate[bot]: 1 commit(s)
π₯ @sang765: 1 commit(s)
π€ @adam-adrian: 1 commit(s)
β¨ Changelog
d4464e3- "fix(Screen): correct navigation callback type" by (@rukamori)7e102f6- "fix(buildSrc): avoid empty plugin descriptor task" by (@rukamori)67b50f5- "fix(strings): remove duplicate app icon label" by (@rukamori)b7c96f3- "feat(IconScreen): add metadata-driven launcher icon selector" by (@rukamori)ebb4c48- "fix(MusicRecognitionScreen): resolve callback and button shape errors" by (@rukamori)63b7503- "fix(MainActivity): enforce immersive player fullscreen" by (@rukamori)2f5c50b- "refactor(SearchResult): move data to udf" by (@rukamori)3528cd4- "refactor(MusicRecognitionScreen): rebuild recognition flow and UI" by (@rukamori)a7a2887- "Merge branch 'dev' of github-rukamori:ArchiveTuneApp/ArchiveTune into dev" by (@rukamori)304d385- "revert back lyrics screen" by (@rukamori)c3c3229- "Merge pull request #945 from ArchiveTuneApp/renovate/all" by (@rukamori)3f18ad5- "fix(deps): update all dependencies to v15.0.3" by (@renovate[bot])81adf11- "chore: format and cleanup unused code" by (@rukamori)af0f029- "style(HomeScreenComponents): Adjust HomeCategoryChips colors and HomeSectionHeader font weight" by (@rukamori)bf59363- "refactor(HomeScreen): move logic directly to UDF structure" by (@rukamori)79b8c71- "fix(LyricsV2): gate automic provider translations" by (@rukamori)31f1ea6- "feat: swap YTM thumbnails with YT i.ytimg.com URLs for music videos (#929)" by (@sang765, @rukamori)5fee8b4- "refactor(settings): standardize settings header scroll behavior (#941)" by (@adam-adrian, @rukamori)23624d5- "fix(PaxsenixLyrics): filter empty lyrics payloads" by (@rukamori)f93a5b6- "fix(MusicService): recover equalizer audio session #895" by (@rukamori)44878e2- "Merge branch 'dev' of github-rukamori:ArchiveTuneApp/ArchiveTune into dev" by (@rukamori)2fed87c- "fix(LyricsEnhanced): wrap long lyrics in both modes" by (@rukamori)
N20260629
Release ArchiveTune Nightly artifact, generated on 2026/06/29 - 00:11:33 (UTC +0)
What changed on this release?
π Bug Fixes
- Replaced deprecated RenderScript blur with a pure Kotlin stack blur implementation to ensure long-term compatibility and stability.
π MVP Highlight
@sang765: Successfully modernized the app's blurring logic by replacing deprecated RenderScript with a Kotlin-based solution, preventing future crashes and ensuring compatibility with newer Android versions.
π MVP Committer
Congratulations to @sang765 for contributing 1 commit(s) in this release! π
β¨ Changelog
N20260628
Release ArchiveTune Nightly artifact, generated on 2026/06/28 - 00:12:27 (UTC +0)
π MVP Committer
Congratulations to @sang765 for contributing 1 commit(s) in this release! π
π Contribution Leaderboard
π₯ @sang765: 1 commit(s)
π₯ @adam-adrian: 1 commit(s)
π₯ @Davidzinco: 1 commit(s)
β¨ Changelog
58f6f07- "feat(i18n): add missing VI translations and fix ambiguous palette duplicates (#925)" by (@sang765)fdefd0c- "fix(DiscordRPC): support multiple artists in Discord RPC status (#932)" by (@adam-adrian)ff6f8f6- "feat(i18n): update Indonesian and add Javanese translation (#933)" by (@Davidzinco)