summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSmriti Gupta <smritig@codeaurora.org>2016-02-10 19:40:41 +0530
committerHemant Gupta <hemantg@codeaurora.org>2016-02-16 19:15:45 +0530
commit09bc94ec979e1954dabaf0750aae838c75daaba5 (patch)
tree91a4acb5630f1e5064ee21e475e6d5552d1de43a
parent899ab7685ed54d6d78f5d94c010cd053fbb6da07 (diff)
downloadandroid_packages_apps_Bluetooth-09bc94ec979e1954dabaf0750aae838c75daaba5.tar.gz
android_packages_apps_Bluetooth-09bc94ec979e1954dabaf0750aae838c75daaba5.tar.bz2
android_packages_apps_Bluetooth-09bc94ec979e1954dabaf0750aae838c75daaba5.zip
OPP: Initialize obex socket listeners while starting Listening
- Initialize socket listener when socket listening is to be started and not during onCreate. Without this patch there were usecases when BT was not bein turned off completely like in BLE on state, in these states, onDestroy was not getting called for OppService, leading to issues during next BT on state and would lead to OPP transfer failure. - Add adapter check before calling SdpRemove Native API to prevent possible ANR. CRs-Fixed: 975531 Change-Id: I6f0b0101f310192c90050a76ac6374cf1359fd46
-rw-r--r--src/com/android/bluetooth/map/BluetoothMapMasInstance.java12
-rw-r--r--src/com/android/bluetooth/opp/BluetoothOppService.java31
-rw-r--r--src/com/android/bluetooth/sap/SapService.java12
3 files changed, 39 insertions, 16 deletions
diff --git a/src/com/android/bluetooth/map/BluetoothMapMasInstance.java b/src/com/android/bluetooth/map/BluetoothMapMasInstance.java
index b00cc2c93..4cc371883 100644
--- a/src/com/android/bluetooth/map/BluetoothMapMasInstance.java
+++ b/src/com/android/bluetooth/map/BluetoothMapMasInstance.java
@@ -277,10 +277,12 @@ public class BluetoothMapMasInstance implements IObexConnectionHandler {
Log.e(TAG, "Failed to start the listeners");
return;
}
- if (mSdpHandle >= 0 && SdpManager.getDefaultManager() != null) {
+ if (mAdapter != null && mSdpHandle >= 0 &&
+ SdpManager.getDefaultManager() != null) {
if(V) Log.d(TAG, "Removing SDP record for MAS instance: " + mMasInstanceId +
" Object reference: " + this + "SDP handle: " + mSdpHandle);
- SdpManager.getDefaultManager().removeSdpRecord(mSdpHandle);
+ boolean status = SdpManager.getDefaultManager().removeSdpRecord(mSdpHandle);
+ Log.d(TAG, "RemoveSDPrecord returns " + status);
mSdpHandle = -1;
}
mSdpHandle = createMasSdpRecord(mServerSockets.getRfcommChannel(),
@@ -408,10 +410,12 @@ public class BluetoothMapMasInstance implements IObexConnectionHandler {
mObserver.deinit();
mObserver = null;
}
- if (mSdpHandle >= 0 && SdpManager.getDefaultManager() != null) {
+ if (mAdapter != null && mSdpHandle >= 0 &&
+ SdpManager.getDefaultManager() != null) {
if(V) Log.d(TAG, "Removing SDP record for MAS instance: " + mMasInstanceId +
" Object reference: " + this + "SDP handle: " + mSdpHandle);
- SdpManager.getDefaultManager().removeSdpRecord(mSdpHandle);
+ boolean status = SdpManager.getDefaultManager().removeSdpRecord(mSdpHandle);
+ Log.d(TAG, "RemoveSDPrecord returns " + status);
mSdpHandle = -1;
}
diff --git a/src/com/android/bluetooth/opp/BluetoothOppService.java b/src/com/android/bluetooth/opp/BluetoothOppService.java
index cc9f6baec..ec39e6e32 100644
--- a/src/com/android/bluetooth/opp/BluetoothOppService.java
+++ b/src/com/android/bluetooth/opp/BluetoothOppService.java
@@ -160,8 +160,6 @@ public class BluetoothOppService extends Service {
super.onCreate();
if (V) Log.v(TAG, "onCreate");
mAdapter = BluetoothAdapter.getDefaultAdapter();
- mSocketListener = new BluetoothOppRfcommListener(mAdapter);
- mL2cSocketListener = new BluetoothOppL2capListener(mAdapter);
mShares = Lists.newArrayList();
mBatchs = Lists.newArrayList();
mObserver = new BluetoothShareContentObserver();
@@ -235,17 +233,21 @@ public class BluetoothOppService extends Service {
public void handleMessage(Message msg) {
switch (msg.what) {
case STOP_LISTENER:
- if (mOppSdpHandle >= 0 &&
+ if (mAdapter != null && mOppSdpHandle >= 0 &&
SdpManager.getDefaultManager() != null) {
if (D) Log.d(TAG, "Removing SDP record");
- SdpManager.getDefaultManager().removeSdpRecord(mOppSdpHandle);
+ boolean status = SdpManager.getDefaultManager().
+ removeSdpRecord(mOppSdpHandle);
+ Log.d(TAG, "RemoveSDPrecord returns " + status);
mOppSdpHandle = -1;
}
if(mSocketListener != null){
mSocketListener.stop();
+ mSocketListener = null;
}
if(mL2cSocketListener != null){
mL2cSocketListener.stop();
+ mL2cSocketListener = null;
}
mListenStarted = false;
//Stop Active INBOUND Transfer
@@ -360,8 +362,20 @@ public class BluetoothOppService extends Service {
private void startSocketListener() {
- if (V) Log.v(TAG, "start Socket Listeners");
+ Log.d(TAG, "start Socket Listeners");
+ if(mSocketListener != null){
+ Log.d(TAG, "rfcomm listener active, stopping it");
+ mSocketListener.stop();
+ mSocketListener = null;
+ }
+ if(mL2cSocketListener != null){
+ Log.d(TAG, "l2cap listener active, stopping it");
+ mL2cSocketListener.stop();
+ mL2cSocketListener = null;
+ }
+ mSocketListener = new BluetoothOppRfcommListener(mAdapter);
+ mL2cSocketListener = new BluetoothOppL2capListener(mAdapter);
if (mSocketListener != null && mL2cSocketListener != null) {
if ( ( mSocketListener.openRfcommSocket() != null) &&
@@ -387,6 +401,8 @@ public class BluetoothOppService extends Service {
unregisterReceiver(mBluetoothReceiver);
mSocketListener.stop();
mL2cSocketListener.stop();
+ mSocketListener = null;
+ mL2cSocketListener = null;
if(mBatchs != null) {
mBatchs.clear();
@@ -415,12 +431,11 @@ public class BluetoothOppService extends Service {
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
switch (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)) {
case BluetoothAdapter.STATE_ON:
- if (V) Log.v(TAG,
- "Receiver BLUETOOTH_STATE_CHANGED_ACTION, BLUETOOTH_STATE_ON");
+ Log.d(TAG, "Receiver BLUETOOTH_STATE_CHANGED_ACTION, STATE_ON");
startSocketListener();
break;
case BluetoothAdapter.STATE_TURNING_OFF:
- if (V) Log.v(TAG, "Receiver DISABLED_ACTION ");
+ Log.d(TAG, "Receiver BLUETOOTH_STATE_CHANGED_ACTION, STATE_TURNING_OFF");
//FIX: Don't block main thread
/*
mSocketListener.stop();
diff --git a/src/com/android/bluetooth/sap/SapService.java b/src/com/android/bluetooth/sap/SapService.java
index 584d7ef00..79f561f93 100644
--- a/src/com/android/bluetooth/sap/SapService.java
+++ b/src/com/android/bluetooth/sap/SapService.java
@@ -152,9 +152,11 @@ public class SapService extends ProfileService {
// for multiple connections.
mServerSocket = mAdapter.listenUsingRfcommOn(
BluetoothAdapter.SOCKET_CHANNEL_AUTO_STATIC_NO_SDP, true, true);
- if (mSdpHandle >= 0 && SdpManager.getDefaultManager() != null) {
+ if (mAdapter != null && mSdpHandle >= 0 &&
+ SdpManager.getDefaultManager() != null) {
if (DEBUG) Log.d(TAG, "Removing SDP record");
- SdpManager.getDefaultManager().removeSdpRecord(mSdpHandle);
+ boolean status = SdpManager.getDefaultManager().removeSdpRecord(mSdpHandle);
+ Log.d(TAG, "RemoveSDPrecord returns " + status);
mSdpHandle = -1;
}
mSdpHandle = SdpManager.getDefaultManager().createSapsRecord(SDP_SAP_SERVICE_NAME,
@@ -730,9 +732,11 @@ public class SapService extends ProfileService {
mIsWaitingAuthorization = false;
cancelUserTimeoutAlarm();
}
- if (mSdpHandle >= 0 && SdpManager.getDefaultManager() != null) {
+ if (mAdapter != null && mSdpHandle >= 0 &&
+ SdpManager.getDefaultManager() != null) {
if (DEBUG) Log.d(TAG, "Removing SDP record");
- SdpManager.getDefaultManager().removeSdpRecord(mSdpHandle);
+ boolean status = SdpManager.getDefaultManager().removeSdpRecord(mSdpHandle);
+ Log.d(TAG, "RemoveSDPrecord returns " + status);
mSdpHandle = -1;
}
if (mSessionStatusHandler != null) {