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

Commit 87580fa4 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "Proper Handling of Player Application Attribute change"

parents ed5ce052 af02837b
Loading
Loading
Loading
Loading
+58 −18
Original line number Diff line number Diff line
@@ -310,6 +310,7 @@ public final class Avrcp {
    private final String UPDATE_ATTRIB_TEXT = "UpdateAttributesText";
    private final String UPDATE_VALUE_TEXT = "UpdateValuesText";
    private ArrayList <Integer> mPendingCmds;
    private ArrayList <Integer> mPendingSetAttributes;

    static {
        classInitNative();
@@ -359,6 +360,7 @@ public final class Avrcp {
        Looper looper = thread.getLooper();
        mHandler = new AvrcpMessageHandler(looper);
        mPendingCmds = new ArrayList<Integer>();
        mPendingSetAttributes = new ArrayList<Integer>();
        mCurrentPath = PATH_INVALID;
        mCurrentPathUid = null;
        mMediaUri = Uri.EMPTY;
@@ -438,17 +440,14 @@ public final class Avrcp {
                    case SET_ATTRIBUTE_VALUES:
                        data = intent.getByteArrayExtra(EXTRA_ATTRIB_VALUE_PAIRS);
                        updateLocalPlayerSettings(data);
                        Log.v(TAG,"SET_ATTRIBUTE_VALUES: " + data[0] + ", " + data[1]);
                        if (data[0] == ATTRIBUTE_EQUALIZER ||
                            data[0] == ATTRIBUTE_REPEATMODE ||
                            data[0] == ATTRIBUTE_SHUFFLEMODE) {
                        Log.v(TAG,"SET_ATTRIBUTE_VALUES: ");
                        if (isSetAttrValRsp){
                            isSetAttrValRsp = false;
                            Log.v(TAG,"Respond to SET_ATTRIBUTE_VALUES request");
                                if (data[1] == ATTRIBUTE_NOTSUPPORTED) {
                                   SendSetPlayerAppRspNative(INTERNAL_ERROR);
                                } else {
                            if (checkPlayerAttributeResponse(data)) {
                               SendSetPlayerAppRspNative(OPERATION_SUCCESSFUL);
                            } else {
                               SendSetPlayerAppRspNative(INTERNAL_ERROR);
                            }
                        } else if (mPlayerStatusChangeNT == NOTIFICATION_TYPE_INTERIM) {
                            Log.v(TAG,"Send Player appl attribute changed response");
@@ -457,7 +456,6 @@ public final class Avrcp {
                        } else {
                            Log.v(TAG,"Drop Set Attr Val update from media player");
                        }
                        }
                    break;
                    case GET_ATTRIBUTE_TEXT:
                        text = intent.getStringArrayExtra(EXTRA_ATTRIBUTE_STRING_ARRAY);
@@ -3366,7 +3364,9 @@ public final class Avrcp {
    }

    private void updateLocalPlayerSettings( byte[] data) {
        if (DEBUG) Log.v(TAG, "updateLocalPlayerSettings");
        for (int i = 0; i < data.length; i += 2) {
            if (DEBUG) Log.v(TAG, "ID: " + data[i] + " Value: " + data[i+1]);
            switch (data[i]) {
                case ATTRIBUTE_EQUALIZER:
                    settingValues.eq_value = data[i+1];
@@ -3384,6 +3384,45 @@ private void updateLocalPlayerSettings( byte[] data) {
        }
    }

    private boolean checkPlayerAttributeResponse( byte[] data) {
        boolean ret = false;
        if (DEBUG) Log.v(TAG, "checkPlayerAttributeResponse");
        for (int i = 0; i < data.length; i += 2) {
            if (DEBUG) Log.v(TAG, "ID: " + data[i] + " Value: " + data[i+1]);
            switch (data[i]) {
                case ATTRIBUTE_EQUALIZER:
                    if (mPendingSetAttributes.contains(new Integer(ATTRIBUTE_EQUALIZER))) {
                        if(data[i+1] == ATTRIBUTE_NOTSUPPORTED) {
                            ret = false;
                        } else {
                            ret = true;
                        }
                    }
                break;
                case ATTRIBUTE_REPEATMODE:
                    if (mPendingSetAttributes.contains(new Integer(ATTRIBUTE_REPEATMODE))) {
                        if(data[i+1] == ATTRIBUTE_NOTSUPPORTED) {
                            ret = false;
                        } else {
                            ret = true;
                        }
                    }
                break;
                case ATTRIBUTE_SHUFFLEMODE:
                    if (mPendingSetAttributes.contains(new Integer(ATTRIBUTE_SHUFFLEMODE))) {
                        if(data[i+1] == ATTRIBUTE_NOTSUPPORTED) {
                            ret = false;
                        } else {
                            ret = true;
                        }
                    }
                break;
            }
        }
        mPendingSetAttributes.clear();
        return ret;
    }

    //PDU ID 0x11
    private void onListPlayerAttributeRequest() {
        if (DEBUG) Log.v(TAG, "onListPlayerAttributeRequest");
@@ -3446,6 +3485,7 @@ private void updateLocalPlayerSettings( byte[] data) {
        {
            array[i] = attr_id[i] ;
            array[i+1] = attr_val[i];
            mPendingSetAttributes.add(new Integer(attr_id[i]));
        }
        Intent intent = new Intent(PLAYERSETTINGS_REQUEST);
        intent.putExtra(COMMAND, CMDSET);