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

Commit 7d3d42bb authored by William Escande's avatar William Escande
Browse files

AVRCP Controller browsing fails with static JNI interface methods

Bug: 302152082
Test: None | Jni is not tested and excluded from test coverage
Test: Connect an AVRCP Target device and validate that the browse tree
and now playing list both appear

Change-Id: I1a3bfb94de6f76e863772d4dd2385ad5fbac1f81
parent ce6b6418
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ static jmethodID method_handleNowPlayingContentChanged;
static jmethodID method_onAvailablePlayerChanged;
static jmethodID method_getRcPsm;

static jclass class_AvrcpControllerNativeInterface;
static jclass class_AvrcpItem;
static jclass class_AvrcpPlayer;

@@ -437,10 +438,11 @@ static void btavrcp_get_folder_items_callback(

        ScopedLocalRef<jobject> mediaObj(
            sCallbackEnv.get(),
            (jobject)sCallbackEnv->CallObjectMethod(
                sCallbacksObj, method_createFromNativeMediaItem, addr.get(),
                uid, (jint)item->media.type, mediaName.get(),
                attrIdArray.get(), attrValArray.get()));
            (jobject)sCallbackEnv->CallStaticObjectMethod(
                class_AvrcpControllerNativeInterface,
                method_createFromNativeMediaItem, addr.get(), uid,
                (jint)item->media.type, mediaName.get(), attrIdArray.get(),
                attrValArray.get()));
        if (!mediaObj.get()) {
          ALOGE("%s failed to create AvrcpItem for type ITEM_MEDIA", __func__);
          return;
@@ -462,9 +464,10 @@ static void btavrcp_get_folder_items_callback(
        long long uid = *(long long*)item->folder.uid;
        ScopedLocalRef<jobject> folderObj(
            sCallbackEnv.get(),
            (jobject)sCallbackEnv->CallObjectMethod(
                sCallbacksObj, method_createFromNativeFolderItem, addr.get(),
                uid, (jint)item->folder.type, folderName.get(),
            (jobject)sCallbackEnv->CallStaticObjectMethod(
                class_AvrcpControllerNativeInterface,
                method_createFromNativeFolderItem, addr.get(), uid,
                (jint)item->folder.type, folderName.get(),
                (jint)item->folder.playable));
        if (!folderObj.get()) {
          ALOGE("%s failed to create AvrcpItem for type ITEM_FOLDER", __func__);
@@ -502,9 +505,10 @@ static void btavrcp_get_folder_items_callback(
        }
        ScopedLocalRef<jobject> playerObj(
            sCallbackEnv.get(),
            (jobject)sCallbackEnv->CallObjectMethod(
                sCallbacksObj, method_createFromNativePlayerItem, addr.get(),
                id, playerName.get(), featureBitArray.get(), playStatus,
            (jobject)sCallbackEnv->CallStaticObjectMethod(
                class_AvrcpControllerNativeInterface,
                method_createFromNativePlayerItem, addr.get(), id,
                playerName.get(), featureBitArray.get(), playStatus,
                playerType));
        if (!playerObj.get()) {
          ALOGE("%s failed to create AvrcpPlayer from ITEM_PLAYER", __func__);
@@ -730,6 +734,11 @@ static void initNative(JNIEnv* env, jobject object) {
      env->FindClass("com/android/bluetooth/avrcpcontroller/AvrcpPlayer");
  class_AvrcpPlayer = (jclass)env->NewGlobalRef(tmpBtPlayer);

  jclass tmpControllerInterface = env->FindClass(
      "com/android/bluetooth/avrcpcontroller/AvrcpControllerNativeInterface");
  class_AvrcpControllerNativeInterface =
      (jclass)env->NewGlobalRef(tmpControllerInterface);

  const bt_interface_t* btInf = getBluetoothInterface();
  if (btInf == NULL) {
    ALOGE("Bluetooth module is not loaded");