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

Commit af02837b authored by Ayan Ghosh's avatar Ayan Ghosh
Browse files

Proper Handling of Player Application Attribute change

Proper handling of Player Application Attribute change.
Send response to remote based on the update received
from mediaplayer.

Change-Id: I3d42f110c8152b9e543e0131f39075d959696cb3
parent 66a8e709
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);