summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObserver.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObserver.java')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObserver.java92
1 files changed, 92 insertions, 0 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObserver.java b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObserver.java
new file mode 100644
index 00000000..1d1fa951
--- /dev/null
+++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObserver.java
@@ -0,0 +1,92 @@
+package se.leap.bitmaskclient.tethering;
+
+import android.content.Context;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.net.wifi.WifiManager;
+
+import java.lang.reflect.Method;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.util.Enumeration;
+
+public class TetheringObserver {
+ private static TetheringObserver instance;
+
+ private boolean isWifiTetheringEnabled;
+ private boolean isUsbTetheringEnabled;
+ private WifiManager wifiManager;
+ private ConnectivityManager connectivityManager;
+ private TetheringBroadcastReceiver broadcastReceiver;
+
+ private TetheringObserver() {
+ }
+
+ public static void init(Context context) {
+ if (instance == null) {
+ instance = new TetheringObserver();
+ instance.broadcastReceiver = new TetheringBroadcastReceiver();
+ IntentFilter intentFilter = new IntentFilter("android.net.wifi.WIFI_AP_STATE_CHANGED");
+ intentFilter.addAction("android.net.conn.TETHER_STATE_CHANGED");
+ context.getApplicationContext().registerReceiver(instance.broadcastReceiver, intentFilter);
+ instance.wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+ instance.setWifiTetheringEnabled(instance.isWifiApEnabled());
+ instance.connectivityManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
+ }
+ }
+
+ private boolean isWifiApEnabled() {
+ try {
+ Method method = instance.wifiManager.getClass().getMethod("getWifiApState");
+ int tmp = ((Integer) method.invoke(wifiManager));
+ return WifiHotspotState.WIFI_AP_STATE_ENABLED.ordinal() == tmp % 10;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ private boolean getUsbTetheringState() {
+ try {
+
+ for(Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
+ NetworkInterface networkInterface = en.nextElement();
+ for(Enumeration<InetAddress> enumIpAddr = networkInterface.getInetAddresses(); enumIpAddr.hasMoreElements();){
+ InetAddress inetAddress = enumIpAddr.nextElement();
+ if(!networkInterface.isLoopback()){
+ if(networkInterface.getName().contains("rndis") || networkInterface.getName().contains("usb")){
+ return true;
+ }
+ }
+ }
+ }
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+
+ return false;
+ }
+
+ public static TetheringObserver getInstance() {
+ if (instance == null) {
+ throw new RuntimeException("Call init() first!");
+ }
+
+ return instance;
+ }
+
+ void setWifiTetheringEnabled(boolean enabled) {
+ isWifiTetheringEnabled = enabled;
+ }
+
+ public boolean isWifiTetheringEnabled() {
+ return isWifiTetheringEnabled;
+ }
+
+ void updateUsbTetheringState() {
+ isUsbTetheringEnabled = getUsbTetheringState();
+ }
+
+ public boolean isUsbTetheringEnabled() {
+ return isUsbTetheringEnabled;
+ }
+}