History log of /frameworks/base/media/java/android/media/AudioService.java
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
6243edd818b84adfbe712d5d233d6414b33653ac 06-Dec-2011 Amith Yamasani <yamasani@google.com> New and improved silent mode on lockscreen.

3-state item to toggle between Silent/Vibrate/Ringer in long-press power menu.
No volume dialog on lockscreen, unless Power menu is up.

Set VIBRATE_IN_SILENT=1 when upgrading device.

Change-Id: I097d216f96c4abdbd83420e0c477106951b3607d
/frameworks/base/media/java/android/media/AudioService.java
afd01086795c7c1f6950a709180b2361625b8b6a 02-Dec-2011 Amith Yamasani <yamasani@google.com> Merge "Further volume improvements." into ics-mr1
2ef6f1bb5603c2e221191117695725237f49a5d5 01-Dec-2011 Amith Yamasani <yamasani@google.com> Further volume improvements.

- Remove silent mode from Power menu
- Show volume dialog on lockscreen
- Allow beeps when adjusting volume in lockscreen

Bug: 5586083
Change-Id: I93052a8ec5004c784f20e04488af9382d495e711
/frameworks/base/media/java/android/media/AudioService.java
6bc7f2cd30b6bd90806942b0722e22daa2108493 30-Nov-2011 Eric Laurent <elaurent@google.com> AudioService: strengthen A2DP device detection

If the intent BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED is broadcast
before AudioService is started, The A2DP device connection is never detected
by the audio framework resulting in audio not being routed to A2DP unless the device
is rebooted or the A2DP headset reconnected.

Make sure that A2DP device connection state is sampled when
boot completed event is received.

Issue 5665159

Change-Id: I04d82020afc00af28c5ea0bb9879ed55bcc9b6f3
/frameworks/base/media/java/android/media/AudioService.java
e7edc868538e83152e7bc35c830fee0d629baefc 16-Nov-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix 5623252 unlink to death of audio focus client early

When removing an entry in the audio focus stack, don't wait for
this object's finalizer to unlink to the death of the associated
client, and unlink right away.
The FocusStackEntry.unlinkToDeath() method is made safe to call
by catching the exception it can throw inside its body.

Change-Id: Id347a933d72dcb41531adff2854fb00277032cc9
/frameworks/base/media/java/android/media/AudioService.java
a9509736c85c19fe4ad4ba97a0545f0422a3dfc1 15-Nov-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix 5615747 Don't leak remote control client death handlers

Whenever a remote control stack entry is GC'd or removed from
the stack, unlink its death handler.

Change-Id: Ia4ed6667351849fd388272591e24ffc16959beaf
/frameworks/base/media/java/android/media/AudioService.java
de1f065be109e1c313d8330c8e34210fedaac74e 12-Nov-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix 5607938 AudioFocusDeathHandler leaks GREF

The AudioFocus death handler was correctly updating the audio
focus stack when an audio focus client dies, but the death handler
was leaking GREF if unlinkToDeath() is not called.
The fix consists in making sure unlinkToDeath() is always called
by calling it in its finalizer.

Change-Id: I0c5343b4986ab582cadbf171fc53816952dc16f5
/frameworks/base/media/java/android/media/AudioService.java
96a33d1caad2fab0bc28891cfbf553f4b050bf0b 08-Nov-2011 Eric Laurent <elaurent@google.com> Fix problems in tablet silent mode.

Do not enter silent mode when ALARM stream volume is changed
to 0 by volume down key: Only RING, NOTIFICATION and MUSIC
streams control silent mode.

Report correct volume (0) for NOTIFICATION stream when silent mode
is entered by changing NOTIFICATION stream volume to 0 with
volume down key.

Change-Id: I3e0816dfae40bc127cc30cca02cdca6ec19e30a4
/frameworks/base/media/java/android/media/AudioService.java
8ca9a1cf350bde9a429b8a6fe7c673b964048a54 31-Oct-2011 Eric Laurent <elaurent@google.com> Fix volume indication in vibrate mode.

The latest change in silent/vibrate mode selection via volume keys
was such that ringtone volume was not showing 0 when entering vibrate mode
by continuous press on vol down.

Issue 5530217.

Change-Id: I9ba817648e5dca40e0d19f5f606d7763ae61b1c6
/frameworks/base/media/java/android/media/AudioService.java
c696a53d1fe4d61373c5dc64dd057d322da90c8f 29-Oct-2011 Amith Yamasani <yamasani@google.com> Bring back the old-style Ring/Vibrate/Silent states when using volume keys.

In order to completely mute the ringer (no vibrate), introduce an extra
state beyond mute, which mutes the vibrator as well, if it was enabled.

Bug: 5530217

Change-Id: Ib1f299ee6bbca56c1aa7e1100662591362d08307
/frameworks/base/media/java/android/media/AudioService.java
b024c30a80684ac08daef3137b7ba0d347fe3ce5 15-Oct-2011 Eric Laurent <elaurent@google.com> Fix issue 5462427: Volume should never be 0 ...

Make sure that ring or notification volume index
never reaches 0 unless in silent mode.
Conversely, enter silent mode when this volume is set to 0.

Change-Id: Iff5e5e972b607f4736e7a704b26b2dadb40074b0
/frameworks/base/media/java/android/media/AudioService.java
950e8cb40a6d826af4cc2eef9d3908c1b70486e6 13-Oct-2011 Eric Laurent <elaurent@google.com> Indicate screen off condition to audio framework.

Add a mechanism for AudioService to notify audio framework and audio HAL
that screen is turned on or off. This indication can be used by lower
audio layers to trigger low power audio playback mode.
Current implementaiton based on setParameters() method is experimental
and will be replaced by a different interface when ready.

Change-Id: Ie72ada0a8edec3d71b47681b9f51cb5bc839d45b
/frameworks/base/media/java/android/media/AudioService.java
7ff866e8cf43afc64111e98863dab549b57447b4 14-Oct-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix 5153611 remove remote control client/display log from AudioService

Do not log debug messages for the RemoteControlClient and
IRemoteControlDisplay related features.

Change-Id: I81bfeec1770f81b78b679dc03fb40806393b170a
/frameworks/base/media/java/android/media/AudioService.java
26b3d1ff38998c7cb80a2950da0589ebd8510897 28-Sep-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 5357295 NPE on display when remote control client dies

When a IRemoteControlClient dies, that client is set to null
in the stack of remote control entries (mRCStack). This is done
by calling registerRemoteControlClient() with a null client.
The bug is that registerRemoteControlClient(), after storing
the new client, uses it to let it know what the current
remote control display is. When that display is non null, the
client is sent the current display. So when a client died
when there was a display, the client reference was accessed
in the part of the method where we haven't yet checked whether
it is null or not.
The fix consists in moving the setting of the display on the
client (method plugRemoteControlDisplay) only after having
checked that the client is non-null.

Change-Id: Ic74d6cba9e3a3a16e78cd80a1ae5901abfeb3905
/frameworks/base/media/java/android/media/AudioService.java
f0cff0456258478ba768097f73d4367ab67fd7a3 15-Sep-2011 Jean-Michel Trivi <jmtrivi@google.com> 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
/frameworks/base/media/java/android/media/AudioService.java
d7454be47f4111c0478a502353e11dea401378bd 14-Sep-2011 Eric Laurent <elaurent@google.com> Issue 5044873: Pb with BT SCO AudioManager API

Do not identify the SCO connection client by the binder interface
passed when starting the connection as this binder changes if the
AudioManager proxy changes. Use the client PID instead.

This solves an issue with gTalk starting a SCO connection from one
AudioManager proxy and then changing audio mode from another thus
terminating the previously started SCO connection.

Change-Id: Ia3067fecc551fc15df3bf75ce0c43d181859e4f0
/frameworks/base/media/java/android/media/AudioService.java
9f103de83f2d5d472960dcf1401e95b2ab57a477 09-Sep-2011 Eric Laurent <elaurent@google.com> Fix issue 4673378: switching from VoIP to GSM call

The problem is that any app can change the audio mode and override
a mode previously set by another app. If two apps (gTalk and Phone) compete
for audio mode ownership, there is no mechanism to maintain coherency
in the actual audio mode selected.

Added a mechanism in AudioService to manage an audio mode request stack.
Any app requesting a mode different from NORMAL enters at the top of the stack
and the requested mode is applied. When an app sets mode back to NORMAL, it exits
the stack and the new mode corresponding to the request at the top of the
stack (if any) is applied.

Change-Id: I68d1755d0922f680df4a19bfc5ab924f5a5d8ccd
/frameworks/base/media/java/android/media/AudioService.java
671db6f3ba1fdb3c907e0735fe6d0d284f5c34de 07-Sep-2011 Marco Nelissen <marcone@google.com> Fix startBluetoothSco race

Change-Id: I8b711bd3c6b12f2e3e92144c0dadac72261bf914
/frameworks/base/media/java/android/media/AudioService.java
dca56b9432e2cc851d1a58920071fed2e1e3d142 02-Sep-2011 Eric Laurent <elaurent@google.com> Fix issue 5252593: any app can restart the runtime

