Skip to content

Conversation

@kavishdevar
Copy link
Owner

@kavishdevar kavishdevar commented Nov 9, 2025

not sure if this is gonna stay in this repo (reason below)

So, the current Qt app wasn’t really as updated as the Android app- the maintainer didn’t have time, and it was too different from the Android implementation for me to easily port new stuff.

This new app is built in Rust, using the iced library, and borrowing the AACP and ATT implementation from the Android app. This app also has a much better UI, and now isn’t just limited to AirPods! The AirPods basic implementation like ear detection and conversational awareness is already in place, along with battery and changing ANC mode.

linux-new-app

To-Do List

  • Add basic UI
  • Device state and connection handling skeleton
    • Handle new connections
    • Handle disconnections
  • Improve the tray
    • add a channel between window and tray to make the tray update when customized
    • handle multiple devices
    • handle disconnections
    • use devicemanagers instead of a channel between bluetooth thread and tray thread
  • Misc
    • take ear status from LE for taking ownership and audio, not received over AACP without taking control first
  • Add AACP settings
    • Implement the aacp handler
    • Add a advanced page which allows sending custom packets and control command values
    • Add everything to the UI
  • ATT related
    • Implement the manager
    • For some reason, connection is refused by AirPods sometimes; haven’t traced the cause yet
    • Handle ATT manager, while keeping it optional- not everyone would change their BlueZ config
    • Add the UI: Yet to decide if I want multiple settings pages for each device, or just out everything on a single page under different sections (like transparency settings, and hearing aid settings will take up space, and can be better of separated)
  • expose everything over dbus
  • Nothing will work on this after airpods so it can be merged first
    • Parse notifications
    • Read battery status from bluez (or something else- it's not sent over ATT)
  • Prepare for distribution
    • Add CI for Flatpak
    • Add flake.nix
    • Possibly, bundle it as an AppImage

@kavishdevar kavishdevar self-assigned this Nov 9, 2025
@kavishdevar kavishdevar changed the base branch from main to multi-device-and-accessibility November 10, 2025 06:17
@kavishdevar kavishdevar changed the base branch from multi-device-and-accessibility to main November 10, 2025 06:18
@kavishdevar kavishdevar force-pushed the linux/rust branch 3 times, most recently from 91f5884 to 5e5b428 Compare November 10, 2025 06:32
@xxmathias
Copy link
Contributor

So I gave this rust build a try and i wanted to share my feedback here.

  1. "Off" listening mode not appearing in tray dropdown - When enabled in the main app, the "Off" option doesn't show up in the tray's listening mode menu, even though allow_off_option is being set correctly. The menu generation logic looks correct but may have a refresh/timing issue.
  2. "Use text in tray" toggle doesn't work - Toggling this setting saves to the config file but the tray icon doesn't update until app restart. The icon generation reads from the file correctly, but ksni doesn't refresh the icon when the tray struct is updated. I would suggest using the same battery indicator as the Qt6 version.
  3. No visual indicator when AirPods are disconnected - The connected field is set to true on connect but never set to false on disconnect (the DeviceDisconnected handler doesn't update the tray). I would again suggest using the same icon as the Qt6 version.

All three issues appear to be related to the tray not properly refreshing/updating after state changes, possibly a limitation or quirk of the ksni library.

@kavishdevar
Copy link
Owner Author

Thank you @xxmathias!

  1. I think the allow off option control command message isn't sent to the tray. Probably the listening mode and conv awareness should also not be updated in the tray when changed from the UI.
  2. The text option is not sent to the tray. the tray is kinda disconnected from the rest of the app. Will fix that soon, along with dynamically handling devices. also, what do you mean by "[...] the same battery indicator as the Qt6 version."? the text here is the same as that.
  3. Not handling disconnections yet, not even in the main ui- already in the todo.

Redlonghead added a commit to Redlonghead/nixos-config that referenced this pull request Nov 21, 2025
fixed package to be able to run. rev from kavishdevar/librepods#241
@xxmathias
Copy link
Contributor

Thank you @xxmathias!

1. I think the `allow off option` control command message isn't sent to the tray. Probably the listening mode and conv awareness should also not be updated in the tray when changed from the UI.

2. The text option is not sent to the tray. the tray is kinda disconnected from the rest of the app. Will fix that soon, along with dynamically handling devices. also, what do you mean by "[...] the same battery indicator as the Qt6 version."? the text here is the same as that.

3. Not handling disconnections yet, not even in the main ui- already in the todo.

Regarding 2.: Rn there is a gauge icon in the tray. As toggling the text option doesnt do anything I couldnt try if the text is properly displayed or not.

If I find the time I will implement some stuff from the todo. How can we make sure that we both dont work on the same stuff?

@kavishdevar
Copy link
Owner Author

Rn there is a gauge icon in the tray. As toggling the text option doesnt do anything I couldnt try if the text is properly displayed or not.

That's weird. I do have the text after restarting instead of the circular indicator. Anyway, I'll remove the need for restart.

How can we make sure that we both dont work on the same stuff?

I'll be working on the tray next. And, please join https://discord.gg/HhG4ycVum4 for further discussions. thanks!

@Thaodan
Copy link

Thaodan commented Nov 22, 2025

Comparing this version and the Qt version only downside I see is that the Qt version looks native while the Rust version looks alien. Qt for the Gui would work with Rust too.

@threddast
Copy link

Comparing this version and the Qt version only downside I see is that the Qt version looks native while the Rust version looks alien. Qt for the Gui would work with Rust too.

That depends on your desktop environment; in COSMIC Iced looks native while Qt looks alien.

@hanh-nd
Copy link

hanh-nd commented Dec 3, 2025

I accidentally added my AirPods under “Nothing,” so the panel only shows a noise control mode. Is there a way to remove the device so I can add it correctly?

@kavishdevar
Copy link
Owner Author

kavishdevar commented Dec 4, 2025

I accidentally added my AirPods under “Nothing,” so the panel only shows a noise control mode. Is there a way to remove the device so I can add it correctly?

delete ~/.local/share/librepods/devices.json

@chrisdebian
Copy link

I wonder if this could be added as a button, which would simply delete ~/.local/share/librepods/devices.json? This may be more user friendly?

Thanks,

Chris

@kavishdevar
Copy link
Owner Author

I wonder if this could be added as a button, which would simply delete ~/.local/share/librepods/devices.json? This may be more user friendly?

I'll remove the Add device page entirely, I don't have full support for Nothing devices anyway.

* build: 👷 add nix flake

* chore: 🙈 add nix's result to gitignore
Repository owner deleted a comment from coderabbitai bot Dec 14, 2025
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.