mirror of
https://github.com/google/bumble.git
synced 2026-04-18 00:45:32 +00:00
AVRCP: Delegate Track Changed
This commit is contained in:
@@ -1517,6 +1517,8 @@ class PlaybackPositionChangedEvent(Event):
|
||||
@dataclass
|
||||
class TrackChangedEvent(Event):
|
||||
event_id = EventId.TRACK_CHANGED
|
||||
NO_TRACK = 0xFFFFFFFFFFFFFFFF
|
||||
|
||||
uid: int = field(metadata=_UINT64_BE_METADATA)
|
||||
|
||||
|
||||
@@ -1653,6 +1655,7 @@ class Delegate:
|
||||
self.player_app_settings = {}
|
||||
self.uid_counter = 0
|
||||
self.addressed_player_id = 0
|
||||
self.current_track_uid = TrackChangedEvent.NO_TRACK
|
||||
|
||||
async def get_supported_events(self) -> list[EventId]:
|
||||
return self.supported_events
|
||||
@@ -1714,6 +1717,9 @@ class Delegate:
|
||||
async def get_addressed_player_id(self) -> int:
|
||||
return self.addressed_player_id
|
||||
|
||||
async def get_current_track_uid(self) -> int:
|
||||
return self.current_track_uid
|
||||
|
||||
# TODO add other delegate methods
|
||||
|
||||
|
||||
@@ -2845,6 +2851,10 @@ class Protocol(utils.EventEmitter):
|
||||
)
|
||||
case EventId.UIDS_CHANGED:
|
||||
event = UidsChangedEvent(await self.delegate.get_uid_counter())
|
||||
case EventId.TRACK_CHANGED:
|
||||
event = TrackChangedEvent(
|
||||
await self.delegate.get_current_track_uid()
|
||||
)
|
||||
case _:
|
||||
logger.warning(
|
||||
"Event supported but not handled %s", command.event_id
|
||||
|
||||
@@ -135,7 +135,7 @@ def test_command(command: avrcp.Command):
|
||||
"event,",
|
||||
[
|
||||
avrcp.UidsChangedEvent(uid_counter=7),
|
||||
avrcp.TrackChangedEvent(identifier=b'12356'),
|
||||
avrcp.TrackChangedEvent(uid=12356),
|
||||
avrcp.VolumeChangedEvent(volume=9),
|
||||
avrcp.PlaybackStatusChangedEvent(play_status=avrcp.PlayStatus.PLAYING),
|
||||
avrcp.AddressedPlayerChangedEvent(
|
||||
@@ -715,6 +715,24 @@ async def test_monitor_now_playing_content():
|
||||
await anext(now_playing_iter)
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
@pytest.mark.asyncio
|
||||
async def test_monitor_track_changed():
|
||||
two_devices = await TwoDevices.create_with_avdtp()
|
||||
|
||||
delegate = two_devices.protocols[1].delegate = avrcp.Delegate(
|
||||
[avrcp.EventId.TRACK_CHANGED]
|
||||
)
|
||||
delegate.current_track_uid = avrcp.TrackChangedEvent.NO_TRACK
|
||||
track_iter = two_devices.protocols[0].monitor_track_changed()
|
||||
|
||||
# Interim
|
||||
assert (await anext(track_iter)) == avrcp.TrackChangedEvent.NO_TRACK
|
||||
# Changed
|
||||
two_devices.protocols[1].notify_track_changed(1)
|
||||
assert (await anext(track_iter)) == 1
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
@pytest.mark.asyncio
|
||||
async def test_monitor_uid_changed():
|
||||
@@ -729,7 +747,6 @@ async def test_monitor_uid_changed():
|
||||
# Interim
|
||||
assert (await anext(uid_iter)) == 0
|
||||
# Changed
|
||||
# Changed
|
||||
two_devices.protocols[1].notify_uids_changed(1)
|
||||
assert (await anext(uid_iter)) == 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user