# Mobile infrastructure

Loosely coupled Capacitor/native bridge for the Angular product client. Domains depend on facades in this folder — never on `@capacitor/*` imports directly.

## Facades

| Service | Responsibility |
|---------|----------------|
| `MobilePlatformService` | Runtime detection (`browser` / `capacitor` / `electron`) and mobile UX flags |
| `MobileNotificationsService` | Local/push notifications for calls |
| `MobileCallSessionService` | In-call notification actions, background audio session, stream video hand-off |
| `MobileMediaService` | Attachment picker, speakerphone route, Android/iOS capture permission preflight, screen-share/PiP capability probes |
| `MobilePictureInPictureService` | Stream pop-out while backgrounded |
| `MobilePersistenceService` | Native SQLite schema init (`@capacitor-community/sqlite`) |
| `MobileSqliteConnectionService` | Shared SQLite connection for persistence + `DatabaseService` |
| `MobileCallKitService` | iOS CallKit active-call reporting for background voice |
| `MobilePushRegistrationService` | FCM/APNs token registration with signaling server; skips `PushNotifications.register()` when Firebase/APNs is not configured |
| `MobileAppLifecycleService` | Foreground/background lifecycle |
| `MobileAppUpdateService` | Play Store / App Store update checks via `@capawesome/capacitor-app-update` |

## Adapters

- `adapters/web/*` — browser fallbacks (Notification API, hidden file input, Document PiP).
- `adapters/capacitor/*` — lazy-loaded Capacitor plugins via `capacitor-plugin-loader.ts` (including `AppUpdate` for store update checks).

## Rules

Pure platform/call-notification rules live in `logic/*.rules.ts` and are Vitest-tested without Angular.
