Loading android/app/src/com/android/bluetooth/hfpclient/HeadsetClientService.java +18 −4 Original line number Diff line number Diff line Loading @@ -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); } } } } } } Loading android/app/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java +17 −10 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. Loading Loading @@ -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; Loading android/app/src/com/android/bluetooth/hfpclient/NativeInterface.java +5 −3 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading
android/app/src/com/android/bluetooth/hfpclient/HeadsetClientService.java +18 −4 Original line number Diff line number Diff line Loading @@ -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); } } } } } } Loading
android/app/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java +17 −10 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. Loading Loading @@ -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; Loading
android/app/src/com/android/bluetooth/hfpclient/NativeInterface.java +5 −3 Original line number Diff line number Diff line Loading @@ -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) { Loading