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

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

Merge "AVRCP_CT: Support Available Player Changed in AVRCP_CT service"

parents c4140ab6 4b8657fe
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ static jmethodID method_handleSetBrowsedPlayerRsp;
static jmethodID method_handleSetAddressedPlayerRsp;
static jmethodID method_handleAddressedPlayerChanged;
static jmethodID method_handleNowPlayingContentChanged;
static jmethodID method_onAvailablePlayerChanged;

static jclass class_MediaBrowser_MediaItem;
static jclass class_AvrcpPlayer;
@@ -719,6 +720,31 @@ static void btavrcp_now_playing_content_changed_callback(
      sCallbacksObj, method_handleNowPlayingContentChanged, addr.get());
}

static void btavrcp_available_player_changed_callback (
    const RawAddress& bd_addr) {
    ALOGI("%s", __func__);

    std::shared_lock<std::shared_timed_mutex> lock(sCallbacks_mutex);

    CallbackEnv sCallbackEnv(__func__);
    if (!sCallbacksObj) {
        ALOGE("%s: sCallbacksObj is null", __func__);
        return;
    }
    if (!sCallbackEnv.valid()) return;
    ScopedLocalRef<jbyteArray> addr(
        sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
    if (!addr.get()) {
      ALOGE("%s: Failed to allocate a new byte array", __func__);
      return;
    }

    sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                     (jbyte*)&bd_addr);
    sCallbackEnv->CallVoidMethod(
        sCallbacksObj, method_onAvailablePlayerChanged, addr.get());
}

static btrc_ctrl_callbacks_t sBluetoothAvrcpCallbacks = {
    sizeof(sBluetoothAvrcpCallbacks),
    btavrcp_passthrough_response_callback,
@@ -738,7 +764,8 @@ static btrc_ctrl_callbacks_t sBluetoothAvrcpCallbacks = {
    btavrcp_set_browsed_player_callback,
    btavrcp_set_addressed_player_callback,
    btavrcp_addressed_player_changed_callback,
    btavrcp_now_playing_content_changed_callback};
    btavrcp_now_playing_content_changed_callback,
    btavrcp_available_player_changed_callback};

static void classInitNative(JNIEnv* env, jclass clazz) {
  method_handlePassthroughRsp =
@@ -804,6 +831,8 @@ static void classInitNative(JNIEnv* env, jclass clazz) {
      env->GetMethodID(clazz, "handleAddressedPlayerChanged", "([BI)V");
  method_handleNowPlayingContentChanged =
      env->GetMethodID(clazz, "handleNowPlayingContentChanged", "([B)V");
  method_onAvailablePlayerChanged =
      env->GetMethodID(clazz, "onAvailablePlayerChanged", "([B)V");

  ALOGI("%s: succeeds", __func__);
}
+12 −0
Original line number Diff line number Diff line
@@ -435,6 +435,18 @@ public class AvrcpControllerService extends ProfileService {
        }
    }

    private void onAvailablePlayerChanged(byte[] address) {
        if (DBG) {
            Log.d(TAG," onAvailablePlayerChanged");
        }
        BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(address);

        AvrcpControllerStateMachine stateMachine = getStateMachine(device);
        if (stateMachine != null) {
            stateMachine.sendMessage(AvrcpControllerStateMachine.MESSAGE_PROCESS_AVAILABLE_PLAYER_CHANGED);
        }
    }

    // Browsing related JNI callbacks.
    void handleGetFolderItemsRsp(byte[] address, int status, MediaItem[] items) {
        if (DBG) {
+12 −0
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ class AvrcpControllerStateMachine extends StateMachine {
    static final int MESSAGE_PROCESS_NOW_PLAYING_CONTENTS_CHANGED = 216;
    static final int MESSAGE_PROCESS_SUPPORTED_APPLICATION_SETTINGS = 217;
    static final int MESSAGE_PROCESS_CURRENT_APPLICATION_SETTINGS = 218;
    static final int MESSAGE_PROCESS_AVAILABLE_PLAYER_CHANGED = 219;

    //300->399 Events for Browsing
    static final int MESSAGE_GET_FOLDER_ITEMS = 300;
@@ -400,6 +401,10 @@ class AvrcpControllerStateMachine extends StateMachine {
                    BluetoothMediaBrowserService.notifyChanged(mAddressedPlayer.getPlaybackState());
                    return true;

                case MESSAGE_PROCESS_AVAILABLE_PLAYER_CHANGED:
                    processAvailablePlayerChanged();
                    return true;

                case DISCONNECT:
                    transitionTo(mDisconnecting);
                    return true;
@@ -471,6 +476,13 @@ class AvrcpControllerStateMachine extends StateMachine {
                            PlayerApplicationSettings.mapAvrcpPlayerSettingstoBTattribVal(
                                    PlayerApplicationSettings.SHUFFLE_STATUS, shuffleMode)});
        }

        private void processAvailablePlayerChanged() {
            logD("processAvailablePlayerChanged");
            mBrowseTree.mRootNode.setCached(false);
            mBrowseTree.mRootNode.setExpectedChildren(255);
            BluetoothMediaBrowserService.notifyChanged(mBrowseTree.mRootNode);
        }
    }

    // Handle the get folder listing action