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

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

Merge "HFP client volume control"

parents c226b556 2470972a
Loading
Loading
Loading
Loading
+18 −4
Original line number Diff line number Diff line
@@ -162,16 +162,30 @@ public class HeadsetClientService extends ProfileService {
            // ({@link HeadsetClientStateMachine#SET_SPEAKER_VOLUME} in
            // {@link HeadsetClientStateMachine} for details.
            if (action.equals(AudioManager.VOLUME_CHANGED_ACTION)) {
                Log.d(TAG, "Volume changed for stream: " +
                    intent.getExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE));
                if (DBG) {
                    Log.d(TAG,
                            "Volume changed for stream: "
                                    + intent.getExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE));
                }
                int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1);
                if (streamType == AudioManager.STREAM_VOICE_CALL) {
                    int streamValue = intent
                            .getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, -1);
                    int hfVol = HeadsetClientStateMachine.amToHfVol(streamValue);
                    Log.d(TAG, "Setting volume to audio manager: " + streamValue + " hands free: "
                                    + hfVol);
                    if (DBG) {
                        Log.d(TAG,
                                "Setting volume to audio manager: " + streamValue
                                        + " hands free: " + hfVol);
                    }
                    mAudioManager.setParameters("hfp_volume=" + hfVol);
                    synchronized (this) {
                        for (HeadsetClientStateMachine sm : mStateMachineMap.values()) {
                            if (sm != null) {
                                sm.sendMessage(
                                        HeadsetClientStateMachine.SET_SPEAKER_VOLUME, streamValue);
                            }
                        }
                    }
                }
            }
        }
+17 −10
Original line number Diff line number Diff line
@@ -1051,12 +1051,15 @@ public class HeadsetClientStateMachine extends StateMachine {
    }

    class Connected extends State {
        int mCommandedSpeakerVolume = -1;

        @Override
        public void enter() {
            if (DBG) {
                Log.d(TAG, "Enter Connected: " + getCurrentMessage().what);
            }
            mAudioWbs = false;
            mCommandedSpeakerVolume = -1;
        }

        @Override
@@ -1120,11 +1123,15 @@ public class HeadsetClientStateMachine extends StateMachine {
                    // This message should always contain the volume in AudioManager max normalized.
                    int amVol = message.arg1;
                    int hfVol = amToHfVol(amVol);
                    Log.d(TAG,"HF volume is set to " + hfVol);
                    sAudioManager.setParameters("hfp_volume=" + hfVol);
                    // We do not set the volume in native because multiple devices might be
                    // connected and it does not make sense to synchronize them. Car becomes the
                    // master in such case.
                    if (amVol != mCommandedSpeakerVolume) {
                        Log.d(TAG, "Volume" + amVol + ":" + mCommandedSpeakerVolume);
                        // Volume was changed by a 3rd party
                        mCommandedSpeakerVolume = -1;
                        if (NativeInterface.setVolumeNative(getByteAddress(mCurrentDevice),
                                    HeadsetClientHalConstants.VOLUME_TYPE_SPK, hfVol)) {
                            addQueuedAction(SET_SPEAKER_VOLUME);
                        }
                    }
                    break;
                case DIAL_NUMBER:
                    // Add the call as an outgoing call.
@@ -1305,12 +1312,12 @@ public class HeadsetClientStateMachine extends StateMachine {
                            break;
                        case StackEvent.EVENT_TYPE_VOLUME_CHANGED:
                            if (event.valueInt == HeadsetClientHalConstants.VOLUME_TYPE_SPK) {
                                Log.d(TAG, "AM volume set to " +
                                      hfToAmVol(event.valueInt2));
                                mCommandedSpeakerVolume = hfToAmVol(event.valueInt2);
                                Log.d(TAG, "AM volume set to " + mCommandedSpeakerVolume);
                                sAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
                                        hfToAmVol(event.valueInt2), AudioManager.FLAG_SHOW_UI);
                            } else if (event.valueInt ==
                                    HeadsetClientHalConstants.VOLUME_TYPE_MIC) {
                                        +mCommandedSpeakerVolume, AudioManager.FLAG_SHOW_UI);
                            } else if (event.valueInt
                                    == HeadsetClientHalConstants.VOLUME_TYPE_MIC) {
                                sAudioManager.setMicrophoneMute(event.valueInt2 == 0);
                            }
                            break;
+5 −3
Original line number Diff line number Diff line
@@ -311,9 +311,11 @@ class NativeInterface {
            Log.d(TAG, "onVolumeChange: address " + address + " event "  + event);
        }
        HeadsetClientService service = HeadsetClientService.getHeadsetClientService();
        // Ignore volume changes from the Phone. This is to avoid the scenario where we may have two
        // phones connected each tries to set different volumes.
        Log.w(TAG, "onVolumeChange: Ignoring message: " + event);
        if (service != null) {
            service.messageFromNative(event);
        } else {
            Log.w(TAG, "onVolumeChange: Ignoring message because service not available: " + event);
        }
    }

    private void onCmdResult(int type, int cme, byte[] address) {