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

Commit 1bc06e4a 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"...

Merge "Keep those MediaControllers of none addressed players to be up-to-date" am: d5b8ac83 am: f68cb034 am: 2535b0a2
am: 9f8cd97c

Change-Id: I8b7334fba27ca6c315fa4068868de3a9d077daeb
parents 9252ef03 9f8cd97c
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -241,7 +241,7 @@ class MediaPlayerWrapper {
                getPlaybackState(),
                Util.toMetadataList(getQueue()));

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

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

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

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