Commit Graph

124 Commits

Author SHA1 Message Date
Jean-Michel Trivi
c3c4babf84 Opt-in mechanism for RemoteControlClient position anti-drift check
RemoteControlClient has an interface for the framework to query
 the playback position. This mechanism is used to detect
 when the estimated position drifts from the real position by
 having the framework regularly poll (every 15s when playing at
 1x) this interface and compare against the estimation.
But this mechanism:
 - should only be used when IRemoteControlDisplay implementation
  care about position display
 - should not be used by default because the implementation of
  the position query interface might involve network traffic
  in some remote media player implementation for instance.

This CL implements an opt-in mechanism to be used by
 implementators of IRemoteControlDisplay, to request the
 anti-drift mechanism to be turned on.

bug 8120740

Change-Id: I1baa3e515546ac41e0ac9c3a41bfa3147ecf3d7f
2013-04-22 14:15:34 -07:00
Eric Laurent
c18c9138ce AudioService: SCO audio backward compatibility
After commit 25fc29b3, AudioManager.startBluetoothSco()
does not use virtual voice call mode anymore when starting the
SCO audio connection to the headset.
To help backward compatibility, this change makes that virtual voice call
is used if the request comes from an application targeting a SDK version
before JB MR2. For applications targeted to JB MR2 and above a raw SCO
audio connection is established.

Bug 8157702

Change-Id: If1ded2fd99b7ed76d2435d95ee03659e78a7882a
2013-04-17 17:19:56 -07:00
Dianne Hackborn
79f7ec70eb Have audio service clean up new receivers in crashing processes.
The new media button receiver with only a pending intent (no
component name) could be left hanging if the process that
registered it went away.  These semantically need to be tied
to the calling process's lifetime; we now clean them up when
the calling process goes away.

Also added some additional cleanup of media button receivers
when packages change (updated, cleared).

And on top of that, a new "media" command for doing media
things.  Currently lets you send media keys and monitor
remote display data.

Oh and finally added a new BaseCommand base class for
implementing these command line utilities.

Change-Id: Iba1d56f10bab1eec4a94a7bb1d1c2ae614c8bcf5
2013-04-08 13:08:37 -07:00
Jean-Michel Trivi
6a5702041f Merge "RemoteControlClient receives playback position change requests" into jb-mr2-dev 2013-04-03 21:11:12 +00:00
Jean-Michel Trivi
3261b537c5 RemoteControlClient receives playback position change requests
RemoteControlClient defines two listener interfaces for playback
  position, one to let the framework query the current playback
  position, the other to request playback to seek to a given
  position.

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

Bug 8120740

Change-Id: I1a5a969da4d0f8c9ad27f691919dd08f8653982b
2013-04-01 18:14:30 -07:00
Jean-Michel Trivi
b839b83c73 Clean up role of component name in media button event receiver
A public API was added to AudioManager to register a media button
 event receiver whithout having to supply a ComponentName.
This CL updates the comments that specified that the now optional
 ComponentName parameter can be null, and never persist the button
 event receiver is there is no ComponentName to persist.
Also unregistering the media button receiver makes no use of
 the ComponentName anymore.

Change-Id: Idcfed1e2a85feb6fa178ca7797427f238705957c
2013-03-30 14:17:45 -07:00
Dianne Hackborn
961cae9254 New media button API.
This allows sending media buttons to any PendingIntent,
so they can be captured with a registered receiver.

Also add some new ViewTreeObserver APIs; this is all for
a new support library API to watch media buttons while an
app has input focus.

Change-Id: I3c51cef59460662b008c9a2cc87d6a6383c21855
2013-03-22 14:49:28 -07:00
Jean-Michel Trivi
4a57005561 Support multiple IRemoteControlDisplay
Modify RemoteControlClient and AudioService to support multiple
 simulataneous IRemoteControlDisplay interfaces active at the
 same time.

