Skip to content

v1.3.0: New version#2058

Merged
maxrave-dev merged 33 commits into
mainfrom
dev
May 24, 2026
Merged

v1.3.0: New version#2058
maxrave-dev merged 33 commits into
mainfrom
dev

Conversation

@maxrave-dev
Copy link
Copy Markdown
Owner

No description provided.

maxrave-dev and others added 30 commits May 14, 2026 22:13
Signed-off-by: maxrave-dev <ndtminh2608@gmail.com>
…laying screens

- AlbumScreen / PlaylistScreen (mobile portrait):
  - Edge-to-edge artwork (half-screen height) with title/artist/year overlay centered at bottom
  - Liquid glass back/heart/search buttons (Kyant backdrop, 48dp circular)
  - Haze blur top app bar matching page background tone
  - Action row redesign: Shuffle + Play pill + Download centered cluster (Rounded icons)
  - Heart moved to top-right toolbar area
  - Muted palette tint background (Muted swatch + 45% dark blend)
  - Horizontal divider between song items (Apple Music style)
  - Palette caching to avoid flicker on LazyColumn item recycle
  - Coil memory cache enabled on artwork

- NowPlayingScreen:
  - Spotify-style metadata overlay (subtitle + thumbnail + title + buttons) when controls hidden
  - Title font reduced from headlineMedium to titleMedium
  - Dual-state bottom gradient (heavier focus, lighter unfocus, ~28% coverage)
  - Fix gradient transparency bug by replacing Color.Transparent with Color.Black.copy(alpha = 0f)
  - Solid Black stops shifted earlier (0.85f) so viewport bottom is fully covered

- UIExt.android.kt:
  - Bug fix: wDP previously used bounds.height() instead of bounds.width() on API 30+
- Replace infinite basicMarquee with maxLines + ellipsis truncation
- Title max 2 lines, subtitle 1 line, optional third line (real or empty fallback)
- Remove hardcoded fallback labels (songs/artists/playlist/album/videos)
- Add heightIn on HomeItemContentPlaylist and HomeItemArtist outer Column to keep card heights uniform regardless of title length
- Re-add basicMarquee on subtitle lines with subtle params (2s initial delay, 2s repeat delay, 25dp velocity, only animates when text overflows)
- Combine 'artists • album/views' into subtitle for HomeItemSong/Video/VideoChart, drop separate 3rd line Text
- Title maxLines=2 across all item types
- Add heightIn(min) to HomeItemContentPlaylist/Artist/Song/Video outer Column for uniform card heights regardless of title length
Signed-off-by: maxrave-dev <ndtminh2608@gmail.com>
…ose MP 1.11.0

- Downgrade BuildKonfig 0.21.0 → 0.20.0. 0.21.0 migrated to Gradle 9.4.1
  but does not declare generateBuildKonfig output as input to AGP
  prepare*ArtProfile / extract*Annotations tasks, causing Gradle 9
  strict validation to abort the build.
- Add explicit dependsOn from prepare*ArtProfile to generateBuildKonfig
  in composeApp build.gradle.kts as defense-in-depth (no-op on 0.20.0).
- Replace direct asComposeImageBitmap() (Skiko/JVM-only) usages with the
  existing cross-platform Image.toImageBitmap() expect/actual in 6
  commonMain screen files; Android target lacked the symbol after the
  Compose 1.11.0 upgrade.
- Replace asComposeImageBitmap with Android-native asImageBitmap in
  androidApp MainAppWidget.kt.
- Suppress ProGuard unresolved-reference warnings for Haze 1.7.2 and
  Compottie 2.1.0 — both still reference Skiko Shader/Paint method
  signatures that Compose MP 1.11.0 removed; no newer versions of
  either library are available yet.
- composeApp/icon/dmg-background.png — 2800x1600 source asset
- scripts/wrap-mac-dmg.sh — create-dmg + UDRW + volicon + UDZO pipeline
- desktop-package.yml — add wrap-mac-dmg job (macos-14, needs build-desktop-packages)
- conveyor.conf — auto-infer site.base-url, keep updates=none
- composeApp/build.gradle.kts — revert curated VLC plugin lists to full set
- Split Mac universal.dmg → arm64.dmg + intel64.dmg per machine,
  saves ~25-40 MB per user download (universal was 84.9 MB fat
  binary vs arm64 48.8 MB + intel64 54.8 MB shipped separately)
- Add Windows ARM64 (winarm64.zip from VideoLAN 3.0.23) — opens
  ARM Windows PC support (Surface Pro X, Snapdragon Copilot+ PCs)
- Drop linux.aarch64.glibc machine — VideoLAN ships no Linux ARM
  binary; mahozad/vlc-plugins-linux is amd64-only, so including
  this would ship an AppImage that crashes on first VLCJ load
- Restrict `make site` to mac+windows machines — Conveyor's Linux
  tarball intermediate task was failing even with targets=[], so
  pass -Kapp.machines explicitly to skip the Linux pipeline that
  already ran in the prior `make linux-app` step
- Factor shared Mac DMG + Windows zip extraction into helper
  functions; each per-arch task is now a thin doLast wrapper
get.videolan.org returns a 302 redirect to a different mirror per
request. Java's URL.openStream() follows same-protocol same-host
redirects but silently saves the 302 HTML response body when the
mirror lands on a cross-protocol redirect or returns an error
page — producing "Cannot expand ZIP" downstream.

CI run 26264936101 hit this on the win64 mirror lottery despite
local + winarm64 + Mac DMG downloads succeeding (they got lucky
mirrors that round). Switch to curl -fsSL with retry, which
follows redirects robustly across protocols and fails non-zero
on HTTP errors instead of saving error bodies.
Conveyor's -K flag accepts HOCON list syntax, not CSV. The CSV form
"-Kapp.machines=mac.amd64,mac.aarch64,..." was parsed as a single
machine spec and failed with "Unrecognized machine attribute
'amd64,mac'". Switch to "-Kapp.machines=[mac.amd64,...]" per the
Conveyor docs example "-Kapp.inputs=[a,b,c]".

Verified locally with `conveyor -Kapp.machines=[mac.amd64,
mac.aarch64,windows.amd64,windows.aarch64] make` — output drops all
linux invokables (linux-app, linux-tarball, debian-package,
base-configured-inputs/linux.amd64.glibc) and lists `site` as
unambiguously invokable, confirming the override replaces the
machines list as intended.
Conveyor stdlib preset /stdlib/jdk/21/openjdk.conf (Eclipse Temurin)
does not ship a windows.aarch64 build, so `make site` failed with
"JAR files were imported but no JVM inputs were supplied for
'windows.aarch64'" right after Mac archs + Windows x64 succeeded.

Surgical override: add Microsoft Build of OpenJDK 21 windows-aarch64
zip as an additional input for that one machine. Keep Temurin from
the stdlib include for the other 4 platforms — battle-tested with
Compose Multiplatform, minimal change surface.

Pin via aka.ms redirect so the URL stays stable across point
releases (currently 21.0.11).

Verified locally with `conveyor -Kapp.machines=[mac.amd64,
mac.aarch64,windows.amd64,windows.aarch64] make site` — all 6
package artifacts produced in 226s (mac-aarch64.zip 167M,
mac-amd64.zip 174M, windows-aarch64.zip 180M, windows-amd64.zip
191M, .arm64.msix 183M, .x64.msix 194M), plus download.html,
.appinstaller for both archs, and the .exe wrapper.
CI's `desktop-windows` artifact previously shipped the raw Conveyor
output (.msix + .appinstaller + .exe wrapper) which is unusable for
end users: the .exe wrapper and .appinstaller both fetch
${site.base-url}/simpmusic.crt and simpmusic-arm64.appinstaller
from GitHub Releases /latest/download/, which return 404 until we
publish a release with those files. simpmusic.crt was also missing
from the upload entirely.

Replace the upload step with a per-arch bundling step that produces
two self-contained zips end users can actually install:

  SimpMusic-Windows-x64-installer.zip
    ├── install.bat                       (UAC self-elevate, certutil
    │                                       add cert, Add-AppxPackage)
    ├── simpmusic.crt                     (Conveyor self-signed code
    │                                       signing cert, stable across
    │                                       builds via CONVEYOR_SIGNING_KEY)
    └── simpmusic-<ver>.x64.msix          (the actual app)

  SimpMusic-Windows-arm64-installer.zip
    ├── install.bat
    ├── simpmusic.crt
    └── simpmusic-<ver>.arm64.msix

The install.bat detects host arch via %PROCESSOR_ARCHITECTURE% and
picks the matching MSIX from the same folder — single bundle per
arch, double-click to install, no network round-trip.

Tested locally with `conveyor make site -Kapp.machines=windows.aarch64`
+ the bundle loop; install.bat verified on a real Windows ARM64 host
(cert imports to Cert:\LocalMachine\TrustedPeople, MSIX sideloads via
Add-AppxPackage, app launches native ARM64 — confirmed via Task
Manager Details tab Architecture column).
`wmic` was deprecated in Windows 10 21H1 and is no longer installed
on Windows 11 by default, so our previous VM detection
(`wmic computersystem get model`) silently returned an empty string
on every Win 11 host. That left isVM = false → undecorated +
transparent window → Parallels Win 11 ARM rendered nothing or
flipped into a fullscreen-with-invisible-overlay state where clicks
were eaten by the transparent surface.

Replace the probe chain with:
  1. PowerShell `Get-CimInstance Win32_ComputerSystem`
     (modern wmic replacement, ships with every Windows 10/11)
  2. Legacy `wmic computersystem get manufacturer,model`
     (fallback for older hosts where PowerShell is locked down)

