G365Calendar is a two-part project that bridges Microsoft 365 calendar data to Garmin wearable devices. The Android companion app handles authentication, calendar sync, and data exchange, while the Garmin app renders the events on the watch.
Microsoft 365 Graph API
│
▼
Android companion app (Kotlin + Jetpack Compose)
│
▼
Garmin Connect Mobile SDK / Bluetooth
│
▼
Garmin watch app (Monkey C / Connect IQ)
- android/ — Android companion app and build instructions
- garmin/ — Garmin watch app and Connect IQ build instructions
- docs/integration-test-plan.md — manual end-to-end validation checklist
- Review the platform-specific guides:
- android/README.md for Android setup, build, and test instructions
- garmin/README.md for Garmin build and device-specific instructions
- Configure the Microsoft 365 app registration for the Android app.
- Set the Android calendar configuration through
local.properties, Gradle properties, or environment variables as documented in android/README.md. - Follow the Android and Garmin setup steps in their respective guides.
- JDK 17 or later
- Android SDK with API 26+ and compile SDK 35
- Garmin Connect IQ SDK and a Garmin developer account
- A Microsoft Entra app registration with the
Calendars.Readpermission
- The Android companion generates its packaged MSAL config at build time rather than storing the Azure client ID in a checked-in resource file.
- Android development uses
azureAuthorityAudienceto control whether sign-in targets organizational accounts, personal Microsoft accounts, or both; see android/README.md for the supported values and defaults. - Android development requires
android/local.propertiesforazureAppId, optionalazureAuthorityAudience, optionalazureTenantId,graphScopes, andgraphBaseUrlin local builds and/orAZURE_APP_ID,AZURE_AUTHORITY_AUDIENCE,AZURE_TENANT_ID,GRAPH_SCOPES, andGRAPH_BASE_URLfor all builds.
From the project root, use the repo-level Make targets as follows:
| Target | Underlying command | Description |
|---|---|---|
make build |
make -C android build and make -C garmin build |
Builds both the Android and Garmin apps. |
make test |
make -C android test and make -C garmin test |
Runs the Android and Garmin test workflows. |
make test-integration |
make -C android test-integration |
Runs the live Microsoft Graph integration tests for the Android app only. Requires a GRAPH_ACCESS_TOKEN bearer token with Calendars.Read; see the token setup notes in android/README.md. |
make dev |
make -C android dev and make -C garmin dev |
Starts the Android and Garmin development flows. |
- The Android app performs background sync every 60 minutes via WorkManager.
- The Android companion now shapes one canonical event payload after Graph retrieval; the debug screen and Garmin sync path both consume that same sorted, ID-free, size-limited payload.
- The Garmin app caches recent events locally for offline viewing.
- The current implementation targets Android and Garmin wearables; iOS support is not included.
- Full end-to-end companion communication debugging is limited by the Garmin Connect Mobile / Connect IQ ecosystem: Android emulators cannot fully emulate the required phone-to-watch companion path, so validating message exchange typically requires a real Android phone with Garmin Connect Mobile and a paired Garmin device.
MIT — see LICENSE for details.