Change-Id: I9f200a488afdd62a5e6957e64624d745e0f28149
2013-03-08 14:22:42 -08:00
John Spurlock
aac753dcf8 DO NOT MERGE - Small documentation fix for AudioManager.java
Correct typo + copy-paste description issue.

Cherry-pick of CL Idce7cfeb7255d96aef91efc40d19f077dde3e9a5 from
master.

Change-Id: I1b6f378d58eafdd4a265672a12189273b41f72d6
2013-02-26 14:18:08 -05:00
Jean-Michel Trivi
679d5046f2 Add support for querying whether the music stream is active remotely
Bug 7485803

Change-Id: I554b44bd35b017fa4030a0d89779066c96594f2b
2013-02-11 10:15:47 -08:00
Jean-Michel Trivi
d677054ca6 Don't play notifications during speech recognition
Add support for querying AudioManager to know whether speech
 recognition is currently underway.

Don't play a notification if speech recognition is underway.

Bug 7314859

Change-Id: I1bd013a3168cfe1a6b6dcfd28565e1c3c512eb6a
2012-10-10 12:03:41 -07:00
Glenn Kasten
c6c4365ddb Implement android.media.AudioManager.getProperty()
Bug: 6635041
Change-Id: I0e7d53b99559cdc89f2f107f23048e4b1a8dd383
2012-09-25 17:01:40 -07:00
Eric Laurent
4bbcc65497 Display a fixed volume silder when docked.
Align UI indication to volume policy when docked: the music volume
cannot be adjusted when docked or connected to HDMI. Display
a disabled slider at max volume in this case to be consistent.

Bug 4335692.

Change-Id: I6f8db143b0e2ecf54e4bdacd88afdeb661a98a18
2012-09-25 10:28:05 -07:00
Glenn Kasten
62796aac59 Expose android.media.AudioManager.getProperty()
Also fix minor documentation errors.

Bug: 6635041
Change-Id: I6bbbf1b7c5ab705ac374436ea0c098cb3c27fd4a
2012-09-20 12:28:20 -07:00
Glenn Kasten
228c9847a3 New API for querying audio properties
Bug: 6635041
Change-Id: I66e87c75af7c84cdb23cb25a958e79bba8e53baa
2012-09-17 08:54:11 -07:00
Jean-Michel Trivi
2ac2afeac9 Add support for controlling remote submix audio routing
Add method in AudioManager to control remote submix through
  AudioService.
AudioService controls remote submxi: enabling/disabling
 remote submix will:
 - make the sink audio device available/unavailable
 - make the audio source available/unavailable
 - force/unforce media streams to be routed to WFD

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

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

Change-Id: I557aa687239f9acfe33a609f05876c67fa7eb967
2012-06-18 18:37:17 -07:00
Eric Laurent
2c0044410e am 9686f24c: am c4f4b0f0: Merge "AudioManager: back to old setBluetoothA2dpOn()" into jb-dev
* commit '9686f24ce3d13446393a468fb3f52283bf2bc80d':
  AudioManager: back to old setBluetoothA2dpOn()
2012-06-18 10:49:12 -07:00
Eric Laurent
242b33870b AudioManager: back to old setBluetoothA2dpOn()
Come back to old versions of setBluetoothA2dpOn() and isBluetoothA2dpOn().

MediaRouter will call methods on IAudioService directly.

Change-Id: I18f0a3106bad78715ed11a6b7b4ec1d656cdae41
2012-06-15 11:48:50 -07:00
Eric Laurent
846890957d am c383b407: am cee7203f: Merge "Send device connection intents from AudioService" into jb-dev
* commit 'c383b407ad24474b87de68f93ea95de495f6d2c1':
  Send device connection intents from AudioService
2012-05-31 08:29:29 -07:00
Eric Laurent
b1fbaaccb6 Send device connection intents from AudioService
AudioService is currently notified of wired headset and A2DP
sink connection states via broadcast intents from WiredAccessoryObserver
and BluetoothA2dpService. This is a problem as there is no guaranty that
AudioService can take actions upon the change before other apps are notified.
For instance, the Play On feature requires the UI to be refreshed when a device
is inserted/removed and we must guaranty that the UI component can read
new A2DP enable state from AudioManager after it receives a device connection state
change intent.

- Added hidden methods to AudioManager so that WiredAccessoryObserver
and BluetoothA2dpService can notify AudioService of device connection directly.
- The wired accessories connection intents are now sent by AudioService.
- The A2DP state change intent is delayed by BluetoothA2DPService when
ACTION_AUDIO_BECOMING_NOISY is sent by AudioService
- ACTION_AUDIO_BECOMING_NOISY intent is not sent when disconnecting A2DP
while a wired headset is present and vice versa.

Bug 6485897.

Change-Id: Ie160b3ee5f451132065530772b868593c90afd94
2012-05-30 14:44:43 -07:00
Christopher Tate
c0ed6efe5f am 115284bc: Merge "Support volume-changed sounds on master-volume-only configs" into ics-aah
* commit '115284bc124ce2874f32ad36956f475959513388':
  Support volume-changed sounds on master-volume-only configs
2012-05-25 11:57:35 -07:00
Christopher Tate
c4b78d206f Support volume-changed sounds on master-volume-only configs
Some products manipulate only the master volume, and the existing
code does not play volume-change tones when the master volume
is adjusted.  This CL includes some config-driven behavior that
will play those tones (via the system stream) if desired.

Bug 6498986

Change-Id: I2415773325d0a0039efc67897bc371b1f2e18063
2012-05-24 17:30:39 -07:00
Eric Laurent
aa5481214f am dcc752a8: am 90fb2dd6: Merge "AudioManager: restore setBluetoothA2dpOn() method" into jb-dev
* commit 'dcc752a8984361ba23da00bf2adeec4161b67af2':
  AudioManager: restore setBluetoothA2dpOn() method
2012-05-24 11:47:48 -07:00
Eric Laurent
7847211fb4 AudioManager: restore setBluetoothA2dpOn() method
Remove deprecation on setBluetoothA2dpOn() method so that applications
can override the default audio policy which is to use A2DP
for media whenever connected.

The request is not persistent and the default policy is restored when a
new A2DP i ro wired headset connection occurs.

Bug 6485897.

Change-Id: I2a4b6b6bdba55f7b133e64f86d27c03eb86acfa4
2012-05-22 16:06:21 -07:00
Jean-Michel Trivi
eafa73e4dc am 1644f0d9: am 0a95ce9f: Merge "Handle media button events during phone calls and when ringing" into jb-dev
* commit '1644f0d9ee72cf37f0b92a7b5ef44bfac1421bab':
  Handle media button events during phone calls and when ringing
2012-05-21 12:40:38 -07:00
Jean-Michel Trivi
722b808662 Handle media button events during phone calls and when ringing
Add functionality in AudioManager/AudioService to register a
 media button receiver for telephony that, when registered, gets
 priority for media button key events during a phone call or
 when ringing.

Bug 6484717

Change-Id: I0835fc02cb24d06ca59af5a32c3ba0ae93e54442
2012-05-17 10:38:36 -07:00
Christopher Tate
f131611d03 resolved conflicts for merge of b89ce434 to master
Change-Id: Ida7ef25adc2f4b9f22d8662c9f0e8a1ec9df0d55
2012-05-03 18:18:34 -07:00
Christopher Tate
b89ce43499 Add streamlined config-based path for no volume key sounds
This lets us avoid a Binder roundtrip to the system process during
volume changes.  Previously volume change would be staged at key-down,
then applied at key up in tandem with playback of the sonic feedback
about volume key presses.  The reason for this two-stage handling was
to defer playback of the sound [at the target volume] while the volume
key was being held for repeat.

