Loading android/app/src/com/android/bluetooth/hfp/HeadsetService.java 100755 → 100644 +54 −61 Original line number Diff line number Diff line Loading @@ -97,11 +97,10 @@ public class HeadsetService extends ProfileService { } else if (action.equals(AudioManager.VOLUME_CHANGED_ACTION)) { int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1); if (streamType == AudioManager.STREAM_BLUETOOTH_SCO) { mStateMachine.sendMessage(HeadsetStateMachine.INTENT_SCO_VOLUME_CHANGED, intent); mStateMachine.sendMessage( HeadsetStateMachine.INTENT_SCO_VOLUME_CHANGED, intent); } } else if (action.equals(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY)) { } else if (action.equals(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY)) { int requestType = intent.getIntExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS); if (requestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) { Loading @@ -115,7 +114,8 @@ public class HeadsetService extends ProfileService { /** * Handlers for incoming service calls */ private static class BluetoothHeadsetBinder extends IBluetoothHeadset.Stub implements IProfileServiceBinder { private static class BluetoothHeadsetBinder extends IBluetoothHeadset.Stub implements IProfileServiceBinder { private HeadsetService mService; public BluetoothHeadsetBinder(HeadsetService svc) { Loading Loading @@ -268,8 +268,8 @@ public class HeadsetService extends ProfileService { return service.stopScoUsingVirtualVoiceCall(device); } public void phoneStateChanged(int numActive, int numHeld, int callState, String number, int type) { public void phoneStateChanged( int numActive, int numHeld, int callState, String number, int type) { HeadsetService service = getService(); if (service == null) return; service.phoneStateChanged(numActive, numHeld, callState, number, type); Loading @@ -282,9 +282,8 @@ public class HeadsetService extends ProfileService { service.clccResponse(index, direction, status, mode, mpty, number, type); } public boolean sendVendorSpecificResultCode(BluetoothDevice device, String command, String arg) { public boolean sendVendorSpecificResultCode( BluetoothDevice device, String command, String arg) { HeadsetService service = getService(); if (service == null) { return false; Loading Loading @@ -347,8 +346,7 @@ public class HeadsetService extends ProfileService { } public boolean connect(BluetoothDevice device) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); if (getPriority(device) == BluetoothProfile.PRIORITY_OFF) { return false; Loading @@ -356,8 +354,8 @@ public class HeadsetService extends ProfileService { int connectionState = mStateMachine.getConnectionState(device); Log.d(TAG, "connectionState = " + connectionState); if (connectionState == BluetoothProfile.STATE_CONNECTED || connectionState == BluetoothProfile.STATE_CONNECTING) { if (connectionState == BluetoothProfile.STATE_CONNECTED || connectionState == BluetoothProfile.STATE_CONNECTING) { return false; } Loading @@ -366,11 +364,10 @@ public class HeadsetService extends ProfileService { } boolean disconnect(BluetoothDevice device) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { return false; } Loading @@ -394,18 +391,15 @@ public class HeadsetService extends ProfileService { } public boolean setPriority(BluetoothDevice device, int priority) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); Settings.Global.putInt(getContentResolver(), Settings.Global.getBluetoothHeadsetPriorityKey(device.getAddress()), priority); Settings.Global.getBluetoothHeadsetPriorityKey(device.getAddress()), priority); if (DBG) Log.d(TAG, "Saved priority " + device + " = " + priority); return true; } public int getPriority(BluetoothDevice device) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); int priority = Settings.Global.getInt(getContentResolver(), Settings.Global.getBluetoothHeadsetPriorityKey(device.getAddress()), BluetoothProfile.PRIORITY_UNDEFINED); Loading @@ -415,8 +409,8 @@ public class HeadsetService extends ProfileService { boolean startVoiceRecognition(BluetoothDevice device) { enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission"); int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { return false; } mStateMachine.sendMessage(HeadsetStateMachine.VOICE_RECOGNITION_START); Loading @@ -429,8 +423,8 @@ public class HeadsetService extends ProfileService { // But since we allow startVoiceRecognition in STATE_CONNECTED and // STATE_CONNECTING state, we do these 2 in this method int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { return false; } mStateMachine.sendMessage(HeadsetStateMachine.VOICE_RECOGNITION_STOP); Loading Loading @@ -507,16 +501,16 @@ public class HeadsetService extends ProfileService { boolean stopScoUsingVirtualVoiceCall(BluetoothDevice device) { int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { return false; } mStateMachine.sendMessage(HeadsetStateMachine.VIRTUAL_CALL_STOP, device); return true; } private void phoneStateChanged(int numActive, int numHeld, int callState, String number, int type) { private void phoneStateChanged( int numActive, int numHeld, int callState, String number, int type) { enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, null); Message msg = mStateMachine.obtainMessage(HeadsetStateMachine.CALL_STATE_CHANGED); msg.obj = new HeadsetCallState(numActive, numHeld, callState, number, type); Loading @@ -524,16 +518,15 @@ public class HeadsetService extends ProfileService { mStateMachine.sendMessage(msg); } private void clccResponse(int index, int direction, int status, int mode, boolean mpty, String number, int type) { private void clccResponse( int index, int direction, int status, int mode, boolean mpty, String number, int type) { enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, null); mStateMachine.sendMessage(HeadsetStateMachine.SEND_CCLC_RESPONSE, new HeadsetClccResponse(index, direction, status, mode, mpty, number, type)); } private boolean sendVendorSpecificResultCode(BluetoothDevice device, String command, String arg) { private boolean sendVendorSpecificResultCode( BluetoothDevice device, String command, String arg) { enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission"); int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED) { Loading Loading @@ -584,15 +577,15 @@ public class HeadsetService extends ProfileService { private boolean bindResponse(int ind_id, boolean ind_status) { for (BluetoothDevice device : getConnectedDevices()) { int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { continue; } if (DBG) Log.d("Bind Response sent for", device.getAddress()); Message msg = mStateMachine.obtainMessage(HeadsetStateMachine.BIND_RESPONSE); msg.obj = device; msg.arg1 = ind_id; msg.arg2 = (ind_status == true) ? 1 : 0; msg.arg2 = ind_status ? 1 : 0; mStateMachine.sendMessage(msg); return true; } Loading android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java +684 −815 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
android/app/src/com/android/bluetooth/hfp/HeadsetService.java 100755 → 100644 +54 −61 Original line number Diff line number Diff line Loading @@ -97,11 +97,10 @@ public class HeadsetService extends ProfileService { } else if (action.equals(AudioManager.VOLUME_CHANGED_ACTION)) { int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1); if (streamType == AudioManager.STREAM_BLUETOOTH_SCO) { mStateMachine.sendMessage(HeadsetStateMachine.INTENT_SCO_VOLUME_CHANGED, intent); mStateMachine.sendMessage( HeadsetStateMachine.INTENT_SCO_VOLUME_CHANGED, intent); } } else if (action.equals(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY)) { } else if (action.equals(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY)) { int requestType = intent.getIntExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS); if (requestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) { Loading @@ -115,7 +114,8 @@ public class HeadsetService extends ProfileService { /** * Handlers for incoming service calls */ private static class BluetoothHeadsetBinder extends IBluetoothHeadset.Stub implements IProfileServiceBinder { private static class BluetoothHeadsetBinder extends IBluetoothHeadset.Stub implements IProfileServiceBinder { private HeadsetService mService; public BluetoothHeadsetBinder(HeadsetService svc) { Loading Loading @@ -268,8 +268,8 @@ public class HeadsetService extends ProfileService { return service.stopScoUsingVirtualVoiceCall(device); } public void phoneStateChanged(int numActive, int numHeld, int callState, String number, int type) { public void phoneStateChanged( int numActive, int numHeld, int callState, String number, int type) { HeadsetService service = getService(); if (service == null) return; service.phoneStateChanged(numActive, numHeld, callState, number, type); Loading @@ -282,9 +282,8 @@ public class HeadsetService extends ProfileService { service.clccResponse(index, direction, status, mode, mpty, number, type); } public boolean sendVendorSpecificResultCode(BluetoothDevice device, String command, String arg) { public boolean sendVendorSpecificResultCode( BluetoothDevice device, String command, String arg) { HeadsetService service = getService(); if (service == null) { return false; Loading Loading @@ -347,8 +346,7 @@ public class HeadsetService extends ProfileService { } public boolean connect(BluetoothDevice device) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); if (getPriority(device) == BluetoothProfile.PRIORITY_OFF) { return false; Loading @@ -356,8 +354,8 @@ public class HeadsetService extends ProfileService { int connectionState = mStateMachine.getConnectionState(device); Log.d(TAG, "connectionState = " + connectionState); if (connectionState == BluetoothProfile.STATE_CONNECTED || connectionState == BluetoothProfile.STATE_CONNECTING) { if (connectionState == BluetoothProfile.STATE_CONNECTED || connectionState == BluetoothProfile.STATE_CONNECTING) { return false; } Loading @@ -366,11 +364,10 @@ public class HeadsetService extends ProfileService { } boolean disconnect(BluetoothDevice device) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { return false; } Loading @@ -394,18 +391,15 @@ public class HeadsetService extends ProfileService { } public boolean setPriority(BluetoothDevice device, int priority) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); Settings.Global.putInt(getContentResolver(), Settings.Global.getBluetoothHeadsetPriorityKey(device.getAddress()), priority); Settings.Global.getBluetoothHeadsetPriorityKey(device.getAddress()), priority); if (DBG) Log.d(TAG, "Saved priority " + device + " = " + priority); return true; } public int getPriority(BluetoothDevice device) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); int priority = Settings.Global.getInt(getContentResolver(), Settings.Global.getBluetoothHeadsetPriorityKey(device.getAddress()), BluetoothProfile.PRIORITY_UNDEFINED); Loading @@ -415,8 +409,8 @@ public class HeadsetService extends ProfileService { boolean startVoiceRecognition(BluetoothDevice device) { enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission"); int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { return false; } mStateMachine.sendMessage(HeadsetStateMachine.VOICE_RECOGNITION_START); Loading @@ -429,8 +423,8 @@ public class HeadsetService extends ProfileService { // But since we allow startVoiceRecognition in STATE_CONNECTED and // STATE_CONNECTING state, we do these 2 in this method int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { return false; } mStateMachine.sendMessage(HeadsetStateMachine.VOICE_RECOGNITION_STOP); Loading Loading @@ -507,16 +501,16 @@ public class HeadsetService extends ProfileService { boolean stopScoUsingVirtualVoiceCall(BluetoothDevice device) { int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { return false; } mStateMachine.sendMessage(HeadsetStateMachine.VIRTUAL_CALL_STOP, device); return true; } private void phoneStateChanged(int numActive, int numHeld, int callState, String number, int type) { private void phoneStateChanged( int numActive, int numHeld, int callState, String number, int type) { enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, null); Message msg = mStateMachine.obtainMessage(HeadsetStateMachine.CALL_STATE_CHANGED); msg.obj = new HeadsetCallState(numActive, numHeld, callState, number, type); Loading @@ -524,16 +518,15 @@ public class HeadsetService extends ProfileService { mStateMachine.sendMessage(msg); } private void clccResponse(int index, int direction, int status, int mode, boolean mpty, String number, int type) { private void clccResponse( int index, int direction, int status, int mode, boolean mpty, String number, int type) { enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, null); mStateMachine.sendMessage(HeadsetStateMachine.SEND_CCLC_RESPONSE, new HeadsetClccResponse(index, direction, status, mode, mpty, number, type)); } private boolean sendVendorSpecificResultCode(BluetoothDevice device, String command, String arg) { private boolean sendVendorSpecificResultCode( BluetoothDevice device, String command, String arg) { enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission"); int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED) { Loading Loading @@ -584,15 +577,15 @@ public class HeadsetService extends ProfileService { private boolean bindResponse(int ind_id, boolean ind_status) { for (BluetoothDevice device : getConnectedDevices()) { int connectionState = mStateMachine.getConnectionState(device); if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { if (connectionState != BluetoothProfile.STATE_CONNECTED && connectionState != BluetoothProfile.STATE_CONNECTING) { continue; } if (DBG) Log.d("Bind Response sent for", device.getAddress()); Message msg = mStateMachine.obtainMessage(HeadsetStateMachine.BIND_RESPONSE); msg.obj = device; msg.arg1 = ind_id; msg.arg2 = (ind_status == true) ? 1 : 0; msg.arg2 = ind_status ? 1 : 0; mStateMachine.sendMessage(msg); return true; } Loading
android/app/src/com/android/bluetooth/hfp/HeadsetStateMachine.java +684 −815 File changed.Preview size limit exceeded, changes collapsed. Show changes