v1.0.100080-beta
What's New ✨
-
One Model Sheet, Three Roles — Coach / Vision / Insight aren’t three separate pickers anymore.
- Long-press a model → assign roles — set Coach, Food Scanner & Vision, and AI Insights from one dialog.
- Role tags on the row — see what’s active at a glance; “Set All Supported” when you want one model everywhere it can run.
- Settings opens the same sheet — tap the model card in AI Settings; the old
ModelPickerRowpath is gone.
-
Food-Log Swipes You Can Remap — delete / edit / copy / none, per direction.
- App Behavior → Food Log Swipes — swipe right and swipe left are independent.
- Copy is a first-class action — timeline can copy on swipe; delete still gets undo after a short exit animation.
- Swipe container rewrite — configurable actions, no double-collapse stutter on delete.
-
Smaller Downloads, Smarter Updates — we stopped shipping every ABI in one fat APK.
- ABI splits released —
armeabi-v7a,arm64-v8a,x86,x86_64, plus a universal APK. - In-app updater picks your ABI — prefers device ABI, then universal, then first available APK (AGP-style names included).
- I have also added another universal APK that uses the old naming system to not break anything.
- ABI splits released —
-
Nutrient Charts That Don’t Fake Empty Days — food micros/macros no longer treat “didn’t log” as zero.
- Unlogged food days = gaps — averages ignore null days; long-range lines break across gaps instead of dragging through fake zeros.
- Water / caffeine still count empty days as 0 — intentional; those are “you drank nothing” days.
- TDEE / estimator math left alone — this is display/chart averaging only.
-
Plate Photos Without Melting RAM — camera URIs decode with sampling + max-dimension scaling before JPEG encode, so 12–48MP shots don’t OOM the scanner.
-
Recipes Remember Last Masses — logging a recipe with overridden ingredient grams can persist those defaults and recompute recipe totals for next time.
-
Scanner That Sleeps When You’re Not Scanning — barcode camera binds only while the scanner route is active / not paused after a hit, so background sheets don’t keep the lens thrashing.
-
Timeline Macro Pager That Settles Cleanly — consumed/remaining swipe uses spring fling, ignores mid-gesture external sync, and snaps only after the page settles.
Bugs Squashed 🐛
- xAI That Stays Signed In — SuperGrok OAuth no longer dies quietly mid-session.
- Auto-refresh with a 5-minute buffer — tokens refresh before they expire, with a mutex so concurrent calls don’t stampede the auth endpoint.
- 401 → refresh → retry — chat, Responses API, vision, model fetch, and quick-log all retry once with a fresh token instead of just failing.
- Foreground + launch refresh — app start and coming back to the foreground proactively keep the session warm.
- Invalid refresh cleanup — revoked/
invalid_grantsessions clear stale tokens and fall back to the API key / re-auth path.
- Tap a logged food → accidentally “edit” it — tap now copies/adds; swipe-edit (or explicit edit) is the true edit path, with Save vs Add labeled correctly.
- Nutrient averages tanked by blank days — unlogged food days no longer dilute averages (e.g. three 3000-cal days + one blank ≠ 2250).
- Delete swipe animation stuttered / double-collapsed — container no longer fights itself on removal.
- Barcode camera kept running under overlays — inactive/paused scanner unbinds; active resumes cleanly.
- Back from home felt like a trap — root back finishes the activity instead of doing nothing useful.
- Today’s calorie target lagged old check-ins in ranges — current target wins for today and future dates in the repository path.
- Plate scan OOMs on big camera images — sampled decode + scale-before-encode.
- Fixed i18n keys for food-log swipe actions (+ a few common labels).