Add new flag for an app to define it doesn't duck, but rather
pauses when losing focus with AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK.
This flag is to be used when requesting focus.
Add support for AudioPolicy to specify whether it will implement
ducking itself, rather than it being handled by an app.
When ducking is handled by a policy, do not notify focus owners
when they lose audio focus with LOSS_TRANSIENT_CAN_DUCK, unless
they would have paused, as expressed with the
AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS flag.
Add a focus listener for a policy to be notified of focus changes
so it can properly implement its own ducking.
Bug 16010554
Change-Id: I11d7cdb85c52fd086128a44f4d938aaa44db5c25
New API for a registered AudioPolicy to lock/unlock the audio
focus stack and prevent any new grant of focus, similar to
the way phone calls behave.
Bug 16010554
Change-Id: If34a58ca9bd43d5479e94a2a7b540750b4c6efe9
New internal API for an audio focus requester to always enter
the audio focus stack even if audio focus can't be granted
immediately (e.g. during a phone call).
Remap the "no delay" interface to the new "requestAudioFocus"
method signature and AIDL.
Bug 16010554
Change-Id: Iff91ddb0beb411cca1f8cf98300a9afc4178dc7f
MediaFocusControl doesn't handle media button receivers anymore,
so it should read and persist a receiver, and monitor
package addition/removals.
Also involved a security vulnerability, see bug
Bug 15428797
Change-Id: Ia2be01b20dc4a9820cc0cd3d0605ac03770b266b
VolumeController was a hidden class only used by AudioService and
MediaFocusControl. Since we added a public VolumeProvider class
moving VolumeController to avoid confusion.
Change-Id: I6838daf9b83846e1393b1a8502d3b10345a4799a
When remote volume is changed via volume buttons we need to notify
the system UI so it can show the slider. This also passes it the
controller to use so adjustments to the slider are sent back to
the correct session.
Change-Id: If5847bcd5db16c56e0e9904b88c94e5b28954c41
Hit a snag in remote volume changes. Trying off this round of
removal so I can work on fixing remote volume handling in a
separate CL.
Change-Id: I49b1ba4b75d770ba7c77da081755f3210a9e9483
When updating the PlayerRecord stack on playstate changes and
media button event receiver registrations, evaluate the index
of the stack entry to remove against the index of the last playing
entry as this index was valid before the entry was removed.
This affects the insertion index.
Change-Id: Iec58d2df6bcbd8f55925e9e0f9d48f698f7cf4e5
When registering a media button event receiver (through
AudioManager.registerMediaButtonEventReceiver()), do not
always push the receiver to the top of the stack of event
receivers:
- only push to the top if the associated RemoteControlClient
is in a playing state
- otherwise push it below the entries at the top of the stack
that are in a playing state
When changing the playstate of a RemoteControlClient:
- push to the top of the stack the corresponding PlayerRecord
is the state is a playing state
- otherwise push it below the entries at the top of the stack
that are in a playing state
When AudioService starts (e.g. after boot) and the last media
button receiver is restored, it goes in the stack.
After this CL, this entry is not "orphaned" anymore after the
same application registers itself to receive media buttons:
the entry from the restoration is now properly associated with
the registration from the application.
Bug 10749554
Change-Id: I985f9cc17b64a60ed4f2f2f6d03e117fb4e27570
The top of the stack of PlayerRecord instances is the "promoted"
instance whose RemoteControlClient information is available
to RemoteController objects, only when it also has audio focus.
This change removes the condition on audio focus ownership:
- whenever the player record stack ordering changes, no need to
check if it also has audio focus
- since the player record and audio focus stacks operate separately,
there is no need to synchronize access to both stacks.
Change-Id: I668f2aa2950f19f8c2a30bc59c7352246edcc56e
Move RemoteControlClient death handler and remote playback state
inside MediaController class.
Make MediaController data fields private. Document which accessors
can be removed once the audio focus and media button receiver
mechanisms are dissociated.
Change-Id: Icd14fb0d99bf74512c8f8552d124c0353ce1f06d
Extract class that handles each entry in the remote control stack
and move it to another file, MediaController.java.
Rename RemoteControlStackEntry to MediaController as each instance
will not just encapsulate information about the corresponding
(if any) RemoteControlClient.
This is just a CL for the renaming and extraction into a new file
of existing code. Obvious required changes are labelled "FIXME".
Change-Id: Ifbdac1d70e4d279ab175eef03e9d792d44873c51
This is far from complete but puts the basic components in place
for an app to interact with media sessions.
Change-Id: Icfe313f90ad76ae56badbe42b0e43fc5f68db36f
A regression was introduced when trying to limit the number of
internal synchronization generation IDs that caused RCC
information to be shown only for applications that requested
audio focus after media button receiver and RCC registration,
(such as Play Music), not for applications that requested focus
first (such as Play Movies).
The correct behavior is to always check and update the
RemoteControllers (seen by MediaFocusControl as RCD interfaces)
whenever a RemoteControlClient is registered (even if it's a
re-registration) when it is associated when an entry at the top
of the remote control stack.
Bug 11657655
Change-Id: I30716e2028f7f718a31e13401b191178735229ff
At the beginning of each song, the Music app re-registers its
media button event and requests audio focus, which causes
the reevaluation of each corresponding stack of clients. Each
reevaluation is accompanied by the incrementation of the
RemoteControlClient generation ID, which causes RemoteController
to issue a notification that the client has changed. The lockscreen
correctly interprets this as a reason to dump the current
RemoteControlClient data (including the artwork) because it will
receive the new data if new one is available. This is what causes
the "flashing" of the wallpaper on the lockscreen: for an instant,
no client data is available.
The fix consists in not causing the client generation ID to be
incremented when registrations don't cause any change in the
RemoteControlClient stack. Even though Music re-registers everything,
nothing has changed: it still is the current media button receiver,
and it still has the same RemoteControlClient.
Bug 11307382
Change-Id: I4d2404b571e88aeedb0eca6bd19d39f7ec4fc8b1
When a RemoteController listener is disabled: send its listener
"blank" information (no artist, "stopped state"...)
When a RemoteController listener is enabled: have the current
RemoteControlClient send the current information.
Bug 8209392
Change-Id: I375bf3c42a425ada94c61453b51669d7e819dde4
Registration of a RemoteController may succeed only if:
- the caller has the MEDIA_CONTENT_CONTROL permission,
- or if the RemoteController.OnClientUpdateListener it
registers if one of the enabled notification listeners.
For using the "enabled notification listener" functionality,
the CL involved:
- making OnClientUpdateListener an interface so a 3rd-party
application may have its implementation extend
NotificationListenerService, which is required for a
listener to be enabled by the user.
- add the concept of "enabled" status in an
IRemoteControlDisplay, so a RemoteController (which
encapsulates the IRemoteControlDisplay implementation)
may be registered, but later temporarily disabled by
the user, as a result of a user action in the security
settings, or a user switch.
- making MediaFocusControl, the component tied to
AudioService, monitor changes in enabled notification
listeners, and act upon enable/disable changes.
Bug 8209392
Change-Id: Ia8dfa2156c65668b2b0d4ae92048005912652d84
When a new RemoteControlDisplay gets registered, don't cause all
existing RemoteControlDisplays to re-receive RemoteControl
information they already have.
Bug 8417073
Change-Id: Icc8e7104d6870f748fddd702692789dbaef948ac
Public API, under system|signature permission for access to
currently playing metadata and playback state.
Public API for sending media key events.
Bug 8209392
Change-Id: I39b9309ca3fb1bc305492bad98740df0ae0842b2
Wrap all the features of IRemoteControlDisplay.aidl in a
new class, RemoteController, that implements the
IRemoteControlDisplay interface.
The API functions to expose in the SDK are tagged with
"CANDIDATE FOR API"
Bug 8209392
Change-Id: I597bcd503ac93e73889c9ae8b47b16c4fcb363bc
Refactor RemoteControlClient.MetadataEditor to move functionality
in new abstract class MediaMetadataEditor, so it can be also
used on the "display" side of the RemoteControl functionality.
Compatibility of these changes has been tested against
existing Play applications which use the RemoteControlClient API.
Move the new constants and method definitions related to the
ratings feature to MediaMetadataEditor. This changes the
yet-to-be-published ratings API, so this doesn't break
compatibility.
Rating feature is handled by the new Rating class with a set
of constructors that handle the different rating models.
Bug 8440498
Change-Id: I9b6dc2204bfc48594bad5cd6449d357f8a485da0
Add support for metadata of a RemoteControlClient that can be
updated:
- methods to control which keys can be edited,
- interface for an application to receive new values for a key.
Add definitions for ratings.
A rating is:
- a value between 0 and 100
- or a value indicating there is no rating
For a same piece of content, a rating can come from:
- the user
- "others" (i.e. not the user), to provide an average rating
Rating styles are:
- heart (a toggle)
- thumb up / down
- stars (with a configurable maximum number of stars)
Rating by user is editable metadata.
Bug 8440498
Change-Id: I1d45972f9ace4cb505ee0757e917f1d5dedd264e
The stream type is used in audio focus to better deal with
RemoteControlClient/Display in the case of notifications
during media playback. This comment is therefore outdated.
Change-Id: Ifa33bc4c0fbf065d8288ff5fdfaf1bc67b2a337e
Summary of feature:
Do not mute notifications when speech recognition recording is
active, but when an app has requested audio focus with
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE.
Implementation:
Move definition of AUDIOFOCUS_NONE to AudioManager where other
audio focus codes are defined.
Add support for querying the current audio focus type.
When audio focus is requested as GAIN_TRANSIENT_EXCLUSIVE, make
the corresponding loss by LOSS_TRANSIENT.
Before playing a notification, check whether GAIN_TRANSIENT_EXCLUSIVE
has been requested.
Bug 8251963
Change-Id: I41edc77326b70639d2fdcb4642c53109995b72a8
When a new focus owner lands on the stack, don't just make the
previous top of the stack lose focus, propagate the loss throughout
the stack.
Only dispatch focus loss on focus loss state change
Remove canDispatchFocus() method as it now doesn't need to be known
(and shouldn't be known) outside of the implementation.
Fix error where the focus code for a focus gain request should
always be a focus loss code.
Bug 8315302
Change-Id: I92c8f51fdcc090851d34d00fefed916e25da40c1
Move all audio focus request functionality under a new class/file.
Clean up encapsulation of data related to the request.
Change-Id: I989796e1ee1a5fc99799a64e1612294e0e40fa6d
Move more audio focus-specific functionality into the class
representing each audio focus owner, FocusStackEntry.
Keep track of how each FocusStackEntry instance lost focus.
Change-Id: I35df0717765a26ec747cb0110e2e951d155d1525
Add fields in an audio focus stack entry to track what type of audio
focus was requested, and why it was lost.
Make audio focus dump easier to read.
Change-Id: I61f6e43c13a32328a07125a2ba0dce1053872c86
Take into account the two types of undefined plyback position.
Only use "ms" unit when there is a position to write.
Fix misplaced ",".
Change-Id: I5033ec6ee7480f1ac525af7b7b0a9da259614783
Extract audio focus, remote control and media button handling
outside of AudioService without any changes in functionality.
Moving logic to new class, MediaFocusControl.
Introduce interface for managing volum control logic, VolumeController.
The VolumePanel class implements this interface.
Change-Id: I72bda2e0670c26e61ff076fd729c15f9f1156dc5