Merge "Ensure MediaSession2Record is initialized before used" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-06-01 13:53:03 +00:00
committed by Android (Google) Code Review

View File

@@ -56,13 +56,17 @@ public class MediaSession2Record implements MediaSessionRecordImpl {
public MediaSession2Record(Session2Token sessionToken, MediaSessionService service, public MediaSession2Record(Session2Token sessionToken, MediaSessionService service,
Looper handlerLooper, int policies) { Looper handlerLooper, int policies) {
mSessionToken = sessionToken; // The lock is required to prevent `Controller2Callback` from using partially initialized
mService = service; // `MediaSession2Record.this`.
mHandlerExecutor = new HandlerExecutor(new Handler(handlerLooper)); synchronized (mLock) {
mController = new MediaController2.Builder(service.getContext(), sessionToken) mSessionToken = sessionToken;
.setControllerCallback(mHandlerExecutor, new Controller2Callback()) mService = service;
.build(); mHandlerExecutor = new HandlerExecutor(new Handler(handlerLooper));
mPolicies = policies; mController = new MediaController2.Builder(service.getContext(), sessionToken)
.setControllerCallback(mHandlerExecutor, new Controller2Callback())
.build();
mPolicies = policies;
}
} }
@Override @Override
@@ -176,10 +180,12 @@ public class MediaSession2Record implements MediaSessionRecordImpl {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "connected to " + mSessionToken + ", allowed=" + allowedCommands); Log.d(TAG, "connected to " + mSessionToken + ", allowed=" + allowedCommands);
} }
MediaSessionService service;
synchronized (mLock) { synchronized (mLock) {
mIsConnected = true; mIsConnected = true;
service = mService;
} }
mService.onSessionActiveStateChanged(MediaSession2Record.this); service.onSessionActiveStateChanged(MediaSession2Record.this);
} }
@Override @Override
@@ -187,10 +193,12 @@ public class MediaSession2Record implements MediaSessionRecordImpl {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "disconnected from " + mSessionToken); Log.d(TAG, "disconnected from " + mSessionToken);
} }
MediaSessionService service;
synchronized (mLock) { synchronized (mLock) {
mIsConnected = false; mIsConnected = false;
service = mService;
} }
mService.onSessionDied(MediaSession2Record.this); service.onSessionDied(MediaSession2Record.this);
} }
@Override @Override
@@ -199,7 +207,11 @@ public class MediaSession2Record implements MediaSessionRecordImpl {
Log.d(TAG, "playback active changed, " + mSessionToken + ", active=" Log.d(TAG, "playback active changed, " + mSessionToken + ", active="
+ playbackActive); + playbackActive);
} }
mService.onSessionPlaybackStateChanged(MediaSession2Record.this, playbackActive); MediaSessionService service;
synchronized (mLock) {
service = mService;
}
service.onSessionPlaybackStateChanged(MediaSession2Record.this, playbackActive);
} }
} }
} }