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

Commit d5b8ac83 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

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

parents 85f7bff9 3a22f853
Loading
Loading
Loading
Loading
+12 −7
Original line number Original line Diff line number Diff line
@@ -240,7 +240,7 @@ class MediaPlayerWrapper {
                getPlaybackState(),
                getPlaybackState(),
                Util.toMetadataList(getQueue()));
                Util.toMetadataList(getQueue()));


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


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


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


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