am a65a4f64: am 9eef5bf8: Merge "Be more paranoid about threading in MediaSessionRecord" into lmp-dev

* commit 'a65a4f64e6206c370bce79d74753f6f67bc4b4e0':
  Be more paranoid about threading in MediaSessionRecord
This commit is contained in:
RoboErik
2014-09-30 16:43:43 +00:00
committed by Android Git Automerger

View File

@@ -615,7 +615,10 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
} }
private PlaybackState getStateWithUpdatedPosition() { private PlaybackState getStateWithUpdatedPosition() {
PlaybackState state = mPlaybackState; PlaybackState state;
synchronized (mLock) {
state = mPlaybackState;
}
long duration = -1; long duration = -1;
if (mMetadata != null && mMetadata.containsKey(MediaMetadata.METADATA_KEY_DURATION)) { if (mMetadata != null && mMetadata.containsKey(MediaMetadata.METADATA_KEY_DURATION)) {
duration = mMetadata.getLong(MediaMetadata.METADATA_KEY_DURATION); duration = mMetadata.getLong(MediaMetadata.METADATA_KEY_DURATION);
@@ -674,7 +677,8 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
@Override @Override
public void sendEvent(String event, Bundle data) { public void sendEvent(String event, Bundle data) {
mHandler.post(MessageHandler.MSG_SEND_EVENT, event, data); mHandler.post(MessageHandler.MSG_SEND_EVENT, event,
data == null ? null : new Bundle(data));
} }
@Override @Override
@@ -712,7 +716,11 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
@Override @Override
public void setMetadata(MediaMetadata metadata) { public void setMetadata(MediaMetadata metadata) {
mMetadata = metadata; // Make a copy of the metadata as the underlying bundle may be
// modified on this thread.
synchronized (mLock) {
mMetadata = metadata == null ? null : new MediaMetadata.Builder(metadata).build();
}
mHandler.post(MessageHandler.MSG_UPDATE_METADATA); mHandler.post(MessageHandler.MSG_UPDATE_METADATA);
} }
@@ -723,14 +731,18 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
if (MediaSession.isActiveState(oldState) && newState == PlaybackState.STATE_PAUSED) { if (MediaSession.isActiveState(oldState) && newState == PlaybackState.STATE_PAUSED) {
mLastActiveTime = SystemClock.elapsedRealtime(); mLastActiveTime = SystemClock.elapsedRealtime();
} }
mPlaybackState = state; synchronized (mLock) {
mPlaybackState = state;
}
mService.onSessionPlaystateChange(MediaSessionRecord.this, oldState, newState); mService.onSessionPlaystateChange(MediaSessionRecord.this, oldState, newState);
mHandler.post(MessageHandler.MSG_UPDATE_PLAYBACK_STATE); mHandler.post(MessageHandler.MSG_UPDATE_PLAYBACK_STATE);
} }
@Override @Override
public void setQueue(ParceledListSlice queue) { public void setQueue(ParceledListSlice queue) {
mQueue = queue; synchronized (mLock) {
mQueue = queue;
}
mHandler.post(MessageHandler.MSG_UPDATE_QUEUE); mHandler.post(MessageHandler.MSG_UPDATE_QUEUE);
} }
@@ -742,7 +754,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
@Override @Override
public void setExtras(Bundle extras) { public void setExtras(Bundle extras) {
mExtras = extras; synchronized (mLock) {
mExtras = extras == null ? null : new Bundle(extras);
}
mHandler.post(MessageHandler.MSG_UPDATE_EXTRAS); mHandler.post(MessageHandler.MSG_UPDATE_EXTRAS);
} }
@@ -1118,7 +1132,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
@Override @Override
public MediaMetadata getMetadata() { public MediaMetadata getMetadata() {
return mMetadata; synchronized (mLock) {
return mMetadata;
}
} }
@Override @Override
@@ -1128,7 +1144,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
@Override @Override
public ParceledListSlice getQueue() { public ParceledListSlice getQueue() {
return mQueue; synchronized (mLock) {
return mQueue;
}
} }
@Override @Override
@@ -1138,7 +1156,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
@Override @Override
public Bundle getExtras() { public Bundle getExtras() {
return mExtras; synchronized (mLock) {
return mExtras;
}
} }
@Override @Override