Skip to content

Instantly share code, notes, and snippets.

@okaybroda
Last active November 2, 2017 12:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save okaybroda/ca0fb11a199f0651f131 to your computer and use it in GitHub Desktop.
Save okaybroda/ca0fb11a199f0651f131 to your computer and use it in GitHub Desktop.
A custom view that changes icons based on current WiFi state. Uses the NetworkEvents and EventBus library.
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.util.AttributeSet;
import android.widget.ImageButton;
import com.github.pwittchen.networkevents.library.BusWrapper;
import com.github.pwittchen.networkevents.library.ConnectivityStatus;
import com.github.pwittchen.networkevents.library.NetworkEvents;
import com.github.pwittchen.networkevents.library.event.ConnectivityChanged;
import com.github.pwittchen.networkevents.library.event.WifiSignalStrengthChanged;
import com.github.pwittchen.networkevents.library.logger.Logger;
import com.optimizerhq.swipepluslibrary.R;
import de.greenrobot.event.EventBus;
/**
* Created by okaybroda.
*/
public class WifiStatusIconView extends ImageButton {
NetworkEvents events;
BusWrapper busWrapper;
WifiManager wifiManager;
ConnectivityStatus connectivityStatus;
public WifiStatusIconView(Context context) {
super(context);
init(context);
}
public WifiStatusIconView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public WifiStatusIconView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
public void init(Context context) {
// Initializing icon to offline
connectivityStatus = ConnectivityStatus.OFFLINE;
setImageResource(R.drawable.ic_signal_wifi_off_white_36dp);
// Get WifiManager from the system
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
// Register for WiFi events
events = new NetworkEvents(context, busWrapper = new BusWrapper() {
@Override
public void register(Object o) {
EventBus.getDefault().register(o);
}
@Override
public void unregister(Object o) {
EventBus.getDefault().unregister(o);
}
@Override
public void post(Object o) {
EventBus.getDefault().post(o);
}
}, new Logger() {
@Override
public void log(String message) {
Utils.log("networkevents", message);
}
}).enableInternetCheck().enableWifiScan();
busWrapper.register(this);
events.register();
}
public void onEvent(ConnectivityChanged event) {
// Set WiFi icon to offline
if (event.getConnectivityStatus() == ConnectivityStatus.OFFLINE) {
setImageResource(R.drawable.ic_signal_wifi_off_white_36dp);
}
}
public void onEvent(WifiSignalStrengthChanged event) {
// Get info about current connection
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
// Get signal strength from 0 to 4
int signalStrength = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), 5);
int icon = R.drawable.ic_network_wifi_white_36dp; // Set default icon
// Change icon based on strength
switch (signalStrength) {
case 0:
icon = R.drawable.ic_signal_wifi_0_bar_white_36dp;
break;
case 1:
icon = R.drawable.ic_signal_wifi_1_bar_white_36dp;
break;
case 2:
icon = R.drawable.ic_signal_wifi_2_bar_white_36dp;
break;
case 3:
icon = R.drawable.ic_signal_wifi_3_bar_white_36dp;
break;
case 4:
icon = R.drawable.ic_signal_wifi_4_bar_white_36dp;
break;
}
setImageResource(icon);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment