replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / android / android_api / base / src / main / java / org / iotivity / ca / CaEdrInterface.java
index 7a07b24..067dbf3 100644 (file)
@@ -26,25 +26,36 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.util.Log;
 
 public class CaEdrInterface {
     private static Context mContext;
+    private static volatile boolean isEdrInitialized = false;
 
     private CaEdrInterface(Context context) {
-        mContext = context;
-        registerIntentFilter();
+        synchronized(CaEdrInterface.class) {
+            mContext = context;
+        }
+        if (!isEdrInitialized) {
+            registerIntentFilter();
+            isEdrInitialized = true;
+        }
     }
 
     private static IntentFilter registerIntentFilter() {
         IntentFilter filter = new IntentFilter();
         filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
         filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
+        filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
         mContext.registerReceiver(mReceiver, filter);
         return filter;
     }
 
     public static void destroyEdrInterface() {
-        mContext.unregisterReceiver(mReceiver);
+        if (isEdrInitialized) {
+            mContext.unregisterReceiver(mReceiver);
+            isEdrInitialized = false;
+        }
     }
 
     // Network Monitor
@@ -52,6 +63,8 @@ public class CaEdrInterface {
 
     private native static void caEdrBondStateChangedCallback(String addr);
 
+    private native static void caEdrConnectionStateChangedCallback(String addr, int isConnected);
+
     private static final BroadcastReceiver mReceiver = new BroadcastReceiver() {
 
         @Override
@@ -87,6 +100,15 @@ public class CaEdrInterface {
                     }
                 }
             }
+
+            if (action != null && action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
+                BluetoothDevice device
+                    = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+                if (BluetoothDevice.DEVICE_TYPE_CLASSIC == device.getType())
+                {
+                    caEdrConnectionStateChangedCallback(device.getAddress(), 0);
+                }
+            }
         }
     };
 }