diff options
Diffstat (limited to 'src/com/android/bluetooth/a2dp')
-rwxr-xr-x | src/com/android/bluetooth/a2dp/A2dpService.java | 46 | ||||
-rwxr-xr-x[-rw-r--r--] | src/com/android/bluetooth/a2dp/A2dpStateMachine.java | 20 |
2 files changed, 52 insertions, 14 deletions
diff --git a/src/com/android/bluetooth/a2dp/A2dpService.java b/src/com/android/bluetooth/a2dp/A2dpService.java index 48358903a..4441f4b99 100755 --- a/src/com/android/bluetooth/a2dp/A2dpService.java +++ b/src/com/android/bluetooth/a2dp/A2dpService.java @@ -25,6 +25,7 @@ public class A2dpService extends ProfileService { private static final String TAG="A2dpService"; private A2dpStateMachine mStateMachine; + private static A2dpService sAd2dpService; protected String getName() { return TAG; @@ -37,6 +38,7 @@ public class A2dpService extends ProfileService { protected boolean start() { mStateMachine = new A2dpStateMachine(this,this); mStateMachine.start(); + setA2dpService(this); return true; } @@ -50,11 +52,47 @@ public class A2dpService extends ProfileService { mStateMachine.cleanup(); mStateMachine=null; } + clearA2dpService(); return true; } //API Methods - boolean connect(BluetoothDevice device) { + + public static synchronized A2dpService getA2dpService(){ + if (sAd2dpService != null && sAd2dpService.isAvailable()) { + if (DBG) Log.d(TAG, "getA2DPService(): returning " + sAd2dpService); + return sAd2dpService; + } + if (DBG) { + if (sAd2dpService == null) { + Log.d(TAG, "getA2dpService(): service is NULL"); + } else if (!(sAd2dpService.isAvailable())) { + Log.d(TAG,"getA2dpService(): service is not available"); + } + } + return null; + } + + private static synchronized void setA2dpService(A2dpService instance) { + if (instance != null && instance.isAvailable()) { + if (DBG) Log.d(TAG, "setA2dpService(): set to: " + sAd2dpService); + sAd2dpService = instance; + } else { + if (DBG) { + if (sAd2dpService == null) { + Log.d(TAG, "setA2dpService(): service not available"); + } else if (!sAd2dpService.isAvailable()) { + Log.d(TAG,"setA2dpService(): service is cleaning up"); + } + } + } + } + + private static synchronized void clearA2dpService() { + sAd2dpService = null; + } + + public boolean connect(BluetoothDevice device) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); @@ -85,7 +123,7 @@ public class A2dpService extends ProfileService { return true; } - List<BluetoothDevice> getConnectedDevices() { + public List<BluetoothDevice> getConnectedDevices() { enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission"); return mStateMachine.getConnectedDevices(); } @@ -100,7 +138,7 @@ public class A2dpService extends ProfileService { return mStateMachine.getConnectionState(device); } - boolean setPriority(BluetoothDevice device, int priority) { + public boolean setPriority(BluetoothDevice device, int priority) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); Settings.Secure.putInt(getContentResolver(), @@ -110,7 +148,7 @@ public class A2dpService extends ProfileService { return true; } - int getPriority(BluetoothDevice device) { + public int getPriority(BluetoothDevice device) { enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); int priority = Settings.Secure.getInt(getContentResolver(), diff --git a/src/com/android/bluetooth/a2dp/A2dpStateMachine.java b/src/com/android/bluetooth/a2dp/A2dpStateMachine.java index 8d42512ee..c742fd483 100644..100755 --- a/src/com/android/bluetooth/a2dp/A2dpStateMachine.java +++ b/src/com/android/bluetooth/a2dp/A2dpStateMachine.java @@ -231,7 +231,11 @@ final class A2dpStateMachine extends StateMachine { Log.i(TAG,"Incoming A2DP rejected"); disconnectA2dpNative(getByteAddress(device)); // the other profile connection should be initiated - broadcastConnectOtherProfilesIntent(device); + AdapterService adapterService = AdapterService.getAdapterService(); + if (adapterService != null) { + adapterService.connectOtherProfile(device, + AdapterService.PROFILE_CONN_REJECTED); + } } break; case CONNECTION_STATE_CONNECTED: @@ -252,7 +256,11 @@ final class A2dpStateMachine extends StateMachine { Log.i(TAG,"Incoming A2DP rejected"); disconnectA2dpNative(getByteAddress(device)); // the other profile connection should be initiated - broadcastConnectOtherProfilesIntent(device); + AdapterService adapterService = AdapterService.getAdapterService(); + if (adapterService != null) { + adapterService.connectOtherProfile(device, + AdapterService.PROFILE_CONN_REJECTED); + } } break; case CONNECTION_STATE_DISCONNECTING: @@ -645,14 +653,6 @@ final class A2dpStateMachine extends StateMachine { return deviceList; } - private void broadcastConnectOtherProfilesIntent(BluetoothDevice device) { - // send other profile connect intent - if (DBG) log("Other Profile Connect intent sent " + device); - - Intent intent = new Intent(BluetoothProfile.ACTION_CONNECT_OTHER_PROFILES); - intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); - mContext.sendBroadcast(intent, A2dpService.BLUETOOTH_PERM); - } // This method does not check for error conditon (newState == prevState) private void broadcastConnectionState(BluetoothDevice device, int newState, int prevState) { |