package me.ccrama.redditslide.util; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import me.ccrama.redditslide.Reddit; /** * Collection of various network utility methods. * * @author Matthew Dean */ public class NetworkUtil { // Assigned a random value that is not a value of ConnectivityManager.TYPE_* private static final int CONST_NO_NETWORK = 525138; private NetworkUtil() { } /** * Uses the provided context to determine the current connectivity status. * * @param context A context used to retrieve connection information from * @return A non-null value defined in {@link Status} */ public static Status getConnectivityStatus(Context context) { ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); switch (activeNetwork != null ? activeNetwork.getType() : CONST_NO_NETWORK) { case ConnectivityManager.TYPE_WIFI: case ConnectivityManager.TYPE_ETHERNET: return Status.WIFI; case ConnectivityManager.TYPE_MOBILE: case ConnectivityManager.TYPE_BLUETOOTH: case ConnectivityManager.TYPE_WIMAX: return Status.MOBILE; default: return Status.NONE; } } /** * Checks if the network is connected. An application context is said to have connection if * {@link #getConnectivityStatus(Context)} does not equal {@link Status#NONE}. * * @param context The context used to retrieve connection information * @return True if the application is connected, false if else. */ public static boolean isConnected(Context context) { return !Reddit.appRestart.contains("forceoffline") && getConnectivityStatus(context) != Status.NONE; } public static boolean isConnectedNoOverride(Context context) { return getConnectivityStatus(context) != Status.NONE; } /** * Checks if the network is connected to WiFi. * * @param context The context used to retrieve connection information * @return True if the application is connected, false if else. */ public static boolean isConnectedWifi(Context context) { return getConnectivityStatus(context) == Status.WIFI; } /** * A simplified list of connectivity statuses. See {@link ConnectivityManager}'s {@code TYPE_*} for a full list. * * @author Matthew Dean */ public enum Status { /** Operating on a wireless connection */ WIFI, /** Operating on 3G, 4G, 4G LTE, etc. */ MOBILE, /** No connection present */ NONE } }