1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.net; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Context; 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.CalledByNative; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.JNINamespace; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.NativeClassQualifiedName; 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.base.ObserverList; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import java.util.ArrayList; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Triggers updates to the underlying network state in Chrome. 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * By default, connectivity is assumed and changes must pushed from the embedder via the 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * forceConnectivityState function. 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Embedders may choose to have this class auto-detect changes in network connectivity by invoking 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * the setAutoDetectConnectivityState function. 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * WARNING: This class is not thread-safe. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@JNINamespace("net") 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class NetworkChangeNotifier { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Alerted when the connection type of the network changes. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The alert is fired on the UI thread. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public interface ConnectionTypeObserver { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onConnectionTypeChanged(int connectionType); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These constants must always match the ones in network_change_notifier.h. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static final int CONNECTION_UNKNOWN = 0; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static final int CONNECTION_ETHERNET = 1; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static final int CONNECTION_WIFI = 2; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static final int CONNECTION_2G = 3; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static final int CONNECTION_3G = 4; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static final int CONNECTION_4G = 5; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static final int CONNECTION_NONE = 6; 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public static final int CONNECTION_BLUETOOTH = 7; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private final Context mContext; 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private final ArrayList<Long> mNativeChangeNotifiers; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private final ObserverList<ConnectionTypeObserver> mConnectionTypeObservers; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private NetworkChangeNotifierAutoDetect mAutoDetector; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private int mCurrentConnectionType = CONNECTION_UNKNOWN; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static NetworkChangeNotifier sInstance; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private NetworkChangeNotifier(Context context) { 551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) mContext = context.getApplicationContext(); 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mNativeChangeNotifiers = new ArrayList<Long>(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mConnectionTypeObservers = new ObserverList<ConnectionTypeObserver>(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Initializes the singleton once. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public static NetworkChangeNotifier init(Context context) { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (sInstance == null) { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sInstance = new NetworkChangeNotifier(context); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sInstance; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public static boolean isInitialized() { 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return sInstance != null; 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void resetInstanceForTests(Context context) { 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sInstance = new NetworkChangeNotifier(context); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @CalledByNative 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public int getCurrentConnectionType() { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mCurrentConnectionType; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Adds a native-side observer. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @CalledByNative 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public void addNativeObserver(long nativeChangeNotifier) { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mNativeChangeNotifiers.add(nativeChangeNotifier); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Removes a native-side observer. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @CalledByNative 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public void removeNativeObserver(long nativeChangeNotifier) { 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mNativeChangeNotifiers.remove(nativeChangeNotifier); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Returns the singleton instance. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static NetworkChangeNotifier getInstance() { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert sInstance != null; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sInstance; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Enables auto detection of the current network state based on notifications from the system. 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Note that passing true here requires the embedding app have the platform ACCESS_NETWORK_STATE 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * permission. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param shouldAutoDetect true if the NetworkChangeNotifier should listen for system changes in 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * network connectivity. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static void setAutoDetectConnectivityState(boolean shouldAutoDetect) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getInstance().setAutoDetectConnectivityStateInternal(shouldAutoDetect); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private void destroyAutoDetector() { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (mAutoDetector != null) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mAutoDetector.destroy(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mAutoDetector = null; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private void setAutoDetectConnectivityStateInternal(boolean shouldAutoDetect) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (shouldAutoDetect) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (mAutoDetector == null) { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mAutoDetector = new NetworkChangeNotifierAutoDetect( 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new NetworkChangeNotifierAutoDetect.Observer() { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onConnectionTypeChanged(int newConnectionType) { 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) updateCurrentConnectionType(newConnectionType); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mContext); 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) updateCurrentConnectionType(mAutoDetector.getCurrentConnectionType()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) destroyAutoDetector(); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Updates the perceived network state when not auto-detecting changes to connectivity. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param networkAvailable True if the NetworkChangeNotifier should perceive a "connected" 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * state, false implies "disconnected". 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @CalledByNative 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static void forceConnectivityState(boolean networkAvailable) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setAutoDetectConnectivityState(false); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getInstance().forceConnectivityStateInternal(networkAvailable); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private void forceConnectivityStateInternal(boolean forceOnline) { 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) boolean connectionCurrentlyExists = mCurrentConnectionType != CONNECTION_NONE; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (connectionCurrentlyExists != forceOnline) { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) updateCurrentConnectionType(forceOnline ? CONNECTION_UNKNOWN : CONNECTION_NONE); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private void updateCurrentConnectionType(int newConnectionType) { 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mCurrentConnectionType = newConnectionType; 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notifyObserversOfConnectionTypeChange(newConnectionType); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Alerts all observers of a connection change. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void notifyObserversOfConnectionTypeChange(int newConnectionType) { 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (Long nativeChangeNotifier : mNativeChangeNotifiers) { 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) nativeNotifyConnectionTypeChanged(nativeChangeNotifier, newConnectionType); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ConnectionTypeObserver observer : mConnectionTypeObservers) { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.onConnectionTypeChanged(newConnectionType); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds an observer for any connection type changes. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static void addConnectionTypeObserver(ConnectionTypeObserver observer) { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getInstance().addConnectionTypeObserverInternal(observer); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private void addConnectionTypeObserverInternal(ConnectionTypeObserver observer) { 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mConnectionTypeObservers.addObserver(observer); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Removes an observer for any connection type changes. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public static void removeConnectionTypeObserver(ConnectionTypeObserver observer) { 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) getInstance().removeConnectionTypeObserverInternal(observer); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private void removeConnectionTypeObserverInternal(ConnectionTypeObserver observer) { 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mConnectionTypeObservers.removeObserver(observer); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @NativeClassQualifiedName("NetworkChangeNotifierDelegateAndroid") 204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private native void nativeNotifyConnectionTypeChanged(long nativePtr, int newConnectionType); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For testing only. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public static NetworkChangeNotifierAutoDetect getAutoDetectorForTest() { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return getInstance().mAutoDetector; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Checks if there currently is connectivity. 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public static boolean isOnline() { 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int connectionType = getInstance().getCurrentConnectionType(); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return connectionType != CONNECTION_UNKNOWN && connectionType != CONNECTION_NONE; 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 219