BigBrainParking/app
Erik ad55559f55
All checks were successful
build-apk / build (push) Successful in 28m55s
v0.5.0: persistent parking notification — foreground service, End/Extend
The ongoing countdown now appears whenever a car is parked, paid or free,
and sticks around the way ntfy's does on GrapheneOS.

Why it wasn't showing at all on a paid park: StartSessionScreen carried its
own stricter copy of parseApiTime that demanded MM-DD-YYYY + AM/PM. The
dual-format fix from deb78bf only landed in sessionStatus.ts, so when the
API returned the other format the parser returned null and the notification
was simply never posted. There is now one parser (api/parseTime.ts), and the
failure logs instead of going silent.

Persistence: a plain notify() was never enough — Android 14+ lets the user
swipe an ongoing notification away, and nothing brought it back after a
reboot. BbpSessionService is a real foreground service (type specialUse) that
owns the notification, plus a BOOT_COMPLETED receiver to restore it; specialUse
is one of the types Android 14/15 still allow to start from BOOT_COMPLETED.
The service's life is exactly the session's life: it stops itself, removing
the notification, on End, at expiry, or when there's no session to show.

Buttons: paid sessions previously got no actions at all (only free check-ins
did). Both now get End and Extend/Pay. End stops tracking — honest about the
fact that ParkSmarter has no stop-session endpoint, so bought time keeps
running at the meter. Extend opens the purchase screen for that exact zone.

The active session (with its Zone) is persisted locally, so the countdown and
Extend survive reboot, offline, and Anonymous Mode instead of depending on a
round-trip. sessionStatus.ts + features/checkin collapse into one owner,
features/session/activeParking — one record, one notification.

Verified: :bbp-notify:compileDebugKotlin passes, and the merged app manifest
carries the service (specialUse + FGS subtype property), both receivers, and
the FOREGROUND_SERVICE/SPECIAL_USE/RECEIVE_BOOT_COMPLETED permissions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 20:10:54 +00:00
..
assets v0.2.1: big-brain-driver app icon 2026-07-13 20:33:15 -07:00
modules/bbp-notify v0.5.0: persistent parking notification — foreground service, End/Extend 2026-08-07 20:10:54 +00:00
plugins Fix release signing in CI: anchor plugin regex to buildTypes release block 2026-07-07 19:49:37 -07:00
src v0.5.0: persistent parking notification — foreground service, End/Extend 2026-08-07 20:10:54 +00:00
.gitignore chore: untrack + gitignore local module gradle build output 2026-07-13 21:05:09 -07:00
app.json v0.5.0: persistent parking notification — foreground service, End/Extend 2026-08-07 20:10:54 +00:00
App.tsx CI: move workflow to .forgejo/workflows; self-contained Forgejo release; bump 0.1.1 2026-07-07 14:18:06 -07:00
babel.config.js Initial commit: parksmarter-client + BigBrainParking app 2026-07-06 08:33:47 -07:00
index.ts Initial commit: parksmarter-client + BigBrainParking app 2026-07-06 08:33:47 -07:00
metro.config.js Initial commit: parksmarter-client + BigBrainParking app 2026-07-06 08:33:47 -07:00
package.json Add on-device debug logging: file capture + share (for real-session testing) 2026-07-06 11:59:41 -07:00
tsconfig.json Initial commit: parksmarter-client + BigBrainParking app 2026-07-06 08:33:47 -07:00