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)