darken f9327930b5 fix(debug): Keep the recorder usable when a recording fails to start
Starting a recording spans several steps — create the session directory,
start the recorder, persist the trigger file, write the header — and only
the last of them commits the recorder into the module's state. Anything
throwing inside that window escaped the reactive collector, which then
died for the rest of the process: the started recorder kept writing where
nothing could stop it, the trigger file survived to re-attempt the dead
session on every launch, and startRecorder() waited forever for a state
nobody would publish. The debug log toggle stayed dead until reinstall.

The whole start branch is now guarded. A failure rolls back first — stop
the recorder, clear the log dir mirror, remove the trigger file, delete a
session dir this attempt created — and only then decides what the failure
means: our own scope dying still takes the collector with it, anything
else (a cancellation from inside the start work included) is committed as
a start failure and surfaced to the caller. shouldRecord is reset with it,
so the every-state collector lands in the idle branch instead of retrying.

The stop branch gets the same treatment: a recorder that cannot stop is
logged and the cleared state committed anyway, so an awaiting stop
completes. Recorder.stop() itself now guarantees logger removal, writer
closure and reference clearing. Session directory names get a collision
suffix, since a same-second retry would otherwise share a directory with
the attempt it replaces, and the public start/stop entry points are
serialized so two callers cannot race the same transition.
2026-08-04 18:26:47 +02:00
2025-03-19 22:29:09 +01:00
2025-03-19 22:30:14 +01:00
2021-12-28 17:11:50 +01:00
2021-12-28 17:11:50 +01:00
2021-12-28 17:12:27 +01:00
2025-03-21 19:36:03 +01:00
2026-07-08 11:21:18 +00:00
2026-07-08 11:21:18 +00:00

CAPod banner

Companion App for AirPods (CAPod)

GitHub release (latest SemVer including pre-releases) RB Status Code tests & eval Crowdin Github Downloads Google Play Downloads

A companion app that adds support for AirPod specific features to Android:

  • Battery level for pods & cases.
  • Charging status for pods & case.
  • Additional infos about connection, microphone & case.
  • Can receive and show all nearby devices.
  • Ear detection with automatic play/pause.
  • Automatically connect phone & AirPods.
  • Show popup when case is opened.
  • Widgets

CAPod is ad-free. Some additional features require an in-app purchase.

Currently supported models:

  • AirPods 1. Generation
  • AirPods 2. Generation
  • AirPods 3. Generation
  • AirPods 4. Generation
  • AirPods 4. Generation with ANC
  • AirPods Pro 1. Generation
  • AirPods Pro 2. Generation
  • AirPods Pro 2. Generation (USB-C)
  • AirPods Pro 3. Generation
  • AirPods Max
  • AirPods Max (USB-C)
  • AirPods Max 2. Generation
  • Power Beats Pro
  • Power Beats Pro 2
  • Power Beats 3
  • Power Beats 4
  • Beats Solo 3
  • Beats Solo Pro
  • Beats Solo 4
  • Beats Solo Buds
  • Beats Studio 3
  • Beats Studio Buds
  • Beats Studio Buds+
  • Beats Studio Pro
  • Beats X
  • Beats Flex
  • Beats Fit Pro
  • Fake AirPods 1. Generation 🎭
  • Fake AirPods 2. Generation 🎭
  • Fake AirPods 3. Generation 🎭
  • Fake AirPods Pro1 🎭
  • Fake AirPods Pro2 🎭

Download

Source Status
Google Play https://play.google.com/store/apps/details?id=eu.darken.capod
Google Play Beta https://play.google.com/apps/testing/eu.darken.capod
Github (Release) https://github.com/d4rken-org/capod/releases
Github (Pre-Release) https://github.com/d4rken-org/capod/releases
F-Droid https://f-droid.org/en/packages/eu.darken.capod/
F-Droid (IzzyOnDroid) https://apt.izzysoft.de/packages/eu.darken.capod/

Support the project

Get help

Screenshots

Thanks to

  • The OpenPods project, specifically @adolfintel and @Electric1447
  • Martin, Jeremy & Alpuche, Douglas & Bodeman, Kristina & Brown, Lamont & Fenske, Ellis & Foppe, Lucas & Mayberry, Travis & Rye, Erik & Sipes, Brandon & Teplov, Sam. (2019). Handoff All Your Privacy A Review of Apples Bluetooth Low Energy Continuity Protocol. Proceedings on Privacy Enhancing Technologies. 2019. 34-53. 10.2478/popets-2019-0057.
  • Celosia, Guillaume. (2020). Privacy Challenges in Wireless Communications of the Internet of Things.
  • The MagicPods project. If you are looking for "CAPod for Windows", check it out.
  • @kavishdevar and his LibrePods project for sharing a lot of cool stuff.
  • Crowdin for supporting open-source projects.

License

CAPod's code is available under a GPL v3 license, this excludes:

  • CAPod icons, logos, mascots and marketing materials/assets.
  • CAPod animations and videos.
  • CAPod documentation.
  • Google Play screenshots.
  • Google Play texts & descriptions.
  • Translations.
Languages
Kotlin 99.1%
Shell 0.8%