Skip to content

v0.2.1 - Cadence: new name and icon, wave and gesture fixes

Pre-release
Pre-release

Choose a tag to compare

@sultanmaliki sultanmaliki released this 21 Sep 06:28
· 9 commits to main since this release

v0.2.1 is the "Cadence" release: a new name and icon, a rewritten README, and fixes for the three problems reported after v0.2 (the wave starting late, the wave shrinking mid-song, and a tiny finger movement changing the song), plus more bugs found by testing. Everything below is a change since v0.2.

It installs as an upgrade over v0.2 (same package and signature, so your playlists and timer are kept; the app now shows up as Cadence with the new icon). It is a non-debuggable build, so the developer test hooks are off. Sideload it as before ("install from unknown sources").

New: name, icon and project polish

  • Cadence (repo cadence-timer; the old fitness-timer URLs redirect). The Android package id is unchanged on purpose so upgrades keep working.
  • New icon: a timer progress ring (dim track, gradient arc up to a ring thumb) around the colourful wave hills, on a dark indigo gradient. Adaptive icon with a monochrome layer for Android 13+ themed icons.
  • Artwork bars trimmed: some apps (Mi Music) hand over 16:9 artwork with dark bars baked into the sides of a portrait cover. Cadence now crops flat-colour bars (only when they are on both sides, one colour, and leave most of the image), so the real cover shows at its own aspect ratio, and the colours are sampled from the real cover. Seen working on a real cover: 256x144 to 146x144. Small covers are no longer stretched more than ~6x.
  • README rewritten (features, gestures, install, permissions table, build steps, honest status), Apache-2.0 LICENSE, CONTRIBUTING.md, bug-report template.

Fixed: the three reported problems

  1. Wave started "forward from the beginning" after ~2:30. The wave only remembered about 2 seconds of audio (240 dp), so once the thumb was further along the bar than that, the left part of the bar had no wave. It now covers the whole bar. Checked over 31 consecutive screenshots while the thumb travelled across the screen: the wave stayed anchored to the start of the bar.
  2. Wave shrank or vanished mid-song. Two causes, both fixed. (a) Quiet or steady passages after a loud one collapsed to almost nothing; levels now have a visible floor, recover faster, and the mid/high bands are less suppressed. (b) A stale-state bug: after a track change the audio capture restarts a moment later, but the wave's update loop had decided once, at start, that there was no audio and stayed in a faint idle ripple until an unrelated update. It now checks every tick. Reproduced on the phone (same faint shape across screenshots while the audio levels were healthy) and re-verified after forced track changes: the wave was present in all 12 shots, 48 to 82 px tall.
  3. A tiny finger movement changed the song. Two-finger swipes read "the first finger currently down"; if one finger lifted a moment before the other, the other became "first", its position was a whole finger-gap away, and a plain tap looked like a big swipe. Fingers are now tracked individually, a lifted finger's movement is frozen, movement is averaged, and a swipe must also be mostly horizontal.

Fixed: found by testing

  • "Nothing playing" flicker at every track change. Mi Music reports "no session" for ~150 ms between tracks; the screen flashed the empty state and the audio capture restarted each time. The last value is now held for 1.5 s and the capture is stopped only after 2.5 s of not playing. 0 flashes across repeated forced track changes.
  • A quick single-finger flick in the centre toggled the timer. A swipe finished before the drag threshold fell through as a tap. A finger that has clearly travelled is never a tap now.

How it was tested

  • 120 JVM unit tests (was 102), lint clean, clean release build. New tests cover the two-finger tracker (both lift orders, jitter, vertical drift), the between-track hold, and the quiet-passage regression.
  • 18 on-device gesture tests (new): they drive the real gesture engine on a phone using Compose's test framework (this works on phones that block adb shell input). They cover two-finger tap and swipe, every tap zone, double-tap seek, corner menus, drag-scrub, hold-to-reset in real time, a second finger cancelling a hold, and three fingers. Proof they catch the bug: with the old gesture code 4 of the first 10 fail; with the fix all 18 pass.
  • Stress run on the phone: 25 Home/return cycles (audio capture starts and stops matched exactly), 10 notification-access revoke/grant cycles, 8 dark/light rebuilds while playing, a memory-trim command and a skip flood. No crashes; still exactly 1 activity and 1 root view afterwards and the heap returned to baseline after a trim (no leak).
  • Wave soak: screenshots every ~6 s for 3 minutes plus forced track changes; wave visible in every one.

Not verified / known limitations

  • Not verified by me: the countdown-finished notification and its sound (needs you to tap Allow on the permission dialog once), rescheduling after a reboot, other music apps (only Mi Music has been observed), other phones (the audio visualizer is known to vary by device), the real Settings toggle for notification access, and how every launcher masks or themes the new icon (it looked right in the phone's system settings).
  • The two-finger fix is proven by the automated tests above, but the ultimate check is your hands: please try the pause gesture again.
  • Still debug-signed (not for Play Store), and Google Play restricts USE_EXACT_ALARM and would review the Record audio use; F-Droid/GitHub distribution is unaffected. Alarms are cancelled by Android on force-stop.
  • Updates install over this build only if signed with the same debug key; otherwise uninstall first.

Full diff: v0.2...v0.2.1