Skip to content

Master - #803

Closed
cfy114514 wants to merge 17 commits into
librepods-org:mainfrom
cfy114514:master
Closed

Master#803
cfy114514 wants to merge 17 commits into
librepods-org:mainfrom
cfy114514:master

Conversation

@cfy114514

Copy link
Copy Markdown

No description provided.

cfy114514 and others added 17 commits September 19, 2026 17:29
Add AirPods5 (A3531/A3532/A3533) and AirPods5Wireless
(A3439/A3440/A3441) to AirPodsModels. Expose existing listening mode,
conversation awareness, head gesture, adaptive audio, personalized volume,
and stem controls; expose volume swipe only for the wireless-case variant.

Use Apple's earbud model numbers, excluding charging case identifiers.
Reuse existing placeholder artwork. Leave BLE identifiers, AACP/ATT,
connection behavior, and all existing model definitions unchanged.

Sources:
https://support.apple.com/109525
https://www.apple.com/airpods-5/specs/
https://support.apple.com/en-gu/104979

Validation: standalone Kotlin/JVM compilation with test-only R stubs;
96 local assertions passed for model lookup, capabilities, existing models,
registry uniqueness, and rejection of case/unknown identifiers.
Existing definitions verified unchanged after removing the additions.
Full Android APK build and AirPods 5 hardware validation are not yet done.
Make both AirPods 5 variants reuse all five AirPods 4 artwork references
without inheriting its capabilities. AirPods 4 itself currently uses
upstream Pro 2 placeholder images; no missing image files are invented.

Add AirPodsModelsTest and a JUnit 4 test dependency. Cover new and existing
model lookup, registration uniqueness, rejected case/unknown identifiers,
capability separation, and artwork consistency.

Convert this fork's Android workflow to read-only, secret-free FOSS debug
validation: unit tests, APK build, lint, checksums, and diagnostic artifacts.
Include changes to the workflow itself in path filters. Preserve push, PR,
manual, and reusable triggers. Do not auto-publish releases or Discord posts.

Validation performed before commit:
- Baseline source/Gradle copies matched their fetched Git blob SHAs.
- Standalone JVM execution: 10 test methods, 130 assertions passed using
  temporary resource IDs and an offline JUnit shim (not committed).
- Workflow YAML and embedded Bash syntax checks passed.
- CI SDK/NDK/CMake versions match the current Android build definition.

Full Android/Gradle CI and real AirPods 5 hardware behavior remain unverified.
Fork Actions may still need activation in GitHub's Actions tab.
Override setup-android v3's default packages with platform-tools so SDK
initialization no longer requests the retired tools package. Suppress
verbose accepted-license text without changing license acceptance.

Keep application code, SDK/NDK/CMake versions, build tasks, permissions,
and workflow triggers unchanged. Do not ignore SDK installation errors.

Validation: baseline matched the fetched Git blob; YAML parsing and
structural comparison passed; all four embedded shell scripts passed
bash -n. Full Android build and hardware validation remain pending.
CI run 35449626415 passed SDK bootstrap but failed to find
platforms;android-37. Install platforms;android-37.0 instead and use
compileSdk.release(37) with minorApiLevel=0 so Gradle selects the same
SDK directory. Keep targetSdk=37, minSdk, NDK, CMake and dependencies
unchanged; do not create fake platform aliases or downgrade the API.

Retain SDK package-list and install logs as diagnostic artifacts, check
required installed files, and report SDK installation separately from
the Gradle build/test/lint result. Installation failures remain fatal.

Validation: source copies matched fetched Git blob SHAs; YAML parsing,
four Bash syntax checks and unchanged-scope checks passed. Mock SDK
success, install/list failures and missing-file guards behaved as expected.
No real SDK download, Android build, unit tests, lint or hardware tests
were run locally; the push-triggered CI must validate the actual build.

References:
https://github.com/actions/runner-images/blob/ubuntu24/20260907.300/images/ubuntu/Ubuntu2404-Readme.md
https://developer.android.com/reference/tools/gradle-api/9.2/com/android/build/api/dsl/CompileSdkSpec
https://developer.android.com/reference/tools/gradle-api/9.2/com/android/build/api/dsl/CompileSdkReleaseSpec
One-shot maintenance workflow: prepare two reviewed source blobs and a
patch artifact without updating branches or executing application code.
The workflow will be removed when the verified source changes are committed.
Use the two AirPods 5 identifiers documented in AirPodsDesktop commit
71fbb5e961991dd614e2c58bbadfb918b9441e92. Preserve LibrePods' existing
byte order (0x3020 / 0x3620 for wire bytes 30 20 / 36 20), all ten old
mappings, unknown-model fallback, and IRK/RPA verification. Both encrypted
and unencrypted paths now share a header-validated model decoder.
Do not infer charging-case variants or AACP capabilities from these IDs.
Add seven JUnit tests for sanitized captures, both IDs, old models,
unsigned bytes, byte-order reversal, truncated frames and malformed headers.

Resolve the two real lint failures from run 35456128231: guard the API-37
BluetoothDevice.disconnect call with a best-effort reflective legacy path,
and package-scope the internal connection broadcast. Retain android:tint
for the three framework/RemoteViews layouts with a documented, path-scoped
UseAppTint suppression; do not disable NewApi or intent safety checks.

Separate APK, unit-test and lint steps while keeping all mandatory and
preserving diagnostic artifacts. Remove the one-shot source preparation
workflow; normal Android CI retains read-only permissions.

Validation before commit: reviewed the complete source patch; original
and resulting Git blob hashes verified. Production model decoder passed
79 offline smoke assertions. CI YAML, six Bash scripts and lint XML parsed.
The preceding CI had built an APK and passed 10 real JUnit tests, failing
only lint. This commit's full Android build, new JUnit tests and lint must
be validated by the new CI run; Bluetooth hardware behavior is untested.

Reference: SpriteOvO/AirPodsDesktop@71fbb5e
…ing, device settings editor, head tracking, log preview, resource management, and utility functions

- Implement tests for CachedRpaVerifier to ensure correct RPA validation and caching behavior.
- Create tests for encoding and decoding hearing aid settings, ensuring compatibility with legacy formats.
- Add tests for DeviceSettingsEditor to verify debounce behavior and state management during user interactions.
- Introduce tests for HeadTrackingPlotHistory to validate data retention and order.
- Implement LogPreview tests to ensure proper handling of log files and line preservation.
- Add tests for CloseableResourceScope to verify resource management and cleanup behavior.
- Introduce PacketLogBuffer tests to ensure distinct packet retention and snapshot behavior.
- Add tests for ConflatedCallbackSession to validate callback management and session behavior.
- Implement DiagnosticLogStream tests to ensure proper log formatting and handling of long sessions.
- Add OwnedCallbackLifecycle tests to verify callback registration and lifecycle management.
- Introduce RecentGestureExtremes tests to validate extreme value retention and session behavior.
- Add VolumeTransition tests to ensure proper volume ramping and cancellation behavior.
- Create gradle-daemon-jvm.properties for toolchain configuration.
Copilot AI lite review requested due to automatic review settings September 26, 2026 16:35

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@cfy114514

Copy link
Copy Markdown
Author

ok

@cfy114514 cfy114514 closed this Sep 26, 2026
@cfy114514
cfy114514 deleted the master branch September 26, 2026 16:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants