¶ Bodylog Garmin and Android sync efficiency - 2026-07-24
Bodylog's Garmin-to-Android synchronization now performs less unnecessary background work, exits successful receive windows early, preserves queued watch data during low-battery conditions, and exposes clearer local diagnostics. The Android build and website deployment are live; the Google Play internal-testing release was published successfully.
- Android periodic Garmin work now runs every 30 minutes with a 15-minute flex window, a 5-minute initial delay, connected-network and battery-not-low constraints, and 30-minute exponential backoff.
- The worker uploads buffered data first, uses a short discovery grace period when no watch is connected, exits after a quiet window following valid inbound data, waits for acknowledgements only when required, and drains bounded backend batches.
- Lifecycle-triggered automatic requests are throttled to five minutes; manual sync remains immediate.
- Local-only Garmin diagnostics now report duration, watch requests, device count, queue movement, received/uploaded/rejected events, upload batches, and approximate request bytes.
- Android backup and device-transfer rules exclude session, Garmin queue/sync state, widget state, and analytics state.
- The standalone Garmin app no longer treats battery at or below 15 percent as a reason to transmit. Durable queued data waits until battery is above the threshold. Its manifest version is now 0.2.0.
- Gradle wrapper network timeout increased from 10 seconds to 60 seconds after the first Play workflow failed while downloading Gradle. This prevents the same transient network condition from immediately failing future Android pipelines.
- Android: 41 unit tests passed; release assembly and vital release lint passed using Java 17 and the Android SDK.
- Connect IQ: both test applications compiled for Fenix 8 47 mm against the API 6 target; the standalone package compiled for all 20 declared devices.
- Standalone Garmin 0.2.0 package SHA-256:
8c395aad6609bddc0fbea60c5405e5239e76bc09a6d24a00f120db0445f014a8.
- Gitea workflows: Android internal-testing run 770 succeeded; autodeploy run 771 succeeded.
- Production image:
gitea.app.lan/bodylog/bodylog.dev:sha-dd86056d6980.
- Production
/healthz returned ok after rollout.
- Website Android release: version code
2026060771, version name 0.1.2026060771-dd86056d6980.
- Feature commit:
8d310fd (Reduce Garmin sync battery cost).
- Feature merge:
bb161473b780bb348c2c80ed3e138c1bf0b328e5.
- CI hardening commit:
3955cdb (Harden Android Gradle downloads).
- Deployed merge:
dd86056d69806d26d56b5289eff11b2077c40ce5.
¶ Remaining operator action
Upload the signed standalone Garmin 0.2.0 IQ package to the existing Garmin Beta App entry, retaining the current app ID so installed beta clients receive the update. Do not create a new Beta App entry.