Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f68cb034 authored by Cheney Ni's avatar Cheney Ni Committed by android-build-merger
Browse files

Merge "Keep those MediaControllers of none addressed players to be up-to-date"

am: d5b8ac83

Change-Id: I090d231d3f08bcfeb486836e4f8c38ef9bbb0881
parents af91b3bc d5b8ac83
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -240,7 +240,7 @@ class MediaPlayerWrapper {
                getPlaybackState(),
                Util.toMetadataList(getQueue()));

        mControllerCallbacks = new MediaControllerListener(mLooper);
        mControllerCallbacks = new MediaControllerListener(mMediaController, mLooper);
    }

    /**
@@ -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(
@@ -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.");
    }

@@ -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;
            }

@@ -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;
            }