Last active
November 2, 2017 12:32
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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