Replace null device address string by empty sting.

Change-Id: I285c35f3345334e6d2190493b1a8a5aca1a361a4
/frameworks/base/media/java/android/media/AudioService.java
a6ec356d2f5d2829fd8eff315a37f49501eac842 01-Sep-2011 Jean-Michel Trivi <jmtrivi@google.com> Merge "Fix 5243349 RemoteControlDisplay incorrectly updated"
b716f0b7b2d8e4b045843fc6a7004910eb344c19 01-Sep-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix 5243349 RemoteControlDisplay incorrectly updated

This fixes a case where the RCD would display transport control
for a RemoteControlClient that didn't have audio focus.
This was happening because registering an RCD was directly calling
the updateRemoteControlDisplay method, without first calling
the checkUpdateRemoteControlDisplay method which verifies the
conditions before updating the display. One of those conditions
is that the audio focus stack shouldn't be empty.

To verify this fix, several functions were also rename to clearly
indicate the lock order and verify we properly synchronize on
the right objects. In doing so, a missing synchronization on
audio focus was found.

Change-Id: If1baaac224ea676aeb83ac0aefcc53f87461c32e
/frameworks/base/media/java/android/media/AudioService.java
16b241a58f1ec4b317647b6fd0ad9b5cc3f7ba3d 31-Aug-2011 Eric Laurent <elaurent@google.com> Merge "Change condition to enter silent mode."
338794576667745b060ac269b2c2b36e0c6964f2 31-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix 5242200 only update RemoteControlDisplay when a client is present

A precondition for updateRemoteControlDisplay_syncRcs() is that
mRCStack is not null. This condition was not verified when
registering a RemoteControlDisplay.

Change-Id: I0b152410e57c590114b387e9ab83f0c4d15d060d
/frameworks/base/media/java/android/media/AudioService.java
3d4c06f90726a85e89dab13c41ddc15b9c912a3f 16-Aug-2011 Eric Laurent <elaurent@google.com> Change condition to enter silent mode.

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.

Change-Id: Id3e75a99c522d8afe276868010b6e73495d23fde
/frameworks/base/media/java/android/media/AudioService.java
958bba6862c9540c528263686b0de044b4a7a5f6 30-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Bug 5045498 Force display update when display registers

When an IRemoteControlDisplay registers, cause the
RemoteControlClient to send all its information to the newly
registered display.
The previous code was only sending a request for update: this
request didn't here cause the client to send the data because
a new client generation had not been synchronized among clients
and displays.
This CL uses the same code path to force an update as when audio
focus changes, or a new client registers, by calling the same
method that is called in those cases,
updateRemoteControlDisplay_syncRcs(flags).
Also in this CL: more method renames to indicate methods that
are called synchronized on mRCStack.

Change-Id: I54102f45ba1cd4812d958ecd883bec7bc45ae88f
/frameworks/base/media/java/android/media/AudioService.java
db8a361629f06f62b9e1c40d4413b3b5099bd124 27-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Update IRemoteControlDisplay when it registers.

When an IRemoteControlDisplay registers, it must receive information
from the current client.

Change-Id: Id845e7a87ac74c2db2c59e0281b28a45f8d20528
/frameworks/base/media/java/android/media/AudioService.java
18e7bce52318f00b5023f33933a571c477f2b61c 26-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Address multiple RemoteControlDisplay competing for registration

The RemoteControlClient / Display feature only supports one
display. If multiple displays are registered, this CL implements
the following policy:
- cannot unregister a display that is not the current one,
- registering a display when another is already registered
causes the old one to be unregistered.
This fixes a death handler leak where the previous display was
simply overwritten, without unlinking to its death.

Change-Id: I63f8a38093796e0960761936d7fc58d47b7589b3
/frameworks/base/media/java/android/media/AudioService.java
3094d955b8321f01e50cb0c448ae1c4c461f41c9 25-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix deadlock in AudioService

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
/frameworks/base/media/java/android/media/AudioService.java
4b6df6a3dcbd9990e36438c529fa8c16b2580df9 24-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> More information for RemoteControlDisplay about new client

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
/frameworks/base/media/java/android/media/AudioService.java
68e37ae87ad9932f2119c1b2fc361c1aed5841e4 23-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Merge "Bug 5045498 New implementation of remote control API"
4426e42ac6107bf6b09f7c4cdad39eb161d8b9ca 19-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> 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
/frameworks/base/media/java/android/media/AudioService.java
73a56fe47720cc2659da6fc0a01fcc28940e7243 23-Aug-2011 Eric Laurent <elaurent@google.com> Revert "Change condition to enter silent mode."

This reverts commit c11c3ae4dd5d4054e5b44a7bdfe6b203bdb69976.
/frameworks/base/media/java/android/media/AudioService.java
8c60d89b3704164d5a13e80ace6bea4b51af37a3 18-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Merge "Bug 5045498 RemoteControlClient interface"
8f6684144a617982763db3d2281e86f2a9d368db 17-Aug-2011 Eric Laurent <elaurent@google.com> Merge "Fix issue 5126270: Holding volume down vibrates"
cc11b1b8bb47aa6be23ff5c4caf683ff90074121 17-Aug-2011 Eric Laurent <elaurent@google.com> Fix issue 5126270: Holding volume down vibrates

Clear AudioManager.FLAG_VIBRATE in adjustStreamVolume() if
already in silent mode.

Change-Id: I8035a8cc713e1880799d9aaf053d8e4d12acad75
/frameworks/base/media/java/android/media/AudioService.java
178889eff7fa3361a5cb08d6d43846a1baf5216b 16-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Bug 5045498 RemoteControlClient interface

Define a RemoteControlClient interface that applications must
implement and register to be displayed on the lockscreen.

Change-Id: I67276ae653f203e76727432231f1d76535c31942
/frameworks/base/media/java/android/media/AudioService.java
c11c3ae4dd5d4054e5b44a7bdfe6b203bdb69976 16-Aug-2011 Eric Laurent <elaurent@google.com> Change condition to enter silent mode.

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
/frameworks/base/media/java/android/media/AudioService.java
931e73946390b43fc08f5ae66770fba0efba5345 16-Aug-2011 Eric Laurent <elaurent@google.com> Merge "Fix issue 5131056: key beeps when screen is locked"
96f218e0b9834b959f1acf34b51d325bb1c33a0d 16-Aug-2011 Eric Laurent <elaurent@google.com> Fix issue 5131056: key beeps when screen is locked

Clear AudioManager.FLAG_PLAY_SOUND in AudioService adjustSuggestedStreamVolume()
if keyguard is locked.

Change-Id: I2effb9cab8d946845e948b28899b17d7f24c1282
/frameworks/base/media/java/android/media/AudioService.java
0a9faa8cf934ef38319cd945b600825c6bb88b9c 15-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Bug 5045498 Send media button event receiver to remote control

When notifying the remote controls of an update, also pass the
associated media button event receiver.

Change-Id: I9125378653ce21e3bd672b936df638c0c6154edb
/frameworks/base/media/java/android/media/AudioService.java
baf674eedd5ecff9da0cf8cabe9868f7699b1695 15-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Fail request for audio focus when linkToDeath fails

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
/frameworks/base/media/java/android/media/AudioService.java
061214bb71a4a4211e670001226c68f5e8036b84 14-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix leak of global references and AudioFocusDeathHandler objects.

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
/frameworks/base/media/java/android/media/AudioService.java
b5f04d6dbf5106140df367ae07f0e7708e1b650e 10-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Pass flags on remote control client information change in intent

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
/frameworks/base/media/java/android/media/AudioService.java
f1ddd51f9cd2f92b922bc636c307210a8d587c25 10-Aug-2011 Marco Nelissen <marcone@google.com> Check pids instead of IBinders

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
/frameworks/base/media/java/android/media/AudioService.java
17da769e987de40e113c5b2a3b867b25ba7ac0a2 10-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> AudioService: don't use a soft reference on IRemoteControlClient

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
/frameworks/base/media/java/android/media/AudioService.java
8d4ed0d8e1e0e0f4a8ed7fc1407a850dc2190040 08-Aug-2011 Neel Parekh <neel@google.com> Prevent NPE when registering a remote control client

Change-Id: Ia22b456b1cbdd89736118c7e68b7c68dd6e59c64
/frameworks/base/media/java/android/media/AudioService.java
7b6198cacc3e7dd31ef91537d809857d826fb7fa 07-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Bug 5045498 API for client to notify remote control info changed

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
/frameworks/base/media/java/android/media/AudioService.java
ced110ec5970c632f523dfc0350b6071461ea9bc 05-Aug-2011 Neel Parekh <neel@google.com> Make retrieving remote control client go through binder interface

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
/frameworks/base/media/java/android/media/AudioService.java
a30a21cf2ef37b490e3790aad3105cda115124d6 04-Aug-2011 Jean-Michel Trivi <jmtrivi@google.com> Remove empty remote control client listener methods

Remove non-implemented methods for registering IRemoteControlClient
listeners.

Rename refreshRemoteControlDisplay() method to follow framework
conventions.

Change-Id: I9254e8eeea9020a530c9a32f328f0ef7dbd9dd0c
/frameworks/base/media/java/android/media/AudioService.java
045d179ff6568eaa30f66801e10fd888e2da0f9d 03-Aug-2011 Eric Laurent <elaurent@google.com> Merge "AudioService: ignore NOTIFICATIONS_USE_RING_VOLUME."
8f619182cb759718f64ab95fd6d61c16138f6952 22-Jul-2011 Jean-Michel Trivi <jmtrivi@google.com> Remote control display API and implementation

Extend the media button event registration AudioManager API to
enable applications to register as a client of "remote controls"
and let them provide information meant to be displayed
by the remotes.
AudioService sends a AudioManager.REMOTE_CONTROL_CLIENT_CHANGED
intent to let remote controls know when / from whom they can
retrieve the information to display.
Only application that own audio focus, are the currently
registered media button event receiver, and have registered
a remote control client, are eligible to appear on the
remote control.

To address in future CLs:
- change how a remote control client forces a refresh
- rename methods called under lock to ___Locked()
- make API public

Change-Id: Icca30ab05dac2605ee9246f8acb27a03dcea077a
/frameworks/base/media/java/android/media/AudioService.java
4eb5a5713877227374d7bac97719873b2c17e92a 03-Aug-2011 Eric Laurent <elaurent@google.com> AudioService: ignore NOTIFICATIONS_USE_RING_VOLUME.

Do not take NOTIFICATIONS_USE_RING_VOLUME setting into account now
that it has been deprecated. STREAM_NOTIFICATION and STREAM_RING
always use the same volume setting.

Change-Id: Ibf6e5f86133d3781fd9e66455be64582318d93e6
/frameworks/base/media/java/android/media/AudioService.java
5531a3a3cfce0fe0dd279cdce2de30cf777f5227 20-Jul-2011 Eric Laurent <elaurent@google.com> Merge "Fix issue 5012047: silent mode mutes music"
72668b2c040b581b298b069f3b5af5ed7f212d89 20-Jul-2011 Eric Laurent <elaurent@google.com> Fix issue 4499450: Unknown Ringer Mode

Added a validity check on ringer mode values in AudioManager.setRingerMode().

Change-Id: Ie780edc1d347009d90f000018a71520b04e0c4a1
/frameworks/base/media/java/android/media/AudioService.java
c1d4166289ce016965d1147f7e8d37862ee347ec 19-Jul-2011 Eric Laurent <elaurent@google.com> Fix issue 5012047: silent mode mutes music

Implemented different silent mode behaviors for tablets and phones.
The behavior inherited from Honeycomb was for tablets only and
was muting music in silent mode.

Change-Id: Ib053e7b70ca02190debc87648ab8a163f9d39577
/frameworks/base/media/java/android/media/AudioService.java
b06ac839dd2d0437fc8314f6deb7233af5af521e 26-May-2011 Eric Laurent <elaurent@google.com> Issue 4364098: bluetooth SCO not working

AudioService does not need to unconditionally stop virtual calls
when the audio mode is changed from normal. Only stop virtual calls
that have been started from AudioService.

Change-Id: I75992d3655661e5910536a62dc8a8e0256d835e8
/frameworks/base/media/java/android/media/AudioService.java
dc03c61fe3cd8d0805480e48a974986439977a60 01-Apr-2011 Eric Laurent <elaurent@google.com> Bluetooth SCO audio API improvements.

The AudioManager API to control bluetooth SCO did not provide an easy way for
applications to handle SCO connection errors. When a request to activate SCO with
AudioManager.startBluetoothSco() failed, no state change was indicated via
AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED intent. The application had to
implement a timeout to handle connection failures.

The API change consists in defining a new intent AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED
and deprecate AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED. The new intent
will broacast a new state CONNECTING when the SCO connection is initiated.
The application can monitor changes from CONNECTING to either CONNECTED or DISCONNECTED
states to detect connection success or failure.
An extra indicating the previous state is also added to the new intent.

Also improved BluetoothHeadset service management in AudioService. A disconnection
from the service is not considered as a device or SCO link disconnection. Instead, if the
service interface is not present when a request to activate SCO is received, an
attempt is made to reconnect to the service.

Change-Id: I005fda1caaf74bb7de64fece44e9c7e628e828db
/frameworks/base/media/java/android/media/AudioService.java
72843377d50a8f95cceaf33d316ab68d9b47f2eb 18-Apr-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 2659754 ConcurrentModificationException in audio focus changes

While iterating over the audio focus stack or the media button
receiver stacks, do not modify the stack other than through the
iterator object.

Change-Id: Ice8827e7d29afed72b40c93edf7401cd54ba4b0c
/frameworks/base/media/java/android/media/AudioService.java
d589fea865e90859324f00d21765fa7d7759e465 15-Apr-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 2724503 Persist media button receiver across reboots

Whenever a new media button receiver is registered, save it
in the settings.

When the system audio settings are reloaded or when the
AudioService is created, the registered media button receiver
is restored.

Whenever a package is removed from the system, remove
any media button receiver from the same package that are in
the media button receiver stack. If this causes the currently
registered receiver to change (i.e. the top of the stack),
this will cause an update of the receiver stored in the
system settings.

Note that unregistering a media button receiver will not
cause the receiver saved in the settings to be updated,
this is ON PURPOSE. This is to prevent well behaved
application who unregister their receiver at the destruction
of their service, to not receive the intent after a reboot,
and to not encourage applications to never unregister
their receiver.

Change-Id: I941b777debaa56e88de93c3b03aec40331ea9ab1
/frameworks/base/media/java/android/media/AudioService.java
fa640154f1f42121d81242b2f1a10f03e52f0014 13-Mar-2011 Eric Laurent <elaurent@google.com> Partial fix for issue 3515250: video chat and SCO

Do not call directly into AudioSystem in setBluetoothScoOn() but
send a message to the AudioService handler instead. As the
procedure to switch audio path to BT SCO can last some time we should
not block the caller which can run in the UI thread.

Change-Id: I6ac4b5a934d69781db3aebe5d0e8137b52a0ada4
/frameworks/base/media/java/android/media/AudioService.java
382f4e6ea4dcf39105b36364582ed01642daa93c 08-Mar-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 4064086 Use a death handler on audio focus changes from mode

Use a death handler when audio focus changes are caused by audio
mode changes.

The bug comes from the fact that audio focus clients that use the
audio mode for automatic focus handling didn't register a death
handler, which was set to null. When such a client died, this
handler was compared against the one to remove from the
audio focus stack, which resulted in an NPE.
The fix consists in registering a valid IBinder object in the
audio focus stack, even for clients whose focus requests originate
from a change in audio mode, as implemented in the
handleFocusForCalls() method.

Change-Id: Id9e1d3d10afcd99969285f6d60fc4d7dde1e4a10
/frameworks/base/media/java/android/media/AudioService.java
854938a72d968c1bc0de4e2b0ea87777cfebc045 22-Feb-2011 Eric Laurent <elaurent@google.com> Fix issue 3388354.

Release all sco audio clients when the intent indicating
STATE_AUDIO_DISCONNECTED state is received.
Also clear mScoClients array when clients are released.

Change-Id: I63ec9d70fe72a102e09a4a473a367fb2e550b171
/frameworks/base/media/java/android/media/AudioService.java
a25c5d88d17f251262307ce31e799c9cf361d145 10-Feb-2011 Eric Laurent <elaurent@google.com> Fix issue 3435692

The problem is that the AudioService is not notified of the death of
IAudioFlinger binder interface because no methods was called on AudioFlinger
from system_server since the device booted. Therefore, AudioSystem did not created any
IAudioFlinger interface in the system_server process.
The root cause was always present but more likely to happen on a tablet than on a phone
as for instance no beeps are played when volume is adjusted.

The fix consists in having AudioSystem explicitly call a method on AudioFlinger when a
callback is installed to make sure that an IAudioFlinger binder interface is created
regardless of any other activity in the client process.

Change-Id: I9df34a36825af0b25cd0246dd02edbd712263f41
/frameworks/base/media/java/android/media/AudioService.java
d4b88c8829cdababbf16aaf903ba25a1669310e7 05-Feb-2011 Eric Laurent <elaurent@google.com> Merge "Issue 3395734: fix media server restart detection" into honeycomb
086396a92408b47ee32f7fedaae9af533608ff6d 05-Feb-2011 Eric Laurent <elaurent@google.com> Issue 3395734: fix media server restart detection

Commit 25101b0b in AudioSystem for issue 3395734 broke the mechanism
in AudioService to poll and detect the restarting of media server
process after a crash.

The fix consists in changing the method used to poll AudioSystem and
trigger a callback indicating success when media server is responding
(the method must be on IAudioFlinger and not IAudioService to trigger the callback).

Change-Id: I843c0194de9cbf82c779cabbf2f3cbf8064603c8
/frameworks/base/media/java/android/media/AudioService.java
402f7f29634a9f68e7929be828a927a3e2f5efe9 04-Feb-2011 Eric Laurent <elaurent@google.com> Fix issues 3425035 and 3423785.

