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