Also widen the vendor token list (Parallels, VirtualBox, VMware,
QEMU, KVM, Xen, Hyper-V) and probe BOTH Manufacturer and Model,
since Parallels-on-ARM only puts the brand string in Manufacturer
("Parallels Software International Inc.") while Model reads as
"Parallels ARM Virtual Machine" — the old single-Model probe would
have missed it even if wmic still worked.

Verified on Parallels Desktop running Windows 11 ARM64: app window
now opens with a native title bar and renders correctly; previous
invisible-window + fullscreen-glitch + click-eating-overlay states
all gone.
Remove windows.aarch64 from the Conveyor machines list, the bundled
Microsoft JDK windows-aarch64 input, the workflow's -Kapp.machines
override, and the install.bat arch-detection loop. End users on
Windows 11 ARM64 (Surface Pro X, Snapdragon Copilot+ PC, Parallels
ARM, etc.) get the x64 msix running under Prism emulation, which
works correctly.

Reason: androidx.sqlite:sqlite-bundled-jvm 2.6.2 (and even
2.7.0-alpha05) does not ship a windows_arm64 sqliteJni.dll. The
bundled Room driver fails at first connection with "Cannot find a
suitable SQLite binary for windows 11 | aarch64", which we cannot
work around without compiling the native ourselves. The rest of the
ARM Windows toolchain (Skiko, VLC, Microsoft JDK) does have ARM64
builds, so we can re-enable windows.aarch64 once Google ships the
upstream sqlite native — the supporting plumbing is preserved in
git history (commit ebe1577 + 16872e1).

Side effect: CI artifact `desktop-windows` is now a single
SimpMusic-Windows-installer.zip (~190 MB) instead of separate
SimpMusic-Windows-{x64,arm64}-installer.zip. install.bat no longer
needs %PROCESSOR_ARCHITECTURE% logic; it just globs simpmusic-*.msix
and installs whatever it finds, which is simpler to maintain and
matches what end users actually need.

Verified locally with `conveyor -Kapp.machines=windows.amd64 make
site` → bundle loop → SimpMusic-Windows-installer.zip (193 MB,
3 files) → sideload + launch on Parallels Win 11 ARM (with the VM
detection fix from the previous commit, the window now renders
correctly).
Picks up core@eb836db which sets VLC_PLUGIN_PATH in
DefaultVlcDiscoverer.onSetPluginPath so libvlc_new() can locate
the bundled plugins subdirectory on the Conveyor-built Linux
AppImage. Without this, libvlc_new() returned NULL and Koin
failed to construct VlcPlayerAdapter, crashing the app at startup
with "Failed to get a new native library instance".
Signed-off-by: maxrave-dev <ndtminh2608@gmail.com>
Migrate Jpackage default to Hydraulic Conveyor
- fix(data): preserve album track order in getSongsByListVideoId
- feat(stream): use hard-coded Tidal instance list with sequential probing
- feat(player): improve AutoMix crossfade transitions (BPM ratio fix,
  equal-power volume fade, front-loaded BPM ramp, longer Auto durations)
Signed-off-by: maxrave-dev <ndtminh2608@gmail.com>
When the canvas overlay is rendered (unfocused / controls-visible state),
the previous linear Transparent→Black brush left the visible viewport
bottom slightly translucent because the host ModalBottomSheet does not
extend behind the system navigation gesture area. Canvas video tinted
the last pixels with a green/teal bleed.

Switch the colorStops to a held-Black tail:
  0%   → Transparent
  92%  → Transparent (canvas clear through most of the page)
  97%  → Black
  100% → Black (held solid through the visible bottom edge)

Also mirror the held-Black pattern in the focused branch so the bottom
edge stays opaque there too. Net visible darkening shrinks from the
original ~80% to ~8% near the bottom only.
- Bump versionName 1.2.1 → 1.3.0 and versionCode 50 → 51.
- Refresh compose-bom 2026.05.00 → 2026.05.01, material3-expressive
  alpha19 → alpha20, and md library 0.40.2 → 0.41.0.
- Add fastlane 51.txt changelogs for en-US and vi-VN covering offline
  Home screen, Canvas translated lyrics line, AutoMix DJ-style crossfade
  improvements, Apple Music-inspired redesign, 3-line home layout,
  reliable Tidal 320kbps fallback, album track order, language code
  fixes (CN/ID/IW), and the Conveyor desktop installer changes (Windows
  MSIX + install.bat, macOS custom DMG).
- Bump core submodule pointer to pick up the AI same-language abort fix.
Signed-off-by: maxrave-dev <ndtminh2608@gmail.com>
…, search bar haze overlay

- Album/Playlist: group top-right buttons (Heart, Search, More) into liquid glass pill container
- Album: add PlaylistBottomSheet for album options (Add to queue, Share)
- Playlist: move search bar from stickyHeader to overlay with hazeEffect blur
- Playlist: dynamic spacer height via onGloballyPositioned instead of hardcode
- Playlist: platform-aware search bar background (haze on Android, solid on Desktop)
- README: update Windows installer to MSIX, add ARM64 note
@maxrave-dev maxrave-dev merged commit 679ef1f into main May 24, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant