Commit Graph

22 Commits

Author SHA1 Message Date
Jean-Michel Trivi
3fbf67e217 Handle seek requests in AudioService
AudioService handles seek requests to RemoteControlClients.
Discard old or unprocessed seek requests when handling a new one.
Update javadoc for OnPlaybackPositionUpdateListener interface.

bug 8120740

Change-Id: Id17c2852b24d4b8af85e472a177484b98cfeba05
2013-04-09 14:37:26 -07:00
Jean-Michel Trivi
3261b537c5 RemoteControlClient receives playback position change requests
RemoteControlClient defines two listener interfaces for playback
  position, one to let the framework query the current playback
  position, the other to request playback to seek to a given
  position.

Updated IRemoteControlDisplay interface to support passing info
  about whether the user of RemoteControlClient can provide a
  playback position, and receive a new one.
Updated implementations of IRemoteControlDisplay to new
  interface.

Bug 8120740

Change-Id: I1a5a969da4d0f8c9ad27f691919dd08f8653982b
2013-04-01 18:14:30 -07:00
Jean-Michel Trivi
bc43b4c2f2 RemoteControlClient can report current position, speed
Extend RemoteControlClient class to support reporting the
 current playback position, and the playback speed.
Define listener for an application to receive new playback
 position to seek to (use of listener to be implemented).
Update IRemoteControlDisplay implementations to new interface.

bug 8120740

Change-Id: I2654daeca1ac49713d325df8226dceb85943c020
2013-03-29 09:47:48 -07:00
Jean-Michel Trivi
4a57005561 Support multiple IRemoteControlDisplay
Modify RemoteControlClient and AudioService to support multiple
 simulataneous IRemoteControlDisplay interfaces active at the
 same time.

Change-Id: I9f200a488afdd62a5e6957e64624d745e0f28149
2013-03-08 14:22:42 -08:00
Jean-Michel Trivi
f98de1e8dd Asynchronous handling of remote volume updates
Remote playback information updates will be posted from the
 application thread, and sent to AudioService. Because they
 require locking the stack containing the remote playback
 information, the update should happen on AudioService's handler
 thread to avoid lock contention.

Change-Id: Ie04898295e08c16dd8ab5985fd825301e9cf1981
2012-06-20 13:40:22 -07:00
Jean-Michel Trivi
1357012968 Remote volume handling in MediaRouter
Extend MediaRouter.UserRouteInfo to enable setting playback
 information, which includes volume. When the user route instance
 has a RemoteControlClient, forward any playback information to it.
 Enable specifying a callback to be notified of volume events
 on the route.
Extend MediaRouter.RouteInfo to enable retrieving playback
 information.

Update RemoteControlClient javadoc to reflect which parts of the
 API are not intended to be made public.

Change-Id: I59d728eb61747af6c8c89d53f0faeb07940594c3
2012-06-19 19:41:35 -07:00
Jean-Michel Trivi
3114ce3861 Remote volume handling
Extend RemoteControlClient class to enable an applicaton to
 specify more information about how it's playing media, now covering
 usecases where media playback happens "remotely". This playback
 information can be used to set the volume and maximum volume
 used remotely.
Declare a new intent and associated extras in Intent,
 ACTION_VOLUME_UPDATE, so an application can be notified that
 the volume it handles should be updated. It can then use
 the new RemoteControlClient.setPlaybackInformation() method
 to notify AudioService what the volume is.
Extend AudioService to maintain playback information associated
 with the RemoteControlClient information in the stack of
 media button event receivers (mRCStack). The information
 about the active remote is cached so the stack doesn't have
 to be iterated over in order to retrieve remote playback info.
 Events to "adjust" the remote volume based on hardware key
 presses cause the client application to be notified of
 volume updates, and the volume panel to display the volume
 set by the app.
 Revise which stream type is controlled when none is specified
 according to latest guidelines for remote playback.
Update VolumePanel class to support a new pseudo stream type,
 AudioService.STREAM_REMOTE_MUSIC, that corresponds to the
 remote playback volume, and uses the new "media route" icon.
 Enable it to receive asynchronously new volume values for
 the remote that will be displayed if the UI is still up,
 and ignored otherwise.
 Now supports hiding/showing sliders dynamically so remote
 volume only appears when AudioService has a remote control
 client handling remote volume.
Define new java symbols for the two media route icons.
Modify lockscreen behavior: don't automatically control music
 volume when music is active, consider also remote playback.

Still to do:
- playback information set by RemoteControlClient should post
  a message for AudioService to update playback information
  instead of updating it synchronously

Change-Id: I557aa687239f9acfe33a609f05876c67fa7eb967
2012-06-18 18:37:17 -07:00
Jack Palevich
05c66cc5cc Don't crash when scaling Bitmaps with private Bitmap.Configs
Bug: 6526197
Change-Id: I89f008f90888f0a679274c00293342ab0fb0e28e
2012-06-04 16:15:47 +08:00
Glenn Kasten
30c918ce7f Use final on new member variables
Use final for member fields initialized to a new and that are never modified.

Change-Id: I042352c7bc21879613e7a50b1205b6923f8083cf
2012-01-27 16:13:00 -08:00
Jean-Michel Trivi
ad87f5b40f Fix 5389442 RemoteControlClient javadoc
Extend RemoteControlClient class description with an example
 of instance creation showing how the PendingIntent is created
 and how it uses the same ComponentName as the one used
 in AudioManager.registerMediaButtonEventReceiver()

Change-Id: If8f050f94b112f9680ba6bf32ba622bc648fb1d0
2011-10-11 14:09:23 -07:00
Jean-Michel Trivi
68622396b6 Bug 5045498 Keep track of RemoteControlClient play state change time
Store the time at which a RemoteControlClient changes it playback
 state, and send that time to the IRemoteControlDisplay.
This change will enable displays to implement strategies such as
 timeouts (e.g. to not display transport controls for clients which have
 been paused or stopped for a certain amount of time).

Change-Id: I902882500565743d455d56f6000efaf612cbe0a9
2011-09-20 11:59:51 -07:00
Jean-Michel Trivi
f0cff04562 Bug 5300223 RemoteControlClient uses PendingIntent for media button events
Update the implementation of the RemoteControlClient / Display
 feature rely on PendingIntent as provided in the construction
 of the RemoteControlClient instance.
The ComponentName that describes the target of the media button
 events is set as the target of the Intent from which
 a PendingIntent is constructed.
This ComponentName is still saved in the stack for persisting
 the last media button event receiver.

This CL also updates the lockscreen IRemoteControlDisplay
 implementation to use the PendingIntent supplied by the
 application when sending transport control events. A (good)
 side effect of doing this is that intent will be directly
 targeted at the application.

Restoration of the media button event receiver
 after reboot is not fully functional yet.

Change-Id: I2be82f2839e9dee1de02512437b3fb41cc386cde
2011-09-16 12:40:43 -07:00
Jean-Michel Trivi
34d0d300ca Fix bug 5327199 Recycle bitmaps in RemoteControlClient
When applying the new bitmap from the editor to the client,
 recycle the old bitmap, and set the reference to the editor
 bitmap to null.

Change-Id: I7d79e4b8410e5035fa51b20be4b1ada391c84c28
2011-09-16 11:33:50 -07:00
Jean-Michel Trivi
6e920e6dac Bug 5300223 RemoteControlClient uses PendingIntent
API change so RemoteControlClient is given a PendingIntent in
 its constructor, which will be used for receiving media button
 events from remote controls.
Leave the old constructors (but hidden) to not break
 current functionality until the AudioManager and AudioService
 implementations have been updated.

Change-Id: Ifa12c8036c948931adc386a827dce2936788e1cd
2011-09-13 19:27:20 -07:00
Jean-Michel Trivi
466ade5ad6 Fix bug 5045498 Unhide Remote Control Client API
The RemoteControlClient API enables media application to have
 information such as album art, current song, playback state
 be displayed on "remote control displays", as well as be
 controlled by "remote controls".
The new API consists in:
 - a new class, RemoteControlClient
 - new methods in AudioManager to register a RemoteControlClient
 - a new class, RemoteControlClient.MetadataEditor to edit and
  apply the information associated with a RemoteControlClient,
  and which will be displayed on a "remote control display"

Change-Id: I5616085e4ad58ce0bbc1a5953b0a5a28d32f8703
2011-09-01 16:13:50 -07:00
Jean-Michel Trivi
5ad4b9fb96 RemoteControlClient metadata: add method for metadata of long type
Update to the RemoteControlClient.Editor API:
 - new method for setting metadata of type long
 - methods for setting metadata throw an exception if using
    the wrong key with the wrong method.

Note that this change will cause the Music2 application to
 throw an exception when it tries to set the duration as a string.

Change-Id: I17cff86467851a0aff313c07653e752ae6b6180f
2011-08-30 18:42:33 -07:00
Jean-Michel Trivi
7309c83b95 Cannot compare Binder references for RC display to unregister
Cannot trust references to IRemoteControlDisplay to remain the
 same when removing a RemoteControlDisplay, compare the
 result of .asBinder() instead.

Change-Id: Ib2e82aa24bd4b12804bccff94a6a0090ff83bea8
2011-08-26 18:54:44 -07:00
Jean-Michel Trivi
6e679d5a53 Don't try to rescale when no bitmap in RemoteControlClient
If a RemoteControlClient has a null artwork, do no attempt to
 rescale the bitmap, it's ok to send a null bitmap to the
 IRemoteControlDisplay.

Change-Id: I8332ccfcf18107ea0b41d4e7fa232d7f68798efc
2011-08-26 11:57:42 -07:00
Jean-Michel Trivi
44413e5b51 Bug 5045498 Single binder call when metadata and artwork are updated
When metadata gets applied, optimize the artwork and metadata
 update by doing it in a single call.

Add missing RemoteControlDisplay-related methods in AudioManager.

Change-Id: I97aa802cc480327bee5592ea8dfdbd414c0f037a
2011-08-23 19:08:47 -07:00
Jean-Michel Trivi
4da5eeffc9 Bug 5045498 Implementation of RemoteControlClient.MetadataEditor
A MetadataEditor contains all the metadata and artwork to be applied
 to a RemoteControlClient.
A MetadataEditor can only be applied once.

Change-Id: I3ce9d97f520cd9ab009fb1a92a2b399717511bd8
2011-08-23 18:09:49 -07:00
Jean-Michel Trivi
4426e42ac6 Bug 5045498 New implementation of remote control API
Remote control displays expose an IRemoteControlDisplay interface
 which they register through AudioManager.
Remote control clients create a RemoteControlClient object, which
 implicitely exposes an IRemoteControlClient interface registered
 in AudioService through AudioManager.
AudioService tells all clients and displays when a new client
 is the one that should be displayed.
A client's data gets sent to the display when it is valid, or
 it sets new data (while being valid).

The implementation for setting metadata and album art is temporary,
 and will migrate to the MetadataEditor API in future CLs.

Change-Id: Ibab6ea1d94c68f32482c760c6ae269541f885548
2011-08-23 11:23:22 -07:00
Jean-Michel Trivi
178889eff7 Bug 5045498 RemoteControlClient interface
Define a RemoteControlClient interface that applications must
 implement and register to be displayed on the lockscreen.

Change-Id: I67276ae653f203e76727432231f1d76535c31942
2011-08-17 09:53:12 -07:00