Loading android/app/src/com/android/bluetooth/newavrcp/MediaPlayerWrapper.java +12 −7 Original line number Diff line number Diff line Loading @@ -241,7 +241,7 @@ class MediaPlayerWrapper { getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); mControllerCallbacks = new MediaControllerListener(mMediaController, mLooper); } /** Loading @@ -261,14 +261,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 @@ -276,7 +278,7 @@ class MediaPlayerWrapper { getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); mControllerCallbacks = new MediaControllerListener(mMediaController, mLooper); d("Controller for " + mPackageName + " was updated."); } Loading @@ -296,7 +298,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 @@ -341,20 +343,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 @@ -241,7 +241,7 @@ class MediaPlayerWrapper { getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); mControllerCallbacks = new MediaControllerListener(mMediaController, mLooper); } /** Loading @@ -261,14 +261,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 @@ -276,7 +278,7 @@ class MediaPlayerWrapper { getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); mControllerCallbacks = new MediaControllerListener(mMediaController, mLooper); d("Controller for " + mPackageName + " was updated."); } Loading @@ -296,7 +298,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 @@ -341,20 +343,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