/******************************************************************************* * Software Name : RCS IMS Stack * * Copyright (C) 2010 France Telecom S.A. * * 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 com.orangelabs.rcs.provisioning.https; import com.orangelabs.rcs.utils.logger.Logger; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; /** * HTTPS provisioning connection management * * @author Orange */ public class HttpsProvisioningConnection { /** * HttpsProvisioningManager manages HTTP and SMS reception to load * provisioning from network */ private HttpsProvisioningManager manager; /** * Network state listener */ private BroadcastReceiver networkStateListener = null; /** * Connection manager */ private ConnectivityManager connMgr = null; /** * Wifi disabling listener */ private BroadcastReceiver wifiDisablingListener = null; /** * The logger */ private Logger logger = Logger.getLogger(this.getClass().getName()); /** * Constructor * * @param httpsProvisioningManager HTTP provisioning manager */ public HttpsProvisioningConnection(HttpsProvisioningManager httpsProvisioningManager) { manager = httpsProvisioningManager; // Get connectivity manager if (connMgr == null) { connMgr = (ConnectivityManager) httpsProvisioningManager.getContext().getSystemService( Context.CONNECTIVITY_SERVICE); } } /** * Get connection manager * * @return connection manager */ public ConnectivityManager getConnectionMngr() { return connMgr; } /** * Register the broadcast receiver for network state */ protected void registerNetworkStateListener() { // Check if network state listener is already registered if (networkStateListener != null) { if (logger.isActivated()) { logger.debug("Network state listener already registered"); } return; } if (logger.isActivated()) { logger.debug("Registering network state listener"); } // Instantiate the network state listener networkStateListener = new BroadcastReceiver() { @Override public void onReceive(Context context, final Intent intent) { Thread t = new Thread() { public void run() { if (logger.isActivated()) { logger.debug("Network state listener - Received broadcast: " + intent.toString()); } manager.connectionEvent(intent.getAction()); } }; t.start(); } }; // Register network state listener IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); manager.getContext().registerReceiver(networkStateListener, intentFilter); } /** * Unregister the broadcast receiver for network state */ protected void unregisterNetworkStateListener() { if (networkStateListener != null) { if (logger.isActivated()) { logger.debug("Unregistering network state listener"); } try { manager.getContext().unregisterReceiver(networkStateListener); } catch (IllegalArgumentException e) { // Nothing to do } networkStateListener = null; } } /** * Register the broadcast receiver for wifi disabling */ protected void registerWifiDisablingListener() { // Check if wifi disabling listener is already registered if (wifiDisablingListener != null) { if (logger.isActivated()) { logger.debug("WIFI disabling listener already registered"); } return; } if (logger.isActivated()) { logger.debug("Registering WIFI disabling listener"); } // Instantiate the wifi listener wifiDisablingListener = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { Thread t = new Thread() { public void run() { if (logger.isActivated()) { logger.debug("Wifi disabling listener - Received broadcast: " + intent.toString()); } // Only notify the listener when the wifi is really // disabled if (intent != null && intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN) == WifiManager.WIFI_STATE_DISABLED) { manager.resetCounters(); // Register network state listener registerNetworkStateListener(); // Unregister wifi disabling listener unregisterWifiDisablingListener(); } } }; t.start(); } }; // Register wifi disabling listener IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); manager.getContext().registerReceiver(wifiDisablingListener, intentFilter); } /** * Unregister the broadcast receiver for wifi disabling */ protected void unregisterWifiDisablingListener() { if (wifiDisablingListener != null) { if (logger.isActivated()) { logger.debug("Unregistering WIFI disabling listener"); } try { manager.getContext().unregisterReceiver(wifiDisablingListener); } catch (IllegalArgumentException e) { // Nothing to do } wifiDisablingListener = null; } } }