Imported Upstream version 1.2.0
[platform/upstream/iotivity.git] / android / android_api / base / src / main / java / org / iotivity / ca / CaIpInterface.java
index 43d0ace..a747953 100644 (file)
@@ -1,24 +1,22 @@
-/*\r
- * //******************************************************************\r
- * //\r
- * // Copyright 2015 Intel Corporation.\r
- * //\r
- * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
- * //\r
- * // Licensed under the Apache License, Version 2.0 (the "License");\r
- * // you may not use this file except in compliance with the License.\r
- * // You may obtain a copy of the License at\r
- * //\r
- * //      http://www.apache.org/licenses/LICENSE-2.0\r
- * //\r
- * // Unless required by applicable law or agreed to in writing, software\r
- * // distributed under the License is distributed on an "AS IS" BASIS,\r
- * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * // See the License for the specific language governing permissions and\r
- * // limitations under the License.\r
- * //\r
- * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
- */\r
+/******************************************************************\r
+ *\r
+ * Copyright 2014 Samsung Electronics All Rights Reserved.\r
+ *\r
+ *\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ ******************************************************************/\r
 \r
 package org.iotivity.ca;\r
 \r
@@ -29,12 +27,35 @@ import android.content.IntentFilter;
 import android.net.ConnectivityManager;\r
 import android.net.NetworkInfo;\r
 import android.net.wifi.WifiManager;\r
+import android.util.Log;\r
 \r
 public class CaIpInterface {\r
     private static Context mContext;\r
 \r
+    public enum WifiAPState{\r
+        WIFI_AP_STATE_DISABLING (10),\r
+        WIFI_AP_STATE_DISABLED (11),\r
+        WIFI_AP_STATE_ENABLING (12),\r
+        WIFI_AP_STATE_ENABLED (13),\r
+        WIFI_AP_STATE_FAILED (14)\r
+        ; // semicolon needed when fields / methods follow\r
+\r
+\r
+        private final int apstate;\r
+\r
+        WifiAPState(int apstate)\r
+        {\r
+            this.apstate = apstate;\r
+        }\r
+        public int getIntValue() {\r
+           return this.apstate;\r
+        }\r
+    }\r
+\r
     private CaIpInterface(Context context) {\r
-        mContext = context;\r
+        synchronized(CaIpInterface.class) {\r
+            mContext = context;\r
+        }\r
         registerIpStateReceiver();\r
     }\r
 \r
@@ -42,29 +63,54 @@ public class CaIpInterface {
         IntentFilter intentFilter = new IntentFilter();\r
         intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);\r
         intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);\r
+        intentFilter.addAction("android.net.wifi.WIFI_AP_STATE_CHANGED");\r
 \r
         mContext.registerReceiver(mReceiver, intentFilter);\r
     }\r
 \r
+    public static void destroyIpInterface() {\r
+        mContext.unregisterReceiver(mReceiver);\r
+    }\r
+\r
     private static BroadcastReceiver mReceiver = new BroadcastReceiver() {\r
         @Override\r
         public void onReceive(Context context, Intent intent) {\r
-            if (intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,\r
-                    WifiManager.WIFI_STATE_UNKNOWN) == WifiManager.WIFI_STATE_DISABLED) {\r
-                stateDisabled();\r
-            } else if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {\r
+            if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {\r
                 ConnectivityManager manager = (ConnectivityManager)\r
                         mContext.getSystemService(Context.CONNECTIVITY_SERVICE);\r
-                NetworkInfo nwInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);\r
+                NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);\r
+                NetworkInfo mobileInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);\r
 \r
-                if(nwInfo.isConnected()) {\r
-                    stateEnabled();\r
+                if (mobileInfo != null && mobileInfo.isConnected() || wifiInfo.isConnected()) {\r
+                    caIpStateEnabled();\r
+                } else {\r
+                    caIpStateDisabled();\r
                 }\r
             }\r
+\r
+            if (intent.getAction().equals("android.net.wifi.WIFI_AP_STATE_CHANGED")) {\r
+                if (intent.getIntExtra("wifi_state",\r
+                    WifiAPState.WIFI_AP_STATE_DISABLED.getIntValue())\r
+                    == WifiAPState.WIFI_AP_STATE_DISABLED.getIntValue())\r
+                {\r
+                    caIpStateDisabled();\r
+                }else if(intent.getIntExtra("wifi_state",\r
+                    WifiAPState.WIFI_AP_STATE_DISABLED.getIntValue())\r
+                    == WifiAPState.WIFI_AP_STATE_ENABLED.getIntValue())\r
+                {\r
+                    try {\r
+                        Thread.sleep(1000);\r
+                    } catch (InterruptedException e) {\r
+                        // TODO Auto-generated catch block\r
+                        e.printStackTrace();\r
+                    }\r
+                    caIpStateEnabled();\r
+                }\r
+           }\r
         }\r
     };\r
 \r
-    private native static void stateEnabled();\r
+    private native static void caIpStateEnabled();\r
 \r
-    private native static void stateDisabled();\r
-}
\ No newline at end of file
+    private native static void caIpStateDisabled();\r
+}\r