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

Commit 0f5b951d authored by tedwang's avatar tedwang Committed by Hansong Zhang
Browse files

avrcp-addressed-player-changed

Send player update to native stack in PTS mode

Bug: 79375787
Bug: 79376305
Test: PTS Test AVRCPTG/MPS/BV-05-C AVRCP/TG/MPS/BV-07-C
Change-Id: I6851c0b147c2ee67b5ed3ec9c3491baa68e2e0d2
parent f32b53ea
Loading
Loading
Loading
Loading
+12 −0
Original line number Original line Diff line number Diff line
@@ -28,6 +28,7 @@ import android.os.Binder;
import android.os.Build;
import android.os.Build;
import android.os.ParcelUuid;
import android.os.ParcelUuid;
import android.os.Process;
import android.os.Process;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
import android.util.Log;
import android.util.Log;
@@ -48,6 +49,7 @@ import java.util.concurrent.TimeUnit;
public final class Utils {
public final class Utils {
    private static final String TAG = "BluetoothUtils";
    private static final String TAG = "BluetoothUtils";
    private static final int MICROS_PER_UNIT = 625;
    private static final int MICROS_PER_UNIT = 625;
    private static final String PTS_TEST_MODE_PROPERTY = "persist.bluetooth.pts";


    static final int BD_ADDR_LEN = 6; // bytes
    static final int BD_ADDR_LEN = 6; // bytes
    static final int BD_UUID_LEN = 16; // bytes
    static final int BD_UUID_LEN = 16; // bytes
@@ -383,6 +385,16 @@ public final class Utils {
        }
        }
    }
    }


    /**
     * Check if we are running in PTS test mode. To enable/disable PTS test mode, invoke
     * {@code adb shell setprop persist.bluetooth.pts true/false}
     *
     * @return true if in PTS Test mode, false otherwise
     */
    public static boolean isPtsTestMode() {
        return SystemProperties.getBoolean(PTS_TEST_MODE_PROPERTY, false);
    }

    /**
    /**
     * Get uid/pid string in a binder call
     * Get uid/pid string in a binder call
     *
     *
+8 −1
Original line number Original line Diff line number Diff line
@@ -61,7 +61,8 @@ public class AvrcpTargetService extends ProfileService {


    private static AvrcpTargetService sInstance = null;
    private static AvrcpTargetService sInstance = null;


    private class ListCallback implements MediaPlayerList.MediaUpdateCallback {
    class ListCallback implements MediaPlayerList.MediaUpdateCallback,
            MediaPlayerList.FolderUpdateCallback {
        @Override
        @Override
        public void run(MediaData data) {
        public void run(MediaData data) {
            boolean metadata = !Objects.equals(mCurrentData.metadata, data.metadata);
            boolean metadata = !Objects.equals(mCurrentData.metadata, data.metadata);
@@ -76,6 +77,12 @@ public class AvrcpTargetService extends ProfileService {


            mNativeInterface.sendMediaUpdate(metadata, state, queue);
            mNativeInterface.sendMediaUpdate(metadata, state, queue);
        }
        }

        @Override
        public void run(boolean availablePlayers, boolean addressedPlayers,
                boolean uids) {
            mNativeInterface.sendFolderUpdate(availablePlayers, addressedPlayers, uids);
        }
    }
    }


    private class AvrcpBroadcastReceiver extends BroadcastReceiver {
    private class AvrcpBroadcastReceiver extends BroadcastReceiver {
+22 −2
Original line number Original line Diff line number Diff line
@@ -32,6 +32,8 @@ import android.os.Looper;
import android.util.Log;
import android.util.Log;
import android.view.KeyEvent;
import android.view.KeyEvent;


import com.android.bluetooth.Utils;

import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashMap;
@@ -86,7 +88,7 @@ public class MediaPlayerList {
            Collections.synchronizedMap(new HashMap<Integer, BrowsedPlayerWrapper>());
            Collections.synchronizedMap(new HashMap<Integer, BrowsedPlayerWrapper>());
    private int mActivePlayerId = NO_ACTIVE_PLAYER;
    private int mActivePlayerId = NO_ACTIVE_PLAYER;


    private MediaUpdateCallback mCallback;
    private AvrcpTargetService.ListCallback mCallback;


    interface MediaUpdateCallback {
    interface MediaUpdateCallback {
        void run(MediaData data);
        void run(MediaData data);
@@ -100,6 +102,10 @@ public class MediaPlayerList {
        void run(String parentId, List<ListItem> items);
        void run(String parentId, List<ListItem> items);
    }
    }


    interface FolderUpdateCallback {
        void run(boolean availablePlayers, boolean addressedPlayers, boolean uids);
    }

    MediaPlayerList(Looper looper, Context context) {
    MediaPlayerList(Looper looper, Context context) {
        Log.v(TAG, "Creating MediaPlayerList");
        Log.v(TAG, "Creating MediaPlayerList");


@@ -122,7 +128,7 @@ public class MediaPlayerList {
        mMediaSessionManager.setCallback(mButtonDispatchCallback, null);
        mMediaSessionManager.setCallback(mButtonDispatchCallback, null);
    }
    }


    void init(MediaUpdateCallback callback) {
    void init(AvrcpTargetService.ListCallback callback) {
        Log.v(TAG, "Initializing MediaPlayerList");
        Log.v(TAG, "Initializing MediaPlayerList");
        mCallback = callback;
        mCallback = callback;


@@ -473,6 +479,10 @@ public class MediaPlayerList {
            return;
            return;
        }
        }


        if (Utils.isPtsTestMode()) {
            sendFolderUpdate(true, true, false);
        }

        sendMediaUpdate(getActivePlayer().getCurrentMediaData());
        sendMediaUpdate(getActivePlayer().getCurrentMediaData());
    }
    }


@@ -484,6 +494,16 @@ public class MediaPlayerList {
        mMediaSessionManager.dispatchMediaKeyEvent(event);
        mMediaSessionManager.dispatchMediaKeyEvent(event);
    }
    }


    private void sendFolderUpdate(boolean availablePlayers, boolean addressedPlayers,
            boolean uids) {
        d("sendFolderUpdate");
        if (mCallback == null) {
            return;
        }

        mCallback.run(availablePlayers, addressedPlayers, uids);
    }

    private void sendMediaUpdate(MediaData data) {
    private void sendMediaUpdate(MediaData data) {
        d("sendMediaUpdate");
        d("sendMediaUpdate");
        if (mCallback == null) {
        if (mCallback == null) {