- Make sure that STREAM_MUSIC is affected by ringer mode on non voice capable
devices whatever the saved settings say.

- Added a hidden method to AudioManager for VolumePanel to override
the stream selection logic while the panel is showing.

Change-Id: Ib2ff2a7af63decb4e29c45700c41e5058f79d877
/frameworks/base/media/java/android/media/AudioService.java
25101b0b9a84571ead15b26e9f4cd9c4298d7823 02-Feb-2011 Eric Laurent <elaurent@google.com> Fix issue 3371080

Modified default volume control logic in AudioService:
1 IN_CALL volume if in video/audio chat
2 NOTIFICATION if notification is playing or was playing less than 5s ago.
3 MUSIC

Modified silent mode:
- now also affect MUSIC stream type
- entering silent mode when VOL- hard key is pressed once while selected
stream volume is already at 0 (except for VOICE_CALL stream).
- exiting silent mode when pressing VOL+ hard key while in silent mode

Play sound FX (audible selections, keyboard clicks) at a fixed volume.

Modified audio framework:
- isStreamActive() method now implemented in AudioPolicyManagerBase (previously AudioFlinger)
- iStreamActive() now specifies a time window during which the stream is considered
active after it actually stopped.

Change-Id: I7e5a0724099450b9fc90825224180ac97322785f
/frameworks/base/media/java/android/media/AudioService.java
834662d4224ebbb95527cb43eaf9dcea548d7b19 28-Jan-2011 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 3395289 Use MODE_IN_COMMUNICATION to evaluate stream vol changes

When the user is in a phone or VoIP call, the volume keys should
control the STREAM_VOICE_CALL volume. Before MODE_IN_COMMUNICATION
was introduced to cover VoIP use cases, having an active VoIP call
was determined by checking whether there was any track used the
output stream STREAM_VOICE_CALL, which can give false positives.
This CL checks instead against the audio mode to see if
MODE_IN_COMMUNICATION is selected to determine if a VoIP call
is in progress.

This implies that applications that play on STREAM_VOICE_CALL
shouldn't rely on that fact alone to expect the volume keys
to control the STREAM_VOICE_CALL volume, and should instead,
rely on the official mechanism for that:
android.app.Activity.setVolumeControlStream(int)

Change-Id: Ia487951ea1684477aa3d522c9031fad484d8a40d
/frameworks/base/media/java/android/media/AudioService.java
dde68c64fd8e97a592633ec4c09283ec928e5697 24-Jan-2011 Jaikumar Ganesh <jaikumar@google.com> Rename virtual call API to ScoUsingVirtualCall.

This API makes more sense with regard to headset profile.
Bug: 3381532

Change-Id: Ife07d101a3b04bcddb31e7ae86712e1d97a660c5
/frameworks/base/media/java/android/media/AudioService.java
117b7bb5b5a4457711f59bde3dcc83d8f111c524 17-Jan-2011 Eric Laurent <elaurent@google.com> Fix issue 3354692.

The problem is that SoundPool never calls the onLoadComplete() callback
when load() method fails because the file cannot be opened.
AudioService loadSoundEffects() was blocked waiting for a callback
that never came.
In this particular case, this happened on a specific build where sound
effects assets were not included.

The fix consists in waiting for the callback only if at least one sample is
accepted by SoundPool load().

Also moved the initial loading of sound effect samples from the boot completed
broadcast receiver to the audio service message handler to avoid waiting in the
main system server thread.

Change-Id: I902e5988f8b644a81d8e585c52eed1df4ca0ec05
/frameworks/base/media/java/android/media/AudioService.java
a60e212d0dda7d2a748180ce77405f2463c9cf53 29-Dec-2010 Eric Laurent <elaurent@google.com> Fix issue 3261656.

The problem can occur if a sample is started at the same time as the last AudioTrack callback
for a playing sample is called. At this time, allocateChannel() can be called concurrently with moveToFront()
which can cause an entry in mChannels being used by moveToFront() to be erased temporarily by allocateChannel().

The fix consists in making sure that the SoundPool mutex is held whenever play(), stop() or done() are called.

In addition, other potential weaknesses have been removed by making sure that the channel mutex is held while
starting, stopping and processing the AudioTrack call back.

To that purpose, a mechanism similar to the channel restart method is implemented to avoid stopping channels
from the AudioTrack call back but do it from the restart thread instead.

The sound effects SounPool management in AudioService has also been improved to make sure that the samples have
been loaded when a playback request is received and also to immediately release the SoundPool when the effects are
unloaded without waiting for the GC to occur.
The SoundPool.java class was modified to allow the use of a looper attached to the thread in which the sample
loaded listener is running and not to the thread in which the SoundPool is created.

The maximum number of samples that can be loaded in a SoundPool lifetime as been increased from 255 to 65535.

Change-Id: I368a3bdfda4239f807f857c3e97b70f6b31b0af3
/frameworks/base/media/java/android/media/AudioService.java
c7fcba4b7bd3d78e7cfe975a3f8e4dde2f6738b7 06-Jan-2011 Joe Onorato <joeo@google.com> Make the volume keys adjust the media volume by default if the device is not "voice capable."

Change-Id: Ide396f8940a075c0b00b7c983c1769c1cc0f17bf
/frameworks/base/media/java/android/media/AudioService.java
2c61bee2b05a6f4cf06a0048b3c0a81f248a48cd 15-Dec-2010 Eric Laurent <elaurent@google.com> Change audio routing policy for HDMI

HDMI device should have a higher priority than analog dock audio but a lower priority
than wired headsets.
Also modified AudioService so that HDMI is mapped to DEVICE_OUT_AUX_DIGITAL device and not
DEVICE_OUT_DGTL_DOCK_HEADSET as before to enable discrimination between SPDIF going to
digital dock and SPIDF going to HDMI.

Change-Id: I887d0c73479784dd2edaf41ce1a7d8d0bdcbb4bd
/frameworks/base/media/java/android/media/AudioService.java
2ade576148fe33c5ff6098d30ccfbcf28df70e8e 11-Dec-2010 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 3275151 Request and abandon audio focus with audio mode changes

Before the introduction of the MODE_IN_COMMUNICATION audio mode,
"calls" were only made through telephony and the PhoneStateListener
was used to request and abandon audio focus as calls where started
and ended. VoIP applications do not cause phone state events to
be broadcast, and set the audio mode to MODE_IN_COMMUNICATION
directly. This change monitors mode changes to automatically
grab and abandon audio focus.

Change-Id: Ie9a4193e35ba8447764fac66a988959a93c4909f
/frameworks/base/media/java/android/media/AudioService.java
62ef767b15a712bab31cc0d5508a330906f535c2 24-Nov-2010 Eric Laurent <elaurent@google.com> Fix issue 3159946.

AudioService now uses SCO virtual calls instead of voice recognition to
implement startBluetoothSco() method.
Also make sure that a virtual call is not started when SCO audio is active
due to in call audio or voice recognition.

Change-Id: I93ed119afbc57250a4433201156714e35f70fea4
/frameworks/base/media/java/android/media/AudioService.java
8f677d66d9c3ba34c97e69b2bb9e161f129af0ee 15-Nov-2010 Jean-Michel Trivi <jmtrivi@google.com> Add new audio mode for audio communications other than telelphony.

The audio mode MODE_IN_CALL signals the system the device a phone
call is currently underway. There was no way for audio video
chat or VoIP applications to signal a call is underway, but not
using the telephony resources. This change introduces a new mode
to address this. Changes in other parts of the system (java
and native) are required to take this new mode into account.
The generic AudioPolicyManager is updated to not use its phone
state variable directly, but to use two new convenience methods,
isInCall() and isStateInCall(int) instead.

Change-Id: Id744cd26520ea1d1a4795eabe6a1f0c58789af76
/frameworks/base/media/java/android/media/AudioService.java
26e37349831476d3225570af2dfbf1e459374c6b 03-Nov-2010 Praveen Bharathi <pbharathi@motorola.com> frameworks/base: switch audio to hdmi when cable is plugged in

Change-Id: I01c4ee968bc0ffbb6ce75370935571cc1ff6f8c7
Signed-off-by: Iliyan Malchev <malchev@google.com>
/frameworks/base/media/java/android/media/AudioService.java
30d181690e48b26cdfae3b144d23f1e16c75da37 01-Nov-2010 Jaikumar Ganesh <jaikumar@google.com> Add STATE_AUDIO_CONNECTING state.

Why is it needed: SCO audio connections can fail.
Currently no indication is given to clients which are waiting
for SCO connections. This was working fine before because
SCO connections where blocking calls, which was wrong in itself.

Change-Id: Ic449b2db8506a7a5ae6be6c68715f1a7343f9e40
/frameworks/base/media/java/android/media/AudioService.java
21e941bf43362ddc6639a9f2d0828053360f53d7 06-Oct-2010 Praveen Bharathi <pbharathi@motorola.com> Added support for dock headset observer