On some devices volume is always sent as key down/up pairs rather than
down-repeat-up sequences. On these devices it is more efficient to
apply the new volume immediately during down handling, and have the
up handling be a no-op.  This CL adds a configuration resource item
selecting this new fast path.

Bug 6433943

Change-Id: Icffa56e958243b841d514e2fe4609ba3a7b20f14
2012-05-03 15:41:34 -07:00
Eric Laurent
cd1cd73bae AudioManager: deprecate vibrate settings
Deprecate methods, intent and constants related to vibrate
settings management: getVibrateSetting(), setVibrateSetting(),
shouldVibrate() ...

According to new vibrate/notification policy, applications should
maintain their own vibrate settings.

Issue 6036529.

Change-Id: I99bcef2c5f602131f1d9b0222f7fb39f3bbef823
2012-05-01 16:26:04 -07:00
Jeff Sharkey
098d580cc2 Migrate ringtone playback to SystemUI.
Introduce IRingtonePlayer, which handles playback for both Ringtone
objects and Notifications. SystemUI now hosts this player, which it
registers with AudioService. It also keeps MediaPlayer instances
warm, and cleans them up after stop() or Binder death.

Move both Ringtone and NotificationManagerService to play back audio
through this new interface.

Bug: 6376128, 6350773
Change-Id: I1dcb86d16ee3c4f07cdb2248d33dcff4ead3609a
2012-04-27 14:15:05 -07:00
Eric Laurent
6d5176638c system and UI sounds volume policy
Implement a more consistent policy for system and UI sounds (key clicks, lock/unlock,
camera shutter, DTMF, low battery...):
- All system sounds are played over STREAM_SYSTEM stream type.
- The STREAM_SYSTEM volume that was previously fixed now tracks the volume of a "master"
stream type. This "master" stream type is STREAM_RING for phones and STREAM_MUSIC for
tablets which corresponds to the stream whose volume is modified by default by the volume
keys.
- The STREAM_SYSTEM volume ranges from -24dB to -6dB (-24dB to -12dB over headphones) when the
"master" stream volume ranges from its min to its max.
- DTMF tones are played over STREAM_DTMF that tracks the "master" stream volume in the same
manner with the following exception: when in call, DTMF stream tracks STREAM_VOICE_CALL volume.
- Camera shutter sound is played over STREAM_SYSTEM_ENFORCED stream that tracks the "master"
stream volume except in countries where regulation enforces this sound. In this case
its volume is fixed and cannot be muted.
- Low battery sound is played over STREAM_SYSTEM and therefore has a tunable volume and is
heard while in call.

Issue 6344620.
Issue 6069229.
Issue 6213100.

Change-Id: I53a237878ead596e706c5dbbb1420e62cde32bd7
2012-04-26 18:36:56 -07:00
Eric Laurent
45c90cefd1 Fix AudioManager.forceVolumeControlStream()
AudioManager.forceVolumeControlStream() is used by VolumePanel to temporarily force the
stream type which volume is controlled by volume keys.

Current implementation is not working if the VolumePanel is not executed by the same process
as the one receiving the volume key events.

Issue 6302421.

Change-Id: I2700587a027ffb962429b42083312cd92fe79215
2012-04-25 18:28:09 -07:00
Eric Laurent
59f482764e Added support for USB audio devices
Two types of USB audio devices are defined:
- USB audio device: the audio device in USB device mode while
the Android device is in USB host mode.
- USB audio accessory: the audio device in USB host mode while
the Android device is in USB device mode.

Renamed intents for analog and digital docks to avoid confusion:
 - ACTION_USB_ANLG_HEADSET_PLUG to ACTION_ANALOG_AUDIO_DOCK_PLUG
 - ACTION_USB_DGTL_HEADSET_PLUG to ACTION_DIGITAL_AUDIO_DOCK_PLUG

Factorized code in AudioService broadcast receiver.

