-/******************************************************************\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
-import android.content.BroadcastReceiver;\r
-import android.content.Context;\r
-import android.content.Intent;\r
-import android.content.IntentFilter;\r
-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
- synchronized(CaIpInterface.class) {\r
- mContext = context;\r
- }\r
- registerIpStateReceiver();\r
- }\r
-\r
- private void registerIpStateReceiver() {\r
- 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.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {\r
- ConnectivityManager manager = (ConnectivityManager)\r
- mContext.getSystemService(Context.CONNECTIVITY_SERVICE);\r
- NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);\r
- NetworkInfo mobileInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);\r
-\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 caIpStateEnabled();\r
-\r
- private native static void caIpStateDisabled();\r
-}\r
+/******************************************************************
+ *
+ * Copyright 2014 Samsung Electronics All Rights Reserved.
+ *
+ *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************/
+
+package org.iotivity.ca;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.wifi.WifiManager;
+import android.util.Log;
+
+public class CaIpInterface {
+ private static Context mContext;
+ private static volatile boolean isIpInitialized = false;
+ private static String TAG = "OIC_IP_CB_INTERFACE";
+
+ private CaIpInterface(Context context) {
+ synchronized(CaIpInterface.class) {
+ mContext = context;
+ }
+ if (!isIpInitialized) {
+ registerIpStateReceiver();
+ isIpInitialized = true;
+ }
+ }
+
+ private void registerIpStateReceiver() {
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+ intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+
+ mContext.registerReceiver(mReceiver, intentFilter);
+ }
+
+ public static void destroyIpInterface() {
+ if (isIpInitialized) {
+ mContext.unregisterReceiver(mReceiver);
+ isIpInitialized = false;
+ }
+ }
+
+ private static BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
+ NetworkInfo activeNetwork = ((ConnectivityManager) mContext
+ .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
+ if (activeNetwork != null) {
+ Log.d(TAG, "CONNECTIVITY_ACTION - activeNetwork: "
+ + activeNetwork.getTypeName()
+ + " isConnected: " + activeNetwork.isConnected());
+ caIpStateEnabled();
+ } else {
+ Log.d(TAG, "CONNECTIVITY_ACTION - activeNetwork: NONE");
+ caIpStateDisabled();
+ }
+ } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
+ NetworkInfo netInfo = (NetworkInfo) intent
+ .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
+ if (ConnectivityManager.TYPE_WIFI == netInfo.getType()) {
+ NetworkInfo.State netState = netInfo.getState();
+ if (NetworkInfo.State.CONNECTED == netState) {
+ Log.d(TAG, "NETWORK_STATE_CHANGED_ACTION - CONNECTED: TYPE_WIFI");
+ caIpStateEnabled();
+ } else if (NetworkInfo.State.DISCONNECTED == netState) {
+ Log.d(TAG, "NETWORK_STATE_CHANGED_ACTION - DISCONNECTED: TYPE_WIFI");
+ }
+ }
+ }
+ }
+ };
+
+ private native static void caIpStateEnabled();
+
+ private native static void caIpStateDisabled();
+}