blob: bc642b69ab53c633c30344d3a61e9f8e970e796b [file] [log] [blame]
package com.android.clockwork.connectivity;
import static android.net.ConnectivityManager.NetworkCallback;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import com.android.clockwork.common.LogUtil;
import java.util.ArrayList;
import java.util.List;
/**
* Monitors Wifi network connectivity.
*
* <p>Tracks if there is a wifi network providing connectivity. It provides listener update whenever
* some wifi network becomes available or when all wifi networks are lost.
*/
final class WearWifiNetworkAgent {
static final String TAG = "WearWifiNetworkAgent";
/** Status of wifi network connectivty. */
public enum WifiConnectivityStatus {
STATUS_WIFI_UNAVAILABLE,
STATUS_WIFI_CONNECTED,
}
/**
* Interface to notify about wifi connectivity changes.
*/
public interface Listener {
void onWifiConnectionChange(WifiConnectivityStatus status);
}
private final Listener mListener;
private final List<Network> mNetworks = new ArrayList<>();
private WifiConnectivityStatus mStatus = WifiConnectivityStatus.STATUS_WIFI_UNAVAILABLE;
private final NetworkCallback mNetworkCallback = new NetworkCallback() {
@Override
public void onAvailable(Network network) {
mNetworks.remove(network);
mNetworks.add(network);
mStatus = WifiConnectivityStatus.STATUS_WIFI_CONNECTED;
mListener.onWifiConnectionChange(mStatus);
LogUtil.logD(TAG, "wifi network available " + network);
}
@Override
public void onLost(Network network) {
if (mStatus == WifiConnectivityStatus.STATUS_WIFI_UNAVAILABLE) {
return;
}
LogUtil.logD(TAG, "wifi network lost " + network);
mNetworks.remove(network);
if (mNetworks.isEmpty()) {
mStatus = WifiConnectivityStatus.STATUS_WIFI_UNAVAILABLE;
mListener.onWifiConnectionChange(mStatus);
}
}
};
WearWifiNetworkAgent(Listener listener) {
mListener = listener;
}
/** Register the agent with connectivity manager. */
public void register(Context context) {
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build();
ConnectivityManager connectivityManager =
context.getSystemService(ConnectivityManager.class);
connectivityManager.registerNetworkCallback(networkRequest, mNetworkCallback);
}
}