Merge "Cleanup references when turning BT off." into ics-mr1
This commit is contained in:
committed by
Android (Google) Code Review
commit
eb701df88c
@@ -129,6 +129,10 @@ public final class BluetoothA2dp implements BluetoothProfile {
|
||||
}
|
||||
}
|
||||
|
||||
/*package*/ void close() {
|
||||
mServiceListener = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiate connection to a profile of the remote bluetooth device.
|
||||
*
|
||||
|
||||
@@ -1180,11 +1180,29 @@ public final class BluetoothAdapter {
|
||||
* @param proxy Profile proxy object
|
||||
*/
|
||||
public void closeProfileProxy(int profile, BluetoothProfile proxy) {
|
||||
if (profile == BluetoothProfile.HEADSET) {
|
||||
BluetoothHeadset headset = (BluetoothHeadset)proxy;
|
||||
if (headset != null) {
|
||||
if (proxy == null) return;
|
||||
|
||||
switch (profile) {
|
||||
case BluetoothProfile.HEADSET:
|
||||
BluetoothHeadset headset = (BluetoothHeadset)proxy;
|
||||
headset.close();
|
||||
}
|
||||
break;
|
||||
case BluetoothProfile.A2DP:
|
||||
BluetoothA2dp a2dp = (BluetoothA2dp)proxy;
|
||||
a2dp.close();
|
||||
break;
|
||||
case BluetoothProfile.INPUT_DEVICE:
|
||||
BluetoothInputDevice iDev = (BluetoothInputDevice)proxy;
|
||||
iDev.close();
|
||||
break;
|
||||
case BluetoothProfile.PAN:
|
||||
BluetoothPan pan = (BluetoothPan)proxy;
|
||||
pan.close();
|
||||
break;
|
||||
case BluetoothProfile.HEALTH:
|
||||
BluetoothHealth health = (BluetoothHealth)proxy;
|
||||
health.close();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -109,6 +109,8 @@ public final class BluetoothDeviceProfileState extends StateMachine {
|
||||
private BluetoothA2dpService mA2dpService;
|
||||
private BluetoothHeadset mHeadsetService;
|
||||
private BluetoothPbap mPbapService;
|
||||
private PbapServiceListener mPbap;
|
||||
private BluetoothAdapter mAdapter;
|
||||
private boolean mPbapServiceConnected;
|
||||
private boolean mAutoConnectionPending;
|
||||
private static final String BLUETOOTH_ADMIN_PERM = android.Manifest.permission.BLUETOOTH_ADMIN;
|
||||
@@ -249,11 +251,11 @@ public final class BluetoothDeviceProfileState extends StateMachine {
|
||||
|
||||
mContext.registerReceiver(mBroadcastReceiver, filter);
|
||||
|
||||
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
|
||||
adapter.getProfileProxy(mContext, mBluetoothProfileServiceListener,
|
||||
mAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
mAdapter.getProfileProxy(mContext, mBluetoothProfileServiceListener,
|
||||
BluetoothProfile.HEADSET);
|
||||
// TODO(): Convert PBAP to the new Profile APIs.
|
||||
PbapServiceListener p = new PbapServiceListener();
|
||||
mPbap = new PbapServiceListener();
|
||||
|
||||
mIncomingConnections = mService.getIncomingState(address);
|
||||
mIncomingRejectTimer = readTimerValue();
|
||||
@@ -414,6 +416,26 @@ public final class BluetoothDeviceProfileState extends StateMachine {
|
||||
case TRANSITION_TO_STABLE:
|
||||
// ignore.
|
||||
break;
|
||||
case SM_QUIT_CMD:
|
||||
mContext.unregisterReceiver(mBroadcastReceiver);
|
||||
mBroadcastReceiver = null;
|
||||
mAdapter.closeProfileProxy(BluetoothProfile.HEADSET, mHeadsetService);
|
||||
mBluetoothProfileServiceListener = null;
|
||||
mOutgoingHandsfree = null;
|
||||
mPbap = null;
|
||||
mPbapService.close();
|
||||
mPbapService = null;
|
||||
mIncomingHid = null;
|
||||
mOutgoingHid = null;
|
||||
mIncomingHandsfree = null;
|
||||
mOutgoingHandsfree = null;
|
||||
mIncomingA2dp = null;
|
||||
mOutgoingA2dp = null;
|
||||
mBondedDevice = null;
|
||||
// There is a problem in the State Machine code
|
||||
// where things are not cleaned up properly, when quit message
|
||||
// is handled so return NOT_HANDLED as a workaround.
|
||||
return NOT_HANDLED;
|
||||
default:
|
||||
return NOT_HANDLED;
|
||||
}
|
||||
|
||||
@@ -245,6 +245,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
|
||||
mContext.unbindService(mConnection);
|
||||
mConnection = null;
|
||||
}
|
||||
mServiceListener = null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -452,6 +452,10 @@ public final class BluetoothHealth implements BluetoothProfile {
|
||||
}
|
||||
}
|
||||
|
||||
/*package*/ void close() {
|
||||
mServiceListener = null;
|
||||
}
|
||||
|
||||
private boolean isEnabled() {
|
||||
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
|
||||
|
||||
|
||||
@@ -118,6 +118,10 @@ public final class BluetoothInputDevice implements BluetoothProfile {
|
||||
}
|
||||
}
|
||||
|
||||
/*package*/ void close() {
|
||||
mServiceListener = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiate connection to a profile of the remote bluetooth device.
|
||||
*
|
||||
|
||||
@@ -139,6 +139,10 @@ public final class BluetoothPan implements BluetoothProfile {
|
||||
}
|
||||
}
|
||||
|
||||
/*package*/ void close() {
|
||||
mServiceListener = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiate connection to a profile of the remote bluetooth device.
|
||||
*
|
||||
@@ -299,4 +303,4 @@ public final class BluetoothPan implements BluetoothProfile {
|
||||
private static void log(String msg) {
|
||||
Log.d(TAG, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ public class BluetoothPbap {
|
||||
|
||||
private IBluetoothPbap mService;
|
||||
private final Context mContext;
|
||||
private final ServiceListener mServiceListener;
|
||||
private ServiceListener mServiceListener;
|
||||
|
||||
/** There was an error trying to obtain the state */
|
||||
public static final int STATE_ERROR = -1;
|
||||
@@ -138,6 +138,7 @@ public class BluetoothPbap {
|
||||
mContext.unbindService(mConnection);
|
||||
mConnection = null;
|
||||
}
|
||||
mServiceListener = null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2374,16 +2374,18 @@ public class BluetoothService extends IBluetooth.Stub {
|
||||
}
|
||||
|
||||
BluetoothDeviceProfileState addProfileState(String address, boolean setTrust) {
|
||||
BluetoothDeviceProfileState state = mDeviceProfileState.get(address);
|
||||
if (state != null) return state;
|
||||
|
||||
state = new BluetoothDeviceProfileState(mContext, address, this, mA2dpService, setTrust);
|
||||
BluetoothDeviceProfileState state =
|
||||
new BluetoothDeviceProfileState(mContext, address, this, mA2dpService, setTrust);
|
||||
mDeviceProfileState.put(address, state);
|
||||
state.start();
|
||||
return state;
|
||||
}
|
||||
|
||||
void removeProfileState(String address) {
|
||||
BluetoothDeviceProfileState state = mDeviceProfileState.get(address);
|
||||
if (state == null) return;
|
||||
|
||||
state.quit();
|
||||
mDeviceProfileState.remove(address);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user