Change-Id: I06b2e65e3bfa10735e6c7fd3349afa9ae7d45292
Signed-off-by: Praveen Bharathi <pbharathi@motorola.com>
/frameworks/base/media/java/android/media/AudioService.java
5a1e4cf83f5be1b5d79e2643fa791aa269b6a4bc 19-Oct-2010 Jaikumar Ganesh <jaikumar@google.com> Update BT APIs return type from Set to List.

Change-Id: Ia27220dd26cde13007f6938c830517ee7f6968ce
/frameworks/base/media/java/android/media/AudioService.java
82aa7f017daaaeb96c13e6e3491d5037ab471085 28-Sep-2010 Jaikumar Ganesh <jaikumar@google.com> Update code for new BT APIs.

Change-Id: Idf806cba8160e6075e33e26ee9936663b850e96c
/frameworks/base/media/java/android/media/AudioService.java
e73131a68408a0495ba96a4d5a60799ba293c176 14-Jun-2010 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 2684341 Don't steal the media button event from the phone
app is the phone is ringing, even in silent mode.

Use the PhoneStateListener to know whether the phone is ringing,
as the mode is not MODE_RINGTONE when ringing in silent mode.

Change-Id: Iede350cecde0b663d50f9b4a57f9a9ef08066c0d
/frameworks/base/media/java/android/media/AudioService.java
e2dd8c4592762414c2c27e4589be7edc91a5ecae 01-Jul-2010 Eric Laurent <elaurent@google.com> Fix issue 2811538: System server crash when disconnecting BT headset after using SCO off call.

Problem:
When the bluetooth device is removed, the AudioService clears all active SCO connections
and unlinks from the client application's binder interface death.
The problem is that the unlinking is done even if no more connections are active for a given client,
which throws a runtime exception that is not catched causing the system server to crash.

The fix consists in calling unlinkToDeath() in ScoClient.clearCount() only if the number of
active SCO connections for this client is not 0. The NoSuchElementException exception is also
catched when calling unlinkToDeath()

Change-Id: I29a28fcce1a579217cea271956a55778e05d3e37
/frameworks/base/media/java/android/media/AudioService.java
3c652ca5a546e7227a5f4bdbf0f81552b2c91383 22-Jun-2010 Eric Laurent <elaurent@google.com> Fix issue 2301630: Mismatch of state occurs when media server is killed while in-call.

Use setParameters() API to indicate to audio HAL that we are restarting the media server after a crash.
The use made by audio HAL implementation of this indication is platform specific.

Change-Id: I085b174fa1474575da0e4d295921079b6b68efb8
/frameworks/base/media/java/android/media/AudioService.java
740e39be6af3e366a4b82c030b5ea67ab144b42a 02-Jun-2010 Jaikumar Ganesh <jaikumar@google.com> Pass BluetoothDevice to the Bluetooth Headset calls.

This is to support multiple headsets at the same time, atleast
at the framework level.

Change-Id: I91d05c6c2828c9a09d00806d5e79f1e9c9c7cf84
/frameworks/base/media/java/android/media/AudioService.java
392a2bbb52688ebd25768a7784d9edca7f498110 11-May-2010 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 2670395 and 2599698
When the user selects a "Silent" notification sound, the Uri encoded
path is an empty string. Setting this Uri as the data source of the
MediaPlayer used to play notifications caused the completion listener
to not be called, which with the AudioFocus logic causes the Music
app to pause and never resume. The NotificationPlayer modifications
cause the MediaPlayer for the notification to only request audio
focus when the data source is not empty.
The audio focus code in AudioService is defensively synchronized
against a unique lock, and the exception observed in bug 2670395
is explicitely caught in case another edge case wasn't caught by
this fix.
The AudioFocus handling in AudioManager is modified so only the
requestAudioFocus and abandonAudioFocus methods are meant to be
used, as registerAudioFocusListener and unregisterAudioFocusListener
provided no additional functionality over the request/abandon
methods. abandonAudioFocus() also removes the listener from the
map in AudioManager since after abandonning focus, the listener
would no longer be called.

Change-Id: I3b553ee8a8163c25e01117d7e5479dd5fdfa7c6b
/frameworks/base/media/java/android/media/AudioService.java
a847ba4080675d395de725cfac5dfd9d5a993d4e 23-Apr-2010 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 2619062 Music is routed to Phone speaker, though it is
connected to A2DP media profile

When the phone is docked and using the dock A2DP, and the user
connects another A2DP device, make the dock unavailable immediately
before connecting the new A2DP device.

Change-Id: I82d53836fb509ee4ea7cdb68f467dfb946c634f8
/frameworks/base/media/java/android/media/AudioService.java
b4bccb6d8df16a2c5235cead187156bc721cf074 20-Apr-2010 Jean-Michel Trivi <jmtrivi@google.com> Update AudioService to reflect phone state changes with AudioFocus.
Phone calls and rings are treated as a new client, with a dedicated
client ID that identifies it in the audio focus stack. When it is
present in the stack, others clients cannot request audio focus
(request is denied).
Because the phone state is now mostly handled like a new client,
there is no need monitor mode changes and to keep track of
undispatched focus changes, as those will delayed focus gains
will now automatically happen at the end of the call when the
phone client is removed from the focus stack.

Change-Id: I11ff73b015ab93f07040755fd8ee75c8d675e025
/frameworks/base/media/java/android/media/AudioService.java
3891c4cc918e8062abb97c542a8625d556dccc59 20-Apr-2010 Eric Laurent <elaurent@google.com> Fix issue 2602879: camera shutter sound not playing.

The problem occurs if the device is powered down in silent mode. When the device restarts,
AudioService reads current ringer mode from saved settings but does not call setRingerModeInt()
to perform actions required when ringer mode changes.
The volumes of streams affected by ringer mode are actually at 0 because they are also read from settings
but their mute state is not applied correclty. When we later exit from silent mode, the streams
other than STREAM_RING that are affected by ringer mode are not restored as they are not considered
muted. This applies to STREAM_SYSTEM but also to STREAM_NOTIFICATION if its volume is controlled independently
from STREAM_RING.

The fix consists in calling setRingerModeInt() when AudioService starts.

Change-Id: Ica75b9874938dda1bc1b634c3e97db4a650d295c
/frameworks/base/media/java/android/media/AudioService.java
3b5912602bec6ccbe8eef8a576730b1565f0067c 20-Apr-2010 Eric Laurent <elaurent@google.com> Fix issue 2604270 Device auto connects to Car Dock (Media profile) after undocking.

There was a regression introduced by change 4c637b9e34f4c8db69a64ad21a4e2bcfa7485b5f
fixing issue 2578813. As the A2DP device disconnection is notified to the audio policy manager
after a delay, there is a period during which the A2DP device is actually not connected but the
A2DP output is considered present by audio framework. If a playback is started during this period,
The A2DP output requests the activation of the A2DP sink which in turn triggers a reconnection
of the A2DP sink.

The fix consists in suspending the A2DP output immediately when receiving the A2DP disconnection
intent so that any activity on A2DP output is ignored until the output is actually closed by the
audio policy manager.

Change-Id: I16eaace45e12bfc970f50836b46a73b756b493f0
/frameworks/base/media/java/android/media/AudioService.java
758dd527f64f1e827adfe09f0141ab213733ca22 13-Apr-2010 Eric Laurent <elaurent@google.com> Fix issue 2592680: Saved ringer volume forced to 0 when receiving a call in silent mode.

This is a regression introduced by change 5b4e654d0c7de8e4d58d73e73b0d5220f19b68f7 for issue 2472495.
When AudioService changes audio mode, setMode() reapplies current volume for the default active stream
which in this case is STREAM_RING.
Because the new implementation of silent mode actually mutes the ringer stream,
setStreamVolumeInt() now applies the volume change received while in silent mode
to the last audible value and we end up clearing the last audible volume for ringer.

The fix consists in not modifying last audible value when the new value is 0.

Also removed obsolete code in setStreamVolumeInt() since new implementation of setRingerModeInt()
in change 5b4e654d0c7de8e4d58d73e73b0d5220f19b68f7.

Change-Id: I746f3bc1af39a602ce12d130ce592007b2d0ebb6
/frameworks/base/media/java/android/media/AudioService.java
527c3ab51e258dfa15c6240f701693cf914e8e93 13-Apr-2010 Eric Laurent <elaurent@google.com> Fix issue 2589563: Able to set ringer volume to 0 outside of silent mode.

The problem happens only if volume down key is pressed while
already in silent or vibrate mode. In this case, AudioService accepts
changing the last audible index for ringer volume from 1 to 0.
When volume up is pressed, current ringer volume value is restored from 0
instead of 1.

The fix consists in keeping last audible index at 1 once in silent of vibrate
mode even is volume down key is pressed.

Change-Id: Id08edd12ce985c22233124545eba2c3e4b8cdc8e
/frameworks/base/media/java/android/media/AudioService.java
4c637b9e34f4c8db69a64ad21a4e2bcfa7485b5f 13-Apr-2010 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 2578813 Delay pausing music and routing audio for car docks