Change-Id: I1b6d0257a9d68ecb9495c78c98bac8c67fec7891
2012-04-06 18:24:48 -07:00
Justin Koh
1c35d117f0 am db9b114b: Merge "Adds flag argument to setMasterMute." into ics-aah
* commit 'db9b114b2e1f9c2034c3cd6df00245b039d90c28':
  Adds flag argument to setMasterMute.
2012-04-05 10:43:06 -07:00
Justin Koh
0273af55cf Adds flag argument to setMasterMute.
Adds flag argument to setMasterMute. This allows third parties to edit it
without showing the UI, for example.

TESTED = runs on Tungsten.

Change-Id: Idfd99a2476e60059cd93c9dfe07d03a389c3f5f5
2012-04-04 18:40:36 -07:00
Lei Zhang
6c798970cc Add batch volume adjust support to adjustMasterVolume() in AudioManager and
AudioService.

Change-Id: I09b1dfc93f14ca836e1ba2a400c00caed01fd541
2012-03-22 15:09:18 -07:00
Lei Zhang
d674dd50b7 Add batch volume adjust support to adjustMasterVolume() in AudioManager and
AudioService.

Change-Id: I34382839622a5cc5f2a8768aed011e8224cadff9
2012-03-02 11:48:28 -08:00
Jason Simmons
e3f5979307 Make AudioManager.adjustMasterVolume public and hidden 2012-02-10 14:44:08 -08:00
Mike Lockwood
0dc37cce9d AudioService: Send broadcasts when master volume and mute state change
Signed-off-by: Mike Lockwood <lockwood@google.com>
2012-02-10 14:44:06 -08:00
Mike Lockwood
fa7b06147c AudioManager: Add wrapper methods for master volume support
Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 14:44:05 -08:00
Mike Lockwood
ce952c8e13 AudioManager: Add support for master mute
Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 14:44:05 -08:00
Mike Lockwood
4767690f09 AudioManager: transparently convert volume settings for other streams to master volume if config_useMasterVolume is set.
This allows Music2 and other media apps to control master volume without changing their code

Bug: 5567694

Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 14:44:04 -08:00
Mike Lockwood
8dc1dabd25 VolumePanel: Add support for master volume
Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 09:05:49 -08:00
Mike Lockwood
cbdb49dc5e Simple master volume support
Still needs integration with Settings (for persistence) and VolumePanel UI.

Change-Id: I9eca92c4b1ef2df2564411006a35753ab9618dce
Signed-off-by: Mike Lockwood <lockwood@android.com>
2012-02-10 09:01:28 -08:00
Glenn Kasten
30c918ce7f Use final on new member variables
Use final for member fields initialized to a new and that are never modified.

Change-Id: I042352c7bc21879613e7a50b1205b6923f8083cf
2012-01-27 16:13:00 -08:00
Jean-Michel Trivi
4dd3674e51 Bug 5567648 disassociate audio mode and audio focus
Don't automatically change the audio focus when
 the audio mode changes. This is best handled by the
 applications that change the audio mode so they
 can address their usecases as they please (for
 instance to define the behavior when switching calls).
Replaced the implicit "mode to focus" behavior with
 two methods to request and abandon audio focus. These
 methods are only to be used by the framework, and maintain
 the logic in AudioService to prevent other apps to request
 audio focus during a call.
A susequent change will update com.android.internal.telephony.CallManager
 to take advantage of these two methods.

Change-Id: If84ebd508e985083e8cac82ece44940c72b5c669
2012-01-27 13:32:45 -08:00
Jason Simmons
db8b292b6d Make AudioManager.adjustMasterVolume public and hidden
Change-Id: Ied4d07c2f67f24d1e1963f4ff30650042334d563
2012-01-24 16:27:19 -08:00
Joe Onorato
b782e8d71e logging
Change-Id: I6fde5617365f479884937615e0d3f0f4ecc2dc14
2011-12-13 22:17:04 -08:00