Loading android/app/src/com/android/bluetooth/newavrcp/MediaPlayerWrapper.java +12 −7 Original line number Diff line number Diff line Loading @@ -240,7 +240,7 @@ class MediaPlayerWrapper { getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); mControllerCallbacks = new MediaControllerListener(mMediaController, mLooper); } /** Loading @@ -260,14 +260,16 @@ class MediaPlayerWrapper { void updateMediaController(MediaController newController) { if (newController == mMediaController) return; mMediaController = newController; synchronized (mCallbackLock) { if (mRegisteredCallback == null || mControllerCallbacks == null) { d("Controller for " + mPackageName + " maybe is not activated."); return; } } mControllerCallbacks.cleanup(); mMediaController = newController; // Update the current data since it could be different on the new controller for the player mCurrentData = new MediaData( Loading @@ -275,7 +277,7 @@ class MediaPlayerWrapper { getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); mControllerCallbacks = new MediaControllerListener(mMediaController, mLooper); d("Controller for " + mPackageName + " was updated."); } Loading @@ -295,7 +297,7 @@ class MediaPlayerWrapper { synchronized (mCallbackLock) { if (mRegisteredCallback == null) { Log.e(TAG, mPackageName + "Trying to send an update with no registered callback"); + ": Trying to send an update with no registered callback"); return; } Loading Loading @@ -339,20 +341,23 @@ class MediaPlayerWrapper { class MediaControllerListener extends MediaController.Callback { private final Object mTimeoutHandlerLock = new Object(); private Handler mTimeoutHandler; private MediaController mController; MediaControllerListener(Looper newLooper) { MediaControllerListener(MediaController controller, Looper newLooper) { synchronized (mTimeoutHandlerLock) { mTimeoutHandler = new TimeoutHandler(newLooper); mController = controller; // Register the callbacks to execute on the same thread as the timeout thread. This // prevents a race condition where a timeout happens at the same time as an update. mMediaController.registerCallback(this, mTimeoutHandler); mController.registerCallback(this, mTimeoutHandler); } } void cleanup() { synchronized (mTimeoutHandlerLock) { mMediaController.unregisterCallback(this); mController.unregisterCallback(this); mController = null; mTimeoutHandler.removeMessages(TimeoutHandler.MSG_TIMEOUT); mTimeoutHandler = null; } Loading Loading
android/app/src/com/android/bluetooth/newavrcp/MediaPlayerWrapper.java +12 −7 Original line number Diff line number Diff line Loading @@ -240,7 +240,7 @@ class MediaPlayerWrapper { getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); mControllerCallbacks = new MediaControllerListener(mMediaController, mLooper); } /** Loading @@ -260,14 +260,16 @@ class MediaPlayerWrapper { void updateMediaController(MediaController newController) { if (newController == mMediaController) return; mMediaController = newController; synchronized (mCallbackLock) { if (mRegisteredCallback == null || mControllerCallbacks == null) { d("Controller for " + mPackageName + " maybe is not activated."); return; } } mControllerCallbacks.cleanup(); mMediaController = newController; // Update the current data since it could be different on the new controller for the player mCurrentData = new MediaData( Loading @@ -275,7 +277,7 @@ class MediaPlayerWrapper { getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); mControllerCallbacks = new MediaControllerListener(mMediaController, mLooper); d("Controller for " + mPackageName + " was updated."); } Loading @@ -295,7 +297,7 @@ class MediaPlayerWrapper { synchronized (mCallbackLock) { if (mRegisteredCallback == null) { Log.e(TAG, mPackageName + "Trying to send an update with no registered callback"); + ": Trying to send an update with no registered callback"); return; } Loading Loading @@ -339,20 +341,23 @@ class MediaPlayerWrapper { class MediaControllerListener extends MediaController.Callback { private final Object mTimeoutHandlerLock = new Object(); private Handler mTimeoutHandler; private MediaController mController; MediaControllerListener(Looper newLooper) { MediaControllerListener(MediaController controller, Looper newLooper) { synchronized (mTimeoutHandlerLock) { mTimeoutHandler = new TimeoutHandler(newLooper); mController = controller; // Register the callbacks to execute on the same thread as the timeout thread. This // prevents a race condition where a timeout happens at the same time as an update. mMediaController.registerCallback(this, mTimeoutHandler); mController.registerCallback(this, mTimeoutHandler); } } void cleanup() { synchronized (mTimeoutHandlerLock) { mMediaController.unregisterCallback(this); mController.unregisterCallback(this); mController = null; mTimeoutHandler.removeMessages(TimeoutHandler.MSG_TIMEOUT); mTimeoutHandler = null; } Loading