Update IRemoteControlDisplay when it registers.
When an IRemoteControlDisplay registers, it must receive information
from the current client.
Change-Id: Id845e7a87ac74c2db2c59e0281b28a45f8d20528
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index a5c9053..dbe4115 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -3084,7 +3084,7 @@
mRcDisplay.setCurrentClientId(
newClientGeneration, newClientEventReceiver, clearing);
} catch (RemoteException e) {
- Log.e(TAG, "Dead display in onRcDisplayUpdate() "+e);
+ Log.e(TAG, "Dead display in setNewRcClientOnDisplays_syncRcsCurrc() "+e);
// if we had a display before, stop monitoring its death
rcDisplay_stopDeathMonitor_syncRcStack();
mRcDisplay = null;
@@ -3103,7 +3103,7 @@
try {
se.mRcClient.setCurrentClientGenerationId(newClientGeneration);
} catch (RemoteException e) {
- Log.w(TAG, "Dead client in onRcDisplayUpdate()"+e);
+ Log.w(TAG, "Dead client in setNewRcClientGenerationOnClients_syncRcsCurrc()"+e);
stackIterator.remove();
se.unlinkToRcClientDeath();
}
@@ -3160,7 +3160,7 @@
rcse.mReceiverComponent /*event receiver*/,
false /*clearing*/);
- // ask the current client that it needs to send info
+ // tell the current client that it needs to send info
try {
mCurrentRcClient.onInformationRequested(mCurrentRcClientGen,
flags, mArtworkExpectedWidth, mArtworkExpectedHeight);
@@ -3457,6 +3457,21 @@
}
}
}
+
+ // we have a new display, tell the current client that it needs to send info
+ // (following lock order: mRCStack then mCurrentRcLock)
+ synchronized(mCurrentRcLock) {
+ if (mCurrentRcClient != null) {
+ // tell the current client that it needs to send info
+ try {
+ mCurrentRcClient.onInformationRequested(mCurrentRcClientGen,
+ RC_INFO_ALL, mArtworkExpectedWidth, mArtworkExpectedHeight);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Current valid remote client is dead: "+e);
+ mCurrentRcClient = null;
+ }
+ }
+ }
}
}