Skip to content

Device: Fix ear detection and call settings on several models#571

Merged
d4rken merged 1 commit into
mainfrom
fix/pod-model-feature-flags
May 1, 2026
Merged

Device: Fix ear detection and call settings on several models#571
d4rken merged 1 commit into
mainfrom
fix/pod-model-feature-flags

Conversation

@d4rken

@d4rken d4rken commented May 1, 2026

Copy link
Copy Markdown
Member

What changed

Several AirPods and Beats models had incorrect or missing device feature settings:

  • AirPods 1, 2, and 3 now properly report ear detection (auto-pause when removed) and expose the Automatic Ear Detection toggle.
  • AirPods 3 and AirPods Pro now show the End Call / Mute Mic press configuration.
  • Powerbeats Pro and Beats Fit Pro now expose the Automatic Ear Detection toggle.
  • Beats Solo Pro and Beats Studio 3 (over-ear headphones, no in-ear sensors) no longer incorrectly advertise ear detection.

Technical Context

  • BLE classes for AirPods Gen 1/2/3 already extended DualApplePods / HasEarDetectionDual; the advertisement bits were always parsed and the feature flag was simply lagging.
  • Beats Solo Pro / Studio 3 are bare SingleApplePods with no HasEarDetection interface — the hasEarDetection = true added in fe4ac306 was a false positive and is removed.
  • Older-model toggle additions follow the speculative-flag pattern from c5d9bed5 (Apple iOS exposes the setting; an unsupported AAP write is a silent no-op on the chip).
  • Microphone-mode description generalized from "AirPod" to "earbud" — the flag set isn't AirPods-only in spirit.
  • ModelFeaturesTest rewritten as exhaustive per-feature set assertions plus directional invariants (earDetectionToggle => earDetection, sleepDetection => earDetection, allowOff => listeningModeCycle, etc.) to catch future drift.

Sync flags with what the BLE classes actually report and what iOS exposes:

- AirPods Gen 1/2/3: enable hasEarDetection (already parsed via DualApplePods) and hasEarDetectionToggle

- AirPods Gen 3, Pro 1: enable hasEndCallMuteMic (force-sensor stems)

- Powerbeats Pro, Beats Fit Pro: enable hasEarDetectionToggle (iOS exposes it)

- Beats Solo Pro, Studio 3: drop hasEarDetection (over-ear, BLE class is bare SingleApplePods)

- FAKE_AIRPODS_GEN1/2/3: enable hasEarDetection to match HasEarDetectionDual

- Generalize microphone mode description from 'AirPod' to 'earbud'

Tests rewritten as exhaustive set assertions plus implication invariants.
@d4rken d4rken added bug Something isn't working device support labels May 1, 2026
@d4rken d4rken merged commit fc98db0 into main May 1, 2026
11 checks passed
@d4rken d4rken deleted the fix/pod-model-feature-flags branch May 1, 2026 18:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working device support

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant