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

Commit 40bc2ec7 authored by Jaewan Kim's avatar Jaewan Kim
Browse files

MediaSessionManager: Split abstract class Callback into interfaces

This CL splits the MediaSessionManager.Callback (abstract class) with
OnMediaKeyEventDispatchedListener and
OnMediaKeyEventSessionChangedListener (interfaces with default methods).

It's to follow the API guideline and also to help the Bluetooth for
minally registering callbacks. (The Bluetooth currently only overrides
onAddressedPlayerChanged)

Bug: 138648566
Test: Build and run
Change-Id: I3032abaed5007baf941ef55166355191d8c47db3
parent 1fce8e20
Loading
Loading
Loading
Loading
+37 −51
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.bluetooth.avrcp;

import android.annotation.NonNull;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -32,6 +31,7 @@ import android.media.session.MediaSessionManager;
import android.media.session.PlaybackState;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;

@@ -138,7 +138,8 @@ public class MediaPlayerList {
                (MediaSessionManager) context.getSystemService(Context.MEDIA_SESSION_SERVICE);
        mMediaSessionManager.addOnActiveSessionsChangedListener(
                mActiveSessionsChangedListener, null, new Handler(looper));
        mMediaSessionManager.setCallback(mButtonDispatchCallback, null);
        mMediaSessionManager.addOnMediaKeyEventSessionChangedListener(
                mContext.getMainExecutor(), mMediaKeyEventSessionChangedListener);
    }

    void init(AvrcpTargetService.ListCallback callback) {
@@ -201,7 +202,8 @@ public class MediaPlayerList {
        mActivePlayerId = NO_ACTIVE_PLAYER;

        mMediaSessionManager.removeOnActiveSessionsChangedListener(mActiveSessionsChangedListener);
        mMediaSessionManager.setCallback(null, null);
        mMediaSessionManager.removeOnMediaKeyEventSessionChangedListener(
                mMediaKeyEventSessionChangedListener);
        mMediaSessionManager = null;

        mAudioManager.unregisterAudioPlaybackCallback(mAudioPlaybackCallback);
@@ -742,61 +744,45 @@ public class MediaPlayerList {
        }
    };

    private final MediaSessionManager.Callback mButtonDispatchCallback =
            new MediaSessionManager.Callback() {
    private final MediaSessionManager.OnMediaKeyEventSessionChangedListener
            mMediaKeyEventSessionChangedListener =
            new MediaSessionManager.OnMediaKeyEventSessionChangedListener() {
                @Override
                public void onMediaKeyEventDispatched(KeyEvent event, MediaSession.Token token) {
                    // TODO (apanicke): Add logging for these
                public void onMediaKeyEventSessionChanged(String packageName,
                        MediaSession.Token token) {
                    if (mMediaSessionManager == null) {
                        Log.w(TAG, "onMediaKeyEventSessionChanged(): Unexpected callback "
                                + "from the MediaSessionManager, pkg" + packageName + ", token="
                                + token);
                        return;
                    }

                @Override
                public void onMediaKeyEventDispatched(KeyEvent event, ComponentName receiver) {
                    // TODO (apanicke): Add logging for these
                    if (TextUtils.isEmpty(packageName)) {
                        return;
                    }

                @Override
                public void onAddressedPlayerChanged(MediaSession.Token token) {
                    if (token != null) {
                        android.media.session.MediaController controller =
                                new android.media.session.MediaController(mContext, token);

                    if (mMediaSessionManager == null) {
                        Log.w(TAG, "onAddressedPlayerChanged(Token): Unexpected callback "
                                + "from the MediaSessionManager");
                        return;
                    }

                        if (!mMediaPlayerIds.containsKey(controller.getPackageName())) {
                            // Since we have a controller, we can try to to recover by adding the
                            // player and then setting it as active.
                        Log.w(TAG, "onAddressedPlayerChanged(Token): Addressed Player "
                            Log.w(TAG, "onMediaKeyEventSessionChanged(Token): Addressed Player "
                                    + "changed to a player we didn't have a session for");
                            addMediaPlayer(controller);
                        }

                    Log.i(TAG, "onAddressedPlayerChanged: token=" + controller.getPackageName());
                        Log.i(TAG, "onMediaKeyEventSessionChanged: token="
                                + controller.getPackageName());
                        setActivePlayer(mMediaPlayerIds.get(controller.getPackageName()));
                }

                @Override
                public void onAddressedPlayerChanged(ComponentName receiver) {
                    if (mMediaSessionManager == null) {
                        Log.w(TAG, "onAddressedPlayerChanged(Component): Unexpected callback "
                                + "from the MediaSessionManager");
                        return;
                    }

                    if (receiver == null) {
                        return;
                    }

                    if (!mMediaPlayerIds.containsKey(receiver.getPackageName())) {
                        e("onAddressedPlayerChanged(Component): Addressed Player "
                    } else {
                        if (!mMediaPlayerIds.containsKey(packageName)) {
                            e("onMediaKeyEventSessionChanged(PackageName): Media key event session "
                                    + "changed to a player we don't have a session for");
                            return;
                        }

                    Log.i(TAG, "onAddressedPlayerChanged: component=" + receiver.getPackageName());
                    setActivePlayer(mMediaPlayerIds.get(receiver.getPackageName()));
                        Log.i(TAG, "onMediaKeyEventSessionChanged: packageName=" + packageName);
                        setActivePlayer(mMediaPlayerIds.get(packageName));
                    }
                }
            };