New-recording notifications
An opt-in feature surfaced in Settings → Notifications. When enabled, the app watches MediaStore for new call-style recordings and posts a notification so the user can open the app and transcribe them.
Flow
Watermark
When the user enables the toggle, the app records the current DATE_MODIFIED timestamp as a watermark in CallRecordingPrefs. Only files with a DATE_MODIFIED newer than the watermark trigger a notification — old library files never fire.
Dedupe
notified_new_recording_ids in CallRecordingPrefs is a set of MediaStore IDs already notified. The same file never fires twice, even across app restarts.
Boot recovery
BootCompletedReceiver re-registers the ContentObserver after device reboot so the feature survives a restart without the user re-enabling it.
Backup scan
A WorkManager unique periodic job (every 15 minutes) acts as a safety net in case the ContentObserver misses an event (some OEMs throttle or batch MediaStore notifications).
No phone-state permission
Detection is purely MediaStore-based. The app does not need READ_PHONE_STATE or call logs to detect new recordings.
Notification tap behaviour
Tapping the notification opens MainActivity. EXTRA_HIGHLIGHT_RECORDING_ID is plumbed through the intent, but the Calls tab does not yet scroll-to / pulse the highlighted row (roadmap item).
Disabling
Turning the toggle off in Settings:
- Unregisters the
ContentObserver. - Cancels the periodic WorkManager job.
- Leaves the watermark and dedupe set intact (so re-enabling doesn't notify for old files).
Other Android notifications
This page is specifically about the local, MediaStore-driven "new recording found" notification. The app has two other notification sources, both server-triggered via FCM rather than local device state — full architecture in Push notifications:
- Transcription results — a call reaching
COMPLETED/FAILEDpushes a system notification (channeltranscription_results). - Admin account events — an admin suspending/disabling the account, granting credits, or changing the plan pushes either an immediate in-app dialog (if the app is foregrounded) or a system notification (channel
account_events, if backgrounded).
Account-status UI, beyond notifications
Separately from any notification, AuthGate reads the signed-in account's accountStatus (from GET /api/users/me, refreshed on every launch and again after an account_status push) and adjusts the UI directly:
- SUSPENDED — a one-time dismissible
AlertDialogon top of the normal shell (most of the app still works; only new uploads are blocked), plus a persistent banner on the Profile and Limits screens. - DISABLED — the normal shell isn't shown at all;
DisabledAccountScreenreplaces it with a full-screen explanation and a Sign-out button, since every backend request 403s for a disabled account anyway.
See Admin console § Account status for what triggers each state.
Related
- Permissions —
POST_NOTIFICATIONSandREAD_MEDIA_AUDIOrequirements. - Architecture —
CallRecordingScannerheuristics. - Push notifications — the FCM-driven notifications above, end to end.
- Admin console — what an admin action does to an account.