diff options
author | Ayan Ghosh <abghosh@codeaurora.org> | 2014-07-25 18:07:23 +0530 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2015-10-06 03:27:00 -0600 |
commit | 620c100fe78ccfd67d3ea1aa230c772d32d96e60 (patch) | |
tree | b08132e3704eae03e1000154a5c7f00199d11429 /services/core/java/com/android/server/audio/AudioService.java | |
parent | 6d08e0ed29fc9ac9ebb96c5cecf8a2787c8a0ed8 (diff) | |
download | frameworks_base-620c100fe78ccfd67d3ea1aa230c772d32d96e60.zip frameworks_base-620c100fe78ccfd67d3ea1aa230c772d32d96e60.tar.gz frameworks_base-620c100fe78ccfd67d3ea1aa230c772d32d96e60.tar.bz2 |
AVRCP 1.5 implementation
AVRCP 1.5 Implementation
Change-Id: I9a21348ec7e0c21735448ea29b781167f01e1580
Bluetooth: Add Total track number.
Add support to add total number of tracks in
Meta-data
Change-Id: I5b1287f791615adcd4f920fe5c7cae0c7c7b04ea
CRs-Fixed: 627869
Bluetooth: Modify Avrcp 1.5 implementation to adapt to latest AOSP changes
Modify Avrcp 1.5 implementation to adapt to latest AOSP changes.
CRs-Fixed: 719567
Change-Id: I0958fb12f573054f1da16df0ac46f3bec7374222
Move media player list management to Audioservice
Move media player list management to Audioservice so that
list is retained even after BT restart.
Change-Id: Ia2455e6def1900b4af2225c50e1b5325a7ce1a98
Update RemoteController on Session update
Update RemoteController on Session update in order to update
AVRCP player list to honor peer initiated browsing command.
This change fixes AVRCP browing failure due stale entry of
player session upated to AVRCP player list after device reboot.
Change-Id: I529a13e2c8a70e4b53319798c952b41f369b8bec
Introduce new interface class for Avrcp Browsing feature
Separate out Avrcp Browsing Apis from SDK interface class to
ensure compatibility with all available apps implementing the
mentioned SDK interface class.
Change-Id: I713527ee3622ba28fe92d5bc743b9471632299b3
Diffstat (limited to 'services/core/java/com/android/server/audio/AudioService.java')
-rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 7565e9d..4b618bb 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -171,6 +171,27 @@ public class AudioService extends IAudioService.Stub { // the platform type affects volume and silent mode behavior private final int mPlatformType; + private static final ArrayList<MediaPlayerInfo> mMediaPlayers = + new ArrayList<MediaPlayerInfo>(); + + private class MediaPlayerInfo { + private String mPackageName; + private boolean mIsfocussed; + public MediaPlayerInfo(String packageName, boolean isfocussed) { + mPackageName = packageName; + mIsfocussed = isfocussed; + } + public boolean isFocussed() { + return mIsfocussed; + } + public void setFocus(boolean focus) { + mIsfocussed = focus; + } + public String getPackageName() { + return mPackageName; + } + } + private boolean isPlatformVoice() { return mPlatformType == AudioSystem.PLATFORM_VOICE; } @@ -861,6 +882,100 @@ public class AudioService extends IAudioService.Stub { } } + /** + * @hide + */ + public void addMediaPlayerAndUpdateRemoteController (String packageName) { + Log.v(TAG, "addMediaPlayerAndUpdateRemoteController: size of existing list: " + + mMediaPlayers.size()); + boolean playerToAdd = true; + if (mMediaPlayers.size() > 0) { + final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator(); + while (rccIterator.hasNext()) { + final MediaPlayerInfo player = rccIterator.next(); + if (packageName.equals(player.getPackageName())) { + Log.e(TAG, "Player entry present, no need to add"); + playerToAdd = false; + player.setFocus(true); + } else { + Log.e(TAG, "Player: " + player.getPackageName()+ "Lost Focus"); + player.setFocus(false); + } + } + } + if (playerToAdd) { + Log.e(TAG, "Adding Player: " + packageName + " to available player list"); + mMediaPlayers.add(new MediaPlayerInfo(packageName, true)); + } + Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION); + intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, packageName); + intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, true); + intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true); + sendBroadcastToAll(intent); + Log.v(TAG, "updating focussed RCC change to RCD: CallingPackageName:" + + packageName); + } + + /** + * @hide + */ + public void updateRemoteControllerOnExistingMediaPlayers() { + Log.v(TAG, "updateRemoteControllerOnExistingMediaPlayers: size of Player list: " + + mMediaPlayers.size()); + if (mMediaPlayers.size() > 0) { + Log.v(TAG, "Inform RemoteController regarding existing RCC entry"); + final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator(); + while (rccIterator.hasNext()) { + final MediaPlayerInfo player = rccIterator.next(); + Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION); + intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, + player.getPackageName()); + intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, + player.isFocussed()); + intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true); + sendBroadcastToAll(intent); + Log.v(TAG, "updating RCC change: CallingPackageName:" + + player.getPackageName()); + } + } else { + Log.e(TAG, "No RCC entry present to update"); + } + } + + /** + * @hide + */ + public void removeMediaPlayerAndUpdateRemoteController (String packageName) { + Log.v(TAG, "removeMediaPlayerAndUpdateRemoteController: size of existing list: " + + mMediaPlayers.size()); + boolean playerToRemove = false; + int index = -1; + if (mMediaPlayers.size() > 0) { + final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator(); + while (rccIterator.hasNext()) { + index++; + final MediaPlayerInfo player = rccIterator.next(); + if (packageName.equals(player.getPackageName())) { + Log.v(TAG, "Player entry present remove and update RemoteController"); + playerToRemove = true; + break; + } else { + Log.v(TAG, "Player entry for " + player.getPackageName()+ " is not present"); + } + } + } + if (playerToRemove) { + Log.e(TAG, "Removing Player: " + packageName + " from index" + index); + mMediaPlayers.remove(index); + } + Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION); + intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, packageName); + intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, false); + intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, false); + sendBroadcastToAll(intent); + Log.v(TAG, "Updated List size: " + mMediaPlayers.size()); + } + private void checkAllAliasStreamVolumes() { synchronized (VolumeStreamState.class) { int numStreamTypes = AudioSystem.getNumStreamTypes(); @@ -5185,6 +5300,18 @@ public class AudioService extends IAudioService.Stub { mMediaFocusControl.remoteControlDisplayWantsPlaybackPositionSync(rcd, wantsSync); } + public void setRemoteControlClientPlayItem(long uid, int scope) { + mMediaFocusControl.setRemoteControlClientPlayItem(uid, scope); + } + + public void getRemoteControlClientNowPlayingEntries() { + mMediaFocusControl.getRemoteControlClientNowPlayingEntries(); + } + + public void setRemoteControlClientBrowsedPlayer() { + mMediaFocusControl.setRemoteControlClientBrowsedPlayer(); + } + @Override public void setRemoteStreamVolume(int index) { enforceVolumeController("set the remote stream volume"); |