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

Commit af7d46c1 authored by Sungsoo Lim's avatar Sungsoo Lim
Browse files

Use MediaSession.Token instead of ISessionController

ISessionController will be moved to mainline module.

Test: pass MediaSessionTest and MediaControllerTest
Change-Id: I45b4da502e2b262730255a6cda1ab932d154ecbd
parent 24c15d23
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 *
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
@@ -16,7 +17,7 @@

package android.media;

import android.media.session.ISessionController;
import android.media.session.MediaSession;

/**
 * AIDL for the MediaSessionService to report interesting events on remote playback
@@ -25,8 +26,8 @@ import android.media.session.ISessionController;
 * @hide
 */
oneway interface IRemoteVolumeController {
    void remoteVolumeChanged(in ISessionController session, int flags);
    void remoteVolumeChanged(in MediaSession.Token sessionToken, int flags);
    // sets the default session to use with the slider, replaces remoteSliderVisibility
    // on IVolumeController
    void updateRemoteController(in ISessionController session);
    void updateRemoteController(in MediaSession.Token sessionToken);
}
+13 −12
Original line number Diff line number Diff line
@@ -25,9 +25,9 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.media.IRemoteVolumeController;
import android.media.MediaMetadata;
import android.media.session.ISessionController;
import android.media.session.MediaController;
import android.media.session.MediaController.PlaybackInfo;
import android.media.session.MediaSession;
import android.media.session.MediaSession.QueueItem;
import android.media.session.MediaSession.Token;
import android.media.session.MediaSessionManager;
@@ -113,17 +113,17 @@ public class MediaSessions {
        r.controller.setVolumeTo(level, 0);
    }

    private void onRemoteVolumeChangedH(ISessionController session, int flags) {
        final MediaController controller = new MediaController(mContext, session);
    private void onRemoteVolumeChangedH(MediaSession.Token sessionToken, int flags) {
        final MediaController controller = new MediaController(mContext, sessionToken);
        if (D.BUG) Log.d(TAG, "remoteVolumeChangedH " + controller.getPackageName() + " "
                + Util.audioManagerFlagsToString(flags));
        final Token token = controller.getSessionToken();
        mCallbacks.onRemoteVolumeChanged(token, flags);
    }

    private void onUpdateRemoteControllerH(ISessionController session) {
        final MediaController controller = session != null ? new MediaController(mContext, session)
                : null;
    private void onUpdateRemoteControllerH(MediaSession.Token sessionToken) {
        final MediaController controller =
                sessionToken != null ? new MediaController(mContext, sessionToken) : null;
        final String pkg = controller != null ? controller.getPackageName() : null;
        if (D.BUG) Log.d(TAG, "updateRemoteControllerH " + pkg);
        // this may be our only indication that a remote session is changed, refresh
@@ -332,15 +332,16 @@ public class MediaSessions {

    private final IRemoteVolumeController mRvc = new IRemoteVolumeController.Stub() {
        @Override
        public void remoteVolumeChanged(ISessionController session, int flags)
        public void remoteVolumeChanged(MediaSession.Token sessionToken, int flags)
                throws RemoteException {
            mHandler.obtainMessage(H.REMOTE_VOLUME_CHANGED, flags, 0, session).sendToTarget();
            mHandler.obtainMessage(H.REMOTE_VOLUME_CHANGED, flags, 0,
                    sessionToken).sendToTarget();
        }

        @Override
        public void updateRemoteController(final ISessionController session)
        public void updateRemoteController(final MediaSession.Token sessionToken)
                throws RemoteException {
            mHandler.obtainMessage(H.UPDATE_REMOTE_CONTROLLER, session).sendToTarget();
            mHandler.obtainMessage(H.UPDATE_REMOTE_CONTROLLER, sessionToken).sendToTarget();
        }
    };

@@ -360,10 +361,10 @@ public class MediaSessions {
                    onActiveSessionsUpdatedH(mMgr.getActiveSessions(null));
                    break;
                case REMOTE_VOLUME_CHANGED:
                    onRemoteVolumeChangedH((ISessionController) msg.obj, msg.arg1);
                    onRemoteVolumeChangedH((MediaSession.Token) msg.obj, msg.arg1);
                    break;
                case UPDATE_REMOTE_CONTROLLER:
                    onUpdateRemoteControllerH((ISessionController) msg.obj);
                    onUpdateRemoteControllerH((MediaSession.Token) msg.obj);
                    break;
            }
        }
+11 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
    private final String mPackageName;
    private final String mTag;
    private final ControllerLink mController;
    private final MediaSession.Token mSessionToken;
    private final SessionLink mSession;
    private final SessionCb mSessionCb;
    private final MediaSessionService.ServiceImpl mService;
@@ -128,6 +129,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
        mPackageName = ownerPackageName;
        mTag = tag;
        mController = new ControllerLink(new ControllerStub());
        mSessionToken = new MediaSession.Token(mController);
        mSession = new SessionLink(new SessionStub());
        mSessionCb = new SessionCb(cb);
        mService = service;
@@ -156,6 +158,15 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
        return mController;
    }

    /**
     * Get the session token for creating {@link MediaController}.
     *
     * @return The session token.
     */
    public MediaSession.Token getSessionToken() {
        return mSessionToken;
    }

    /**
     * Get the info for this session.
     *
+5 −10
Original line number Diff line number Diff line
@@ -51,7 +51,6 @@ import android.media.session.ICallback;
import android.media.session.IOnMediaKeyListener;
import android.media.session.IOnVolumeKeyLongPressListener;
import android.media.session.ISession2TokensListener;
import android.media.session.ISessionController;
import android.media.session.ISessionManager;
import android.media.session.MediaSession;
import android.media.session.MediaSessionManager;
@@ -290,9 +289,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
            return;
        }
        try {
            mRvc.remoteVolumeChanged(
                    ISessionController.Stub.asInterface(session.getControllerLink().getBinder()),
                    flags);
            mRvc.remoteVolumeChanged(session.getSessionToken(), flags);
        } catch (Exception e) {
            Log.wtf(TAG, "Error sending volume change to system UI.", e);
        }
@@ -618,7 +615,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
            int size = records.size();
            ArrayList<MediaSession.Token> tokens = new ArrayList<MediaSession.Token>();
            for (int i = 0; i < size; i++) {
                tokens.add(new MediaSession.Token(records.get(i).getControllerLink()));
                tokens.add(records.get(i).getSessionToken());
            }
            pushRemoteVolumeUpdateLocked(userId);
            for (int i = mSessionsListeners.size() - 1; i >= 0; i--) {
@@ -645,9 +642,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
                    return;
                }
                MediaSessionRecord record = user.mPriorityStack.getDefaultRemoteSession(userId);
                mRvc.updateRemoteController(record == null ? null
                        : ISessionController.Stub.asInterface(
                                record.getControllerLink().getBinder()));
                mRvc.updateRemoteController(record == null ? null : record.getSessionToken());
            } catch (RemoteException e) {
                Log.wtf(TAG, "Error sending default remote volume to sys ui.", e);
            }
@@ -864,7 +859,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
                MediaSessionRecord mediaButtonSession = getMediaButtonSessionLocked();
                if (mediaButtonSession != null) {
                    mCallback.onAddressedPlayerChangedToMediaSession(
                            new MediaSession.Token(mediaButtonSession.getControllerLink()));
                            mediaButtonSession.getSessionToken());
                } else if (mCurrentFullUserRecord.mLastMediaButtonReceiver != null) {
                    mCallback.onAddressedPlayerChangedToMediaButtonReceiver(
                            mCurrentFullUserRecord.mLastMediaButtonReceiver
@@ -1804,7 +1799,7 @@ public class MediaSessionServiceImpl extends MediaSessionService.ServiceImpl {
                if (mCurrentFullUserRecord.mCallback != null) {
                    try {
                        mCurrentFullUserRecord.mCallback.onMediaKeyEventDispatchedToMediaSession(
                                keyEvent, new MediaSession.Token(session.getControllerLink()));
                                keyEvent, session.getSessionToken());
                    } catch (RemoteException e) {
                        Log.w(TAG, "Failed to send callback", e);
                    }