Loading media/java/android/media/AudioManager.java +18 −8 Original line number Diff line number Diff line Loading @@ -2500,14 +2500,6 @@ public class AudioManager { return; } IAudioService service = getService(); try { service.addMediaPlayerAndUpdateRemoteController( eventReceiver.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "Error in calling Audioservice interface " + "addMediaPlayerAndUpdateRemoteController()" + e); } // construct a PendingIntent for the media button and register it Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); mediaButtonIntent.addFlags(mediaButtonIntent.FLAG_RECEIVER_FOREGROUND); Loading Loading @@ -2676,6 +2668,24 @@ public class AudioManager { rctlr.stopListeningToSessions(); } /** * @hide */ public void updateMediaPlayerList(String packageName, boolean toAdd) { IAudioService service = getService(); try { if (toAdd) { Log.d(TAG, "updateMediaPlayerList: Add RCC " + packageName + " to List"); service.addMediaPlayerAndUpdateRemoteController(packageName); } else { Log.d(TAG, "updateMediaPlayerList: Remove RCC " + packageName + " from List"); service.removeMediaPlayerAndUpdateRemoteController(packageName); } } catch (RemoteException e) { Log.e(TAG, "Exception while executing updateMediaPlayerList: " + e); } } /** * @hide * Registers a remote control display that will be sent information by remote control clients. Loading media/java/android/media/AudioService.java +36 −0 Original line number Diff line number Diff line Loading @@ -741,6 +741,8 @@ 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(); Loading Loading @@ -795,6 +797,40 @@ public class AudioService extends IAudioService.Stub { } } /** * @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() { int numStreamTypes = AudioSystem.getNumStreamTypes(); for (int streamType = 0; streamType < numStreamTypes; streamType++) { Loading media/java/android/media/IAudioService.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -217,4 +217,6 @@ interface IAudioService { void updateRemoteControllerOnExistingMediaPlayers(); void addMediaPlayerAndUpdateRemoteController(String packageName); void removeMediaPlayerAndUpdateRemoteController(String packageName); } media/java/android/media/RemoteController.java +10 −0 Original line number Diff line number Diff line Loading @@ -1089,6 +1089,8 @@ import java.util.List; synchronized (mInfoLock) { if (controller == null) { if (mCurrentSession != null) { Log.v(TAG, "Updating current controller as null"); mAudioManager.updateMediaPlayerList(mCurrentSession.getPackageName(), false); mCurrentSession.unregisterCallback(mSessionCb); mCurrentSession = null; sendMsg(mEventHandler, MSG_CLIENT_CHANGE, SENDMSG_REPLACE, Loading @@ -1098,13 +1100,21 @@ import java.util.List; || !controller.getSessionToken() .equals(mCurrentSession.getSessionToken())) { if (mCurrentSession != null) { Log.v(TAG, "Updating current controller package as " + controller.getPackageName() + " from " + mCurrentSession.getPackageName()); mCurrentSession.unregisterCallback(mSessionCb); } else { Log.v(TAG, "Updating current controller package as " + controller.getPackageName() + " from null"); } sendMsg(mEventHandler, MSG_CLIENT_CHANGE, SENDMSG_REPLACE, 0 /* genId */, 0 /* clearing */, null /* obj */, 0 /* delay */); mCurrentSession = controller; mCurrentSession.registerCallback(mSessionCb, mEventHandler); mAudioManager.updateMediaPlayerList(mCurrentSession.getPackageName(), true); PlaybackState state = controller.getPlaybackState(); sendMsg(mEventHandler, MSG_NEW_PLAYBACK_STATE, SENDMSG_REPLACE, 0 /* genId */, 0, state /* obj */, 0 /* delay */); Loading Loading
media/java/android/media/AudioManager.java +18 −8 Original line number Diff line number Diff line Loading @@ -2500,14 +2500,6 @@ public class AudioManager { return; } IAudioService service = getService(); try { service.addMediaPlayerAndUpdateRemoteController( eventReceiver.getPackageName()); } catch (RemoteException e) { Log.e(TAG, "Error in calling Audioservice interface " + "addMediaPlayerAndUpdateRemoteController()" + e); } // construct a PendingIntent for the media button and register it Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); mediaButtonIntent.addFlags(mediaButtonIntent.FLAG_RECEIVER_FOREGROUND); Loading Loading @@ -2676,6 +2668,24 @@ public class AudioManager { rctlr.stopListeningToSessions(); } /** * @hide */ public void updateMediaPlayerList(String packageName, boolean toAdd) { IAudioService service = getService(); try { if (toAdd) { Log.d(TAG, "updateMediaPlayerList: Add RCC " + packageName + " to List"); service.addMediaPlayerAndUpdateRemoteController(packageName); } else { Log.d(TAG, "updateMediaPlayerList: Remove RCC " + packageName + " from List"); service.removeMediaPlayerAndUpdateRemoteController(packageName); } } catch (RemoteException e) { Log.e(TAG, "Exception while executing updateMediaPlayerList: " + e); } } /** * @hide * Registers a remote control display that will be sent information by remote control clients. Loading
media/java/android/media/AudioService.java +36 −0 Original line number Diff line number Diff line Loading @@ -741,6 +741,8 @@ 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(); Loading Loading @@ -795,6 +797,40 @@ public class AudioService extends IAudioService.Stub { } } /** * @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() { int numStreamTypes = AudioSystem.getNumStreamTypes(); for (int streamType = 0; streamType < numStreamTypes; streamType++) { Loading
media/java/android/media/IAudioService.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -217,4 +217,6 @@ interface IAudioService { void updateRemoteControllerOnExistingMediaPlayers(); void addMediaPlayerAndUpdateRemoteController(String packageName); void removeMediaPlayerAndUpdateRemoteController(String packageName); }
media/java/android/media/RemoteController.java +10 −0 Original line number Diff line number Diff line Loading @@ -1089,6 +1089,8 @@ import java.util.List; synchronized (mInfoLock) { if (controller == null) { if (mCurrentSession != null) { Log.v(TAG, "Updating current controller as null"); mAudioManager.updateMediaPlayerList(mCurrentSession.getPackageName(), false); mCurrentSession.unregisterCallback(mSessionCb); mCurrentSession = null; sendMsg(mEventHandler, MSG_CLIENT_CHANGE, SENDMSG_REPLACE, Loading @@ -1098,13 +1100,21 @@ import java.util.List; || !controller.getSessionToken() .equals(mCurrentSession.getSessionToken())) { if (mCurrentSession != null) { Log.v(TAG, "Updating current controller package as " + controller.getPackageName() + " from " + mCurrentSession.getPackageName()); mCurrentSession.unregisterCallback(mSessionCb); } else { Log.v(TAG, "Updating current controller package as " + controller.getPackageName() + " from null"); } sendMsg(mEventHandler, MSG_CLIENT_CHANGE, SENDMSG_REPLACE, 0 /* genId */, 0 /* clearing */, null /* obj */, 0 /* delay */); mCurrentSession = controller; mCurrentSession.registerCallback(mSessionCb, mEventHandler); mAudioManager.updateMediaPlayerList(mCurrentSession.getPackageName(), true); PlaybackState state = controller.getPlaybackState(); sendMsg(mEventHandler, MSG_NEW_PLAYBACK_STATE, SENDMSG_REPLACE, 0 /* genId */, 0, state /* obj */, 0 /* delay */); Loading