Moved broadcast of ACTION_AUDIO_BECOMING_NOISY from BluetoothA2dpService
to AudioService.
Broadcast ACTION_AUDIO_BECOMING_NOISY when disconnecting an A2DP
device.
Disconnect from A2DP docks with a delay to handle transient
disconnections.
Cancel delayed A2DP disconnections when connecting to a dock as this
can be a reconnection after a transient disconnection.

Change-Id: I1ee9e99f3ffa20727af38a4c4c8711942894a696
/frameworks/base/media/java/android/media/AudioService.java
bcac496076ef6f439147e7a2be71e8a2b76ddede 12-Apr-2010 Daniel Sandler <dsandler@android.com> Honor the "Never vibrate" setting for incoming calls.

Bug: 2579295
Change-Id: Ia4207492c5dfa2c39d27372c4892b60121b6d9e8
/frameworks/base/media/java/android/media/AudioService.java
2930bb2d47be279dd228ba8c749c1e39e5da8be1 10-Apr-2010 Jean-Michel Trivi <jmtrivi@google.com> Fix monkey bug 2586534 java.util.ConcurrentModificationException
Unlike the other audio focus and media button stack handling
methods, abandonAudioFocus() and unregisterAudioFocusClient() were
not synchronized around their focus stack. This CL corrects this.

Change-Id: I5ada574e4e163fa95da9dad2fefe610b48303320
/frameworks/base/media/java/android/media/AudioService.java
55d1bb3483e17a11d122e68044e552d96ab55ff4 02-Apr-2010 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 2565463 Ensure an object cannot appear twice in the
AudioFocus stack.
Enforce parameter check in AudioManager.requestAudioFocus()
Typo correction in AudioService.unregisterMediaButtonEventReceiver()

Change-Id: Iedd6081a2a096bd7effbaeb9f888a31691201b3b
/frameworks/base/media/java/android/media/AudioService.java
5b4e654d0c7de8e4d58d73e73b0d5220f19b68f7 20-Mar-2010 Eric Laurent <elaurent@google.com> Fix issue 2472495: Phone cannot be set to silent mode via volume keys while Driveabout is taking.

The problem is that AudioService.adjustStreamVolume() only handles the ringer mode change when the
STREAM_RING volume changes from 1 to 0 or 0 to 1. If another stream is soloed, the STREAM_RING stream
volume is forced to 0 and then never transits from 0 to 0 when volume down key is pressed.

The fix consists in considering the saved value instead of current value when ajusting or setting
the volume of a muted stream: only the saved value is adjusted too, leaving the stream muted but updating
the value that will be restored when it will be unmuted.

Also changed implementation of stream volume control by setRingerModeInt() to use stream mute feature
instead of direct volume control.

Change-Id: Id85d76450b36d61a0fe8195eb4bffe63ffbd427c
/frameworks/base/media/java/android/media/AudioService.java
e5e1e870fdb35f5291790e6d178bde7126f6fe35 19-Mar-2010 Jean-Michel Trivi <jmtrivi@google.com> Fix two AudioFocus issues:
- if a focus owner abandons audio focus during a call, the next
focus owner in the stack was never notified
- if a focus owner requests the focus while alread owning it, and
the type of focus request changes, the previous focus owner was
not notified that the type of focus loss had changed.

Change-Id: Iee6c6e17bcdd3c225a4b600f40ba434294870f17
/frameworks/base/media/java/android/media/AudioService.java
078fd47e91d495175927d1a4a8b9aad039a7ba4e 19-Mar-2010 Jean-Michel Trivi <jmtrivi@google.com> Support focus requests where ducking of the loser of audio focus
is acceptable for the new audio focus owner.

Change-Id: I965483f12eeb717115a8f6992d8f1ab7fafa4e45
/frameworks/base/media/java/android/media/AudioService.java
3def1eec2baed0b8845ec32c871e249dc533a9d9 18-Mar-2010 Eric Laurent <elaurent@google.com> Issue 2416481: Support Voice Dialer over BT SCO.

Added public methods to AudioManager API so that unbundled applications can use bluetooth
SCO audio when the phone is not incall.
Without this change, the only way to activate and use bluetooth SCO is via the BluetoothHeadset API
which is not public yet.

Change-Id: Ia1680f219ea1d0943092d475d5be7d6638983ebb
/frameworks/base/media/java/android/media/AudioService.java
d327f21626217aa3c9c0cdb7a84a742c531e59a3 17-Mar-2010 Jean-Michel Trivi <jmtrivi@google.com> Implementation of the policing of transport control key press
events among multiple applications competing for the remote control
focus.
AudioManager defines a new API for applications to use in order to
register their BroadcastReceiver for the media button as the one
to receive the corresponding intent, but all applications at the
same time (in an ordered broadcast).
AudioService handles a stack of remote control focus owners. It
traps ACTION_MEDIA_BUTTON intents and sends a new intent to the
remote control focus owner.

Change-Id: I3c109221ecfb160cbb1ec0e40a71b241aad73812
/frameworks/base/media/java/android/media/AudioService.java
758559e6b7e310cf46cc269437f44decd58d68d6 09-Mar-2010 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 2329540
Part 1 of the fix: when the user doesn't elect to use the car dock
for music and media, the APM was not aware of the device being
docked.
This is fixed by dissociating the notification for the APM of
the docking to the dock from the sink state change of the A2DP
device.
Also missing was forcing the volumes to be reevaluated whenever
the device is docked or undocked, as volumes for docks may
differ, even when the same output device is being used.

Change-Id: If5314e27821a71adbd6df6fdf887c45208241d96
/frameworks/base/media/java/android/media/AudioService.java
31951ca52aa007891b0be975318199e207c70e02 03-Mar-2010 Eric Laurent <elaurent@google.com> Fix issue 2456968: Alarm rings in "silent mode and when Alarm in silent mode is turned off".

The problem is that even if silent mode is active, changing the alarm volume will change current
alarm stream volume. This is true for other stream types affected by ringer mode (ring, notification...) but
the UI design is such that it is not possible to change these volumes while in silent mode.

The fix consists in modifying AudioService.setStreamVolumeInt() so that when a stream is affected by ringer mode
and we are in silent mode, only the saved volume value is modified, current value remaining to unchanged (0).
/frameworks/base/media/java/android/media/AudioService.java
d5176cfe6eae954e9cef1e2ec17859a5089e1330 28-Jan-2010 Jean-Michel Trivi <jmtrivi@google.com> First implementation of the audio focus management as an extension
of AudioManager and AudioService.
/frameworks/base/media/java/android/media/AudioService.java
6329bf7b1e2217c6c9477bd57349a1edade18417 26-Feb-2010 Daniel Sandler <dsandler@google.com> New vibrate/silent mode behavior.

In earlier versions of Android, "vibrate mode" (in which
only alarms and media produce sound, but notifications may
operate the vibe motor) was only accessible by adjusting the
ringer volume (via the device's volume rocker) down until
the "vibrate" icon appeared (between the lowest ring volume
and silent mode).

Many users prefer that "silent mode" always allow vibration.
Others prefer Android's historical behavior, in which silent
mode stops the vibes as well.

To accommodate these two distinct usage patterns, we now
allow the user to decide whether vibration is allowed in
"silent mode", a user interface abstraction that now spans
both AudioManager.RINGER_MODE_VIBRATE and
AudioManager.RINGER_MODE_SILENT.

To minimize API impact (and therefore maximize backward
compatibility), RINGER_MODE_VIBRATE and RINGER_MODE_SILENT
remain unchanged. What has changed is what happens when the
user activates silent mode, either via Settings,
GlobalActions (longpress on power), volume rocker, or the
keyguard tab. In essence, there is now only one "silent"
position in these controls, and whether RINGER_MODE_VIBRATE
or RINGER_MODE_SILENT is actually set on the AudioService is
determined by a new one-off setting
(System.VIBRATE_IN_SILENT). This new setting isn't meant to
be a long-term API, however: in the future we hope to
replace and extend this design with a much more
sophisticated set of systemwide feedback profiles. ETA TBD.

Related changes:
* I09ad7d69 (GlobalActions and keyguard)
* I22ba7bcf (Settings app)

Bug: 2457183
Change-Id: I14cf91b0910261ffdfd1bf302423f41ec747d057
/frameworks/base/media/java/android/media/AudioService.java
9ce379aef155e0c21b5d82d8dc713c62792e4f30 16-Feb-2010 Eric Laurent <elaurent@google.com> Fix issue 2440226: Car dock volume synchronization.

AudioService now sends intent AudioManager.VOLUME_CHANGED_ACTION when the volume is changed
on any stream type (previously the intent was sent only for STREAM_BLUETOOTH_SCO stream).
A new extra for previous volume value is added to the intent.
/frameworks/base/media/java/android/media/AudioService.java
23f25cda0c73f8eb878844dea32fb0bd419edca2 25-Jan-2010 Eric Laurent <elaurent@google.com> Fix issue 2378022: AudioService should direct volume control to STREAM_VOICE_CALL stream when STREAM_VOICE_CALL stream is active.

Modified AudioService.getActiveStreamType() so that STREAM_VOICE_CALL is selected when a track using this stream
type is playing.

Chanded isMusicActive() for a more generic isStreamActive(stream) method in AudioSystem, IAudioFlinger and AudioFlinger.
/frameworks/base/media/java/android/media/AudioService.java
9272b4b4a44fe1f33e3030810618194f817caaec 24-Jan-2010 Eric Laurent <elaurent@google.com> Fix issue 2349345: Media sound output stuck on earpiece rather than speaker.

This change fixes a problem occuring when an application (for instance a VoIP application)
changes the audio mode to MODE_IN_CALL and crashes. In this case, the audio routing policy
remains as if we were in call until the audio mode is changed back to MODE_NORMAL, for instance when a new call
made or received and terminated.

The fix consists in registering a death receipient to the binder that made the setMode() request and resetting the audio
mode in case of client process crash.
/frameworks/base/media/java/android/media/AudioService.java
84b42b836845a921c853a3f8aa93227e1177f61d 09-Jan-2010 Eric Laurent <elaurent@google.com> am d31d7397: am 663ec308: Fix issue 2361949: A2DP suspend parameters set wrongly.

Merge commit 'd31d7397ba26dcd913e96d06f0a8fd593780d629'

* commit 'd31d7397ba26dcd913e96d06f0a8fd593780d629':
Fix issue 2361949: A2DP suspend parameters set wrongly.
663ec308801a34de82db9ab993f0e906da690f89 08-Jan-2010 Eric Laurent <elaurent@google.com> Fix issue 2361949: A2DP suspend parameters set wrongly.

Move reset of A2DP suspend state from handleSinkStateChange() in BluetoothA2dpService to
BluetoothA2dp.ACTION_SINK_STATE_CHANGED intent receiver in AudioService.
Previous implementation could cause a false reset of suspend state if a new sink attempted to
connect while A2DP was suspended.
New implementation only resets A2DP suspend state when a new sink is actually connected.
/frameworks/base/media/java/android/media/AudioService.java
a0b517609dfd8436a98bdebb31466f19ffec6cb5 28-Dec-2009 Eric Laurent <elaurent@google.com> am 68e9014e: am 484d2888: Fix issue 2299360: Change in in-call volume affects the Bluetooth in-call volume and vice versa.

Merge commit '68e9014e47f7350b3889e1704dde809b2a926968'

* commit '68e9014e47f7350b3889e1704dde809b2a926968':
Fix issue 2299360: Change in in-call volume affects the Bluetooth in-call volume and vice versa.
cf4fc6263c1c24ffa91a65a75edb126143a2617e 23-Dec-2009 Eric Laurent <elaurent@google.com> am f31f365a: am eb5ffc23: Merge change Id8e98194 into eclair

Merge commit 'f31f365a7708c931e955670bc6213fdc8f91a87a'

* commit 'f31f365a7708c931e955670bc6213fdc8f91a87a':
Fix issues 2333450 and 2333559:
eb14a783be073b5fd6e8c8c9bc87d2d1919f2c9e 17-Dec-2009 Eric Laurent <elaurent@google.com> Fix issues 2333450 and 2333559:

Add new config values to AudioSystem::FOR_DOCK force usage to differenciate car and desk docks.
Use a receiver for the sticky Intent.ACTION_DOCK_EVENT in AudioService to detect the type
of dock and select force usage accordingly.
/frameworks/base/media/java/android/media/AudioService.java
484d2888680e18e6ad8c3fcc51e3b70a705a096e 08-Dec-2009 Eric Laurent <elaurent@google.com> Fix issue 2299360: Change in in-call volume affects the Bluetooth in-call volume and vice versa.

Add a separate system settings entry for bluetooth SCO volume.
/frameworks/base/media/java/android/media/AudioService.java
1c633fc89bae9bf0af6fe643ac7ad2e744f27bed 09-Dec-2009 Dianne Hackborn <hackbod@google.com> Implement API to have new broadcasts replace existing broadcasts.

Use this in various places where it should serve no purpose to deliver
both broadcasts. This is intended to reduce somewhat the flurry of
broadcasts that we churn through during boot.
/frameworks/base/media/java/android/media/AudioService.java
6154412ee8e07e9cde129cccb944dd7ed9dcef53 08-Dec-2009 Jean-Michel Trivi <jmtrivi@google.com> Partially fix bug 2111240 Detect docking / undocking event by reporting
to the AudioPolicyManager a new forced usage AudioSystem::FOR_DOCK
which can take the FORCE_NONE, FORCE_BT_DOCK or FORCE_WIRED_ACCESSORY
values. This CL is complemented by an update of the APM to take into
account the FOR_DOCK usage.
/frameworks/base/media/java/android/media/AudioService.java
923d7d721d37f6ba5148e7d79d61a4fa48e79df2 12-Nov-2009 Eric Laurent <elaurent@google.com> Fix issue 2242614: Wired headset not recognized: bogus "state" in ACTION_HEADSET_PLUG broadcast.

The headset state indicated by HeadsetObserver in the broadcast intent ACTION_HEADSET_PLUG was not 0 or 1 as specified in the java doc but contained a bit field indicating the type of headset connected.

Modified HeadsetObserver to broacast a state conforming to java doc.
Added an extra to intent ACTION_HEADSET_PLUG to indicate if headset has a microphone or not.
Removed handling of non standard headset indications from HeadsetObserver.
Removed platform specific devices from output devices defined in AudioSystem.
Modified AudioService to use new ACTION_HEADSET_PLUG intent extra instead of bitfield in state.
/frameworks/base/media/java/android/media/AudioService.java
11a74a75653197a3d31fe91590cd8312f5270c44 28-Oct-2009 Jean-Michel Trivi <jmtrivi@google.com> Fix bug 2201417. Whenever the System setting that indicates
whether the notifcation stream uses the ring volume changes, the
table of stream volume aliases in AudioService is updated. But the
name of the alias stored in VolumeStreamState.mVolumeIndexSettingName
was not updated whenever the NOTIFICATIONS_USE_RING_VOLUME setting
was updated. This caused the wrong volume setting to be persisted.
This change ensures the setting name is updated whenever the volume
alias is, and persists the notification volume change right away
(instead of after a delay), so that registered observers are notified
right away. The notification seekbar in the sound settings is an
example of such an observer.
/frameworks/base/media/java/android/media/AudioService.java
89e74ba1419732dd5c7f939e48d4aa7989fd3a51 01-Oct-2009 Eric Laurent <elaurent@google.com> Fix Issue 2158631: AudioService: volume control sometimes not restored after media server process crash.

The problem comes from the fact that the AudioSystem callback indicating that the media server is active again is ignored if it is received before the delayed message indicating media server death. This happens if another application or service running in the system server process makes a request to the AudioSystem in the interval between the death of the media server and the reception of the corresponding delayed message.

The fix consists in resetting mMediaServerOk flags immediately when the death callback is received and not when the delayed message is received.
/frameworks/base/media/java/android/media/AudioService.java
a2ef57dba9ac77d8eccacd646b2b8a8d99fe9d8b 28-Sep-2009 Eric Laurent <elaurent@google.com> Fix issue 2141503: Keyclick sound doesn't honor volume settings.

Use music stream volume minus 3 dB for sound effects if volume is not explicitly requested by application.
/frameworks/base/media/java/android/media/AudioService.java
005b228cdfb369d9b3b325884c0337ba5968bf8c 10-Sep-2009 Nick Pelly <npelly@google.com> API_CHANGE: Cleanup, javadoc and unhide more Bluetooth API.

This is a large batch, and covers:

-- Bluetooth Device Discovery --
BluetoothAdapter.ACTION_DISCOVERY_STARTED
BluetoothAdapter.ACTION_DISCOVERY_FINISHED
BluetoothAdapter.startDiscovery()
BluetoothAdapter.cancelDiscovery()
BluetoothAdapter.isDiscovering()

-- Bluetooth bonding (pairing) --
BluetoothAdapter.getBondedDevices()
BluetoothDevice.ACTION_BOND_STATE_CHANGED
BluetoothDevice.EXTRA_BOND_STATE
BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE
BluetoothDevice.BOND_NONE
BluetoothDevice.BOND_BONDING
BluetoothDevice.BOND_BONDED
BluetoothDevice.getBondState()
BluetoothDevice.createBond()
BluetoothDevice.cancelBondProcess()
BluetoothDevice.removeBond()

-- BluetoothClass --
BluetoothDevice.ACTION_CLASS_CHANGED
BluetoothDevice.EXTRA_CLASS
BluetoothDevice.getBluetoothClass()
BluetoothClass.Service.*
BluetoothClass.Device.Major.*
BluetoothClass.Device.*
BluetoothClass.getDeviceClass()
BluetoothClass.getMajorDeviceClass()
BluetoothClass.hasService()

-- Misc BluetoothDevice --
BluetoothDevice.ACTION_ACL_CONNECTED
BluetoothDevice.ACTION_ACL_DISCONNECTED_REQUESTED
BluetoothDevice.ACTION_ACL_DISCONNECTED
BluetoothDevice.ACTION_DISCOVERED
BluetoothDevice.ACTION_NAME_CHANGED
BluetoothDevice.EXTRA_DEVICE
BluetoothDevice.EXTRA_NAME
BluetoothDevice.EXTRA_RSSI

-- Misc BluetoothAdapter --
BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED
BluetoothAdapter.EXTRA_LOCAL_NAME
BluetoothAdapter.checkBluetoothAddress()

I deprecated BluetoothIntent and moved each intent into the class it relates
to.

Change-Id: I877b1280428ab46278b2bc25668bb44cda22dc36
/frameworks/base/media/java/android/media/AudioService.java
dc1d17a1dbfc2ae01c20012133a836b62f5b6930 10-Sep-2009 Eric Laurent <elaurent@google.com> Fix issue android.permission.cts.NoAudioPermissionTest:testRouting is failing.

Add audio permission checks in setSpeakerphoneOn() and setBluetoothScoOn() methods.
/frameworks/base/media/java/android/media/AudioService.java
78333dd750c7353e47163407a662ef39a3c6b24a 27-Aug-2009 Jaikumar Ganesh <jaikumar@google.com> Set Routing to A2DP only when state is Connected.

We were setting the routing to A2DP when the state was Connecting too.
This was incorrect and can cause problems. One such problem was when
handling an incoming connection we set the routing to A2DP before
authorization. And even if authorization succeeds we get out sync with
AVDTP command state.
/frameworks/base/media/java/android/media/AudioService.java
6ee9952bc20be72b9419cb653c9e2e833889a3d3 25-Aug-2009 Eric Laurent <elaurent@google.com> Fix issue 2076322: AudioService, too many stream volume steps.

MAX_STREAM_VOLUME[] now contains the maximum valid index instead of the number of indexes for all stream types.
/frameworks/base/media/java/android/media/AudioService.java
a56d1c72190462aa9e377906583eceb58e0efcdd 19-Aug-2009 Nick Pelly <npelly@google.com> Fix AudioService on HFP power off due to new Bluetooth API.

HEADSET_STATE_CHANGED_ACTION contains a null BluetoothDevice when the HFP
disconnects.
/frameworks/base/media/java/android/media/AudioService.java
bd022f423a33f0794bb53e5b0720da2d67e4631c 15-Aug-2009 Nick Pelly <npelly@google.com> Bluetooth: API change.

Split BluetoothDevice into BluetoothDevice and BluetoothAdapter.

BluetoothAdapter: Represents the local BT adapter. Operations on the local
adapter (start a scan, etc).
BluetoothDevice: Represents a remote BT device. Operations on remote devices
(pair, connect, etc).

IBluetoothDevice.aidl -> Bluetooth.aidl
BluetoothDeviceService.java -> BluetoothDeviceService.java

TODO:
Javadoc
/frameworks/base/media/java/android/media/AudioService.java
5982013cfc8274ff0bafaba83c676b3a8890cba9 14-Aug-2009 Jared Suttles <jared.suttles@motorola.com> Change the number of volume steps from 6 to 7 per Verizon Requirements

Submitted on behalf of Helen Tran <Helen.Tran@motorola.com>
Signed-off-by: Jared Suttles <jared.suttles@motorola.com>
/frameworks/base/media/java/android/media/AudioService.java
d5603c126acdd94d9f7400bb1d04188020a425b4 06-Aug-2009 Eric Laurent <elaurent@google.com> AudioService now differentiates BT headsets and car kits.

The BT headset detection now makes the difference between car kits and headsets, which can be used by audio policy manager.
The headset connection is also detected earlier, that is when the headset is connected and not when the SCO socket is connected as it was the case before. This allows the audio policy manager to suspend A2DP output while ringing if a SCO headset is connected.
/frameworks/base/media/java/android/media/AudioService.java
c42ac9d4d03f62c3a1ba197a28a81fda44bd8b7f 29-Jul-2009 Eric Laurent <elaurent@google.com> Fix issue 2019031: Volume changes have no effect.

Send initStreamVolume() for each stream when media server restarts.
Also added restoring of phone state, device connection state and forced device for communications.
/frameworks/base/media/java/android/media/AudioService.java
d25ae67ca8f003ada2881154514523d8614d4b7e 27-Jul-2009 Eric Laurent <elaurent@google.com> Fix issue 2004738: Settings Backup Agent consistently throws ArrayIndexOutOfBoundsException during restore.

Use stream alias when accessing VOLUME_SETTINGS array.
/frameworks/base/media/java/android/media/AudioService.java
a553c25b33c99b345cf1c8688f8df0ed8df14e5a 17-Jul-2009 Eric Laurent <elaurent@google.com> Fix issue 1795088 Improve audio routing code

Initial commit for review.
Integrated comments after patch set 1 review.
Fixed lockup in AudioFlinger::ThreadBase::exit()
Fixed lockup when playing tone with AudioPlocyService startTone()
/frameworks/base/media/java/android/media/AudioService.java
fd6e4820c6ee91c9c232a7598c1e45c002b868e7 17-Jul-2009 Eric Laurent <elaurent@google.com> Fix issue 1985479 lots of backup NPEs.

Check that stream type is not STREAM_BLUETOOTH_SCO before writting to settings.
/frameworks/base/media/java/android/media/AudioService.java
4050c93601b3c3609b21cc1e18a29b64747e7fa9 08-Jul-2009 Eric Laurent <elaurent@google.com> Fix issue 1967295: Add a method to request reloading of audio settings by AudioService.
/frameworks/base/media/java/android/media/AudioService.java
d1f362fe144e6cbcb759fa9086a80adbfe9c7589 16-Jun-2009 Mike Lockwood <lockwood@android.com> AudioService: Fix routing problem recently introduced in setRouting().

Do not disable a route unless routes is zero, to avoid accidentally disabling
if the same route is enabled twice in a row.

Signed-off-by: Mike Lockwood <lockwood@android.com>
/frameworks/base/media/java/android/media/AudioService.java
9bcf401d13d47416043a704430388abd59aef7cd 12-Jun-2009 Eric Laurent <elaurent@google.com> Fix issue #899198 MODE_RINGER_STREAMS_AFFECTED does not restore volumes correctly

The problem is that setRingerModeInt() does not handle streams not affected by ringer mode: when enabling "Alarm in silent mode" while in silent mode, setRingerModeInt is called after alarm streamis removed from ringer mode affected streams, and nothing is done.

The fix constists in also processing streams that are not affected by ringer mode and to restore last audible volume for them. It does not arm reapplying the volume for streams the are never affected by ringer mode as we don't do this very often.

The other problem noted in the bug report (ringer volume always restored to non zero value when exiting silent mode even if set to zero before) is also fixed: a new parameter is added to setIndex() and setStreamVolumeInt() to explicitely request to store the volume index as last audible instead of doing it automatically if index > 0.
/frameworks/base/media/java/android/media/AudioService.java
b9c9d260f21b321527c4622a123af9767630d94d 06-May-2009 Eric Laurent <elaurent@google.com> fix issue 1713090: After a Bluetooth call, MusicPlayer starts playing on speaker rather than wired external audio.

Temporary fix until audio routing is refactored in Eclair release:
- centralized and synchronized all audio routing control in AudioService.setRouting()
- deprecated AudioManager.setRouting() and AudioManager.getRouting() methods
/frameworks/base/media/java/android/media/AudioService.java
1a9f7399bb32c81ad5cc8c9d74ab3065b4a150ac 25-Mar-2009 Niko Catania <> Automated import from //branches/donutburger/...@140800,140800
/frameworks/base/media/java/android/media/AudioService.java
b109615ebebd6f3b9ae789412279f576c3ace46b 25-Mar-2009 Jason Parekh <> Automated import from //branches/donutburger/...@140507,140507
/frameworks/base/media/java/android/media/AudioService.java
9066cfe9886ac131c34d59ed0e2d287b0e3c0087 04-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@135843
/frameworks/base/media/java/android/media/AudioService.java
d83a98f4ce9cfa908f5c54bbd70f03eec07e7553 04-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@135843
/frameworks/base/media/java/android/media/AudioService.java
3001a035439d8134a7d70d796376d1dfbff3cdcd 19-Feb-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake/...@132276
/frameworks/base/media/java/android/media/AudioService.java
da996f390e17e16f2dfa60e972e7ebc4f868f37e 13-Feb-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake/...@131421
/frameworks/base/media/java/android/media/AudioService.java
d24b8183b93e781080b2c16c487e60d51c12da31 11-Feb-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake/...@130745
/frameworks/base/media/java/android/media/AudioService.java
f013e1afd1e68af5e3b868c26a653bbfb39538f8 18-Dec-2008 The Android Open Source Project <initial-contribution@android.com> Code drop from //branches/cupcake/...@124589
/frameworks/base/media/java/android/media/AudioService.java
54b6cfa9a9e5b861a9930af873580d6dc20f773c 21-Oct-2008 The Android Open Source Project <initial-contribution@android.com> Initial Contribution
/frameworks/base/media/java/android/media/AudioService.java