Locks related to audio focus and remote control should always be
taken in the following order:
1/ audio focus lock
2/ remote control stack
3/ current remote control client generation
Change-Id: If8be11bfef92849957e692b2bd52adbd67a2ef0b
When the client gets cleared, let the display know the new
client generation ID is for a clear.
When a new client becomes current, let the display know
what the associated media button event receiver is.
Change-Id: I18e37a309b5b30ed361a68918379b60418409f1e
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
A MetadataEditor contains all the metadata and artwork to be applied
to a RemoteControlClient.
A MetadataEditor can only be applied once.
Change-Id: I3ce9d97f520cd9ab009fb1a92a2b399717511bd8
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
Define a RemoteControlClient interface that applications must
implement and register to be displayed on the lockscreen.
Change-Id: I67276ae653f203e76727432231f1d76535c31942
Previously, silent mode was entered if volume was already at 0 and
volume down key was pressed once.
The new volume management policy specifies that silent mode is entered when
volume is at last audible step and volume down key is pressed once.
Pressing volume down key continuously will decrease volume until
last audible step is reached, not 0.
Change-Id: Ib7b530668473d6a5af1e748f445d6185afed2158
Clear AudioManager.FLAG_PLAY_SOUND in AudioService adjustSuggestedStreamVolume()
if keyguard is locked.
Change-Id: I2effb9cab8d946845e948b28899b17d7f24c1282
When notifying the remote controls of an update, also pass the
associated media button event receiver.
Change-Id: I9125378653ce21e3bd672b936df638c0c6154edb
The possibility for applications to apply insert audio effects
(Equalizer, BassBoost, Virtualizer) on global output mix has brought up
a number of issue.
This change updates the java doc for audio effects indicating that
application should not apply insert effects globaly anymore as this behavior
will soon be deprecated.
The audio framework will still allow global insert effects during an interim
period but will give the priority to effects inserted on particular player by
disabling global effects when both are present.
============
Change-Id: If87f1944a0409d45d8d2eee66ff331f95965ca89
When requesting audio focus and linkToDeath() threw a
RemoteException, AudioService was only logging a warning, and
was still changing the focus, with a non-null death handler.
The change first check that linkToDeath() didn't fail, and only
then proceeds to change the focus (dispatch focus change
notification, updates the focus stack, and updates the remote
controls).
Change-Id: I0b96dd3c6e924d93f419880349d49f8b360b110b
Need to call unlinkToDeath() for the object to be garbage collected.
Save the object in the FocusStackEntry, unlink to death when we remove it from the stack.
See http://b/issue?id=5048400
Change-Id: I84c5ba46017d0a8744b5e7509a7c7a5c8dd918fb
author: olivier@google.com
AudioManager.isWiredHeadsetOn() should not require permission MODIFY_AUDIO_SETTINGS.
Remove permission checks on all getters in audio policy manager as permission enforcement
is really usefull for setters.
Also deprecate AudioManager.isWiredHeadsetOn() which name and implementation are deceptive.
Change-Id: I38f8df7c26c0d417bf0e2b74e4c11c2d143f2ecd
This removes the ParcelSurfaceTexture class since that functionality has been
folded into Surface.java. The change also updates the MediaPlayer to get rid
of setParcelSurfaceTexture() and modifies setTexture() to use the new Surface
functionality in order to simplify the code.
Change-Id: Iafa75ea3188263928128325d8a726786971b4de4
Pass the flags about what information changed in the remote
control client in the intent used by the remote control display.
Also pass the IRemoteControlClient to verify it is still current
before sending the intent.
Marked some logs as to be removed before release.
Change-Id: Ib3aa22d061e5dfaf80a9c4c78774c931a2cf0fbd
There can be multiple AudioManagers per process (because each Context has
its own cache of services), so AudioService should protect SCO activation
based on whether the pids match, not whether the IBinders match.
b/5044873
Change-Id: Ibec81365f95fec11f34b47becd0e473762bf06ad
We are still finding bugs related to the bulk insert support,
so lets disable it for now.
Bug: 5026233
Change-Id: I436cd8fc5dbe9fcf220a623f1c070cf901c6d38c
Signed-off-by: Mike Lockwood <lockwood@android.com>
In the remote control stack, don't use a SoftReference to the
IRemoteControlClient because the client live in a different
process, which causes the reference to become null at the
earliest opportunity.
Change-Id: I7f7733f9a1a043825cd5e8769282b535657dd82d
Update to API for a client to notify what type of information
changed (e.g. playstate, metadata) to optimize small updates
without the remote control display having to do expensive
queries such as album art.
When the remote control display retrieves the flags about
what information changed, the flag gets cleared.
Change-Id: I7d3d8d3eecd1da44695d84905ed9e7b70fe38b86
The media scanner was crashing while tring to insert genre data in the internal
media database, which does not support genres.
This resulted in some or all of the built in ringtones being unavailable
Bug: 5124718
Change-Id: Ib306348dd9808e59477b327b4adcb413957d8d24
Signed-off-by: Mike Lockwood <lockwood@android.com>
The way the old way worked relied on the process retrieving the
current remote control client to be in the exact same process as
the AudioService. This removes that dependency.
Change-Id: I1ba8bf32b61ec1e979ef7eee9661ba801aa19690