package io.github.privacystreams.utils; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.SupplicantState; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.BatteryManager; import android.os.Build; import android.os.PowerManager; import android.util.Log; import io.github.privacystreams.core.UQI; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GoogleApiAvailability; /** * A helper class to access connection-related utilities. */ public class DeviceUtils { /** * Check whether WiFi is connected * @param context a Context instance * @return true if Wifi is connected */ // @RequiresPermission(value = Manifest.permission.ACCESS_WIFI_STATE) public static boolean isWifiConnected(Context context) { WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (wifiManager == null || !wifiManager.isWifiEnabled()) return false; WifiInfo wifiInfo = wifiManager.getConnectionInfo(); if (wifiInfo == null || wifiInfo.getNetworkId() == -1) return false; return wifiInfo.getSupplicantState() == SupplicantState.ASSOCIATED; } /** * Get the BSSID of the currently-connected WiFi AP * @param context a Context instance * @return the BSSID of WiFi, or null if the device is not connected */ // @RequiresPermission(value = Manifest.permission.ACCESS_WIFI_STATE) public static String getWifiBSSID(Context context) { WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (wifiManager == null || !wifiManager.isWifiEnabled()) return null; WifiInfo wifiInfo = wifiManager.getConnectionInfo(); if (wifiInfo == null || wifiInfo.getNetworkId() == -1) return null; return wifiInfo.getBSSID(); } /** * Checks whether the device currently has a network connection. * @return true if the device has a network connection, false otherwise. */ public static boolean isDeviceOnline(Context context) { ConnectivityManager connMgr = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); return (networkInfo != null && networkInfo.isConnected()); } /** * Check that Google Play services APK is installed and up to date. * @return true if Google Play Services is available and up to date on this device, false otherwise. */ public static boolean isGooglePlayServicesAvailable(Context context) { GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); final int connectionStatusCode = apiAvailability.isGooglePlayServicesAvailable(context); return connectionStatusCode == ConnectionResult.SUCCESS; } /** * Attempt to resolve a missing, out-of-date, invalid or disabled Google * Play Services installation via a user dialog, if possible. */ public static void acquireGooglePlayServices(Context context) { GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); final int connectionStatusCode = apiAvailability.isGooglePlayServicesAvailable(context); if (apiAvailability.isUserResolvableError(connectionStatusCode)) { Log.e("Error","Connection Status Code"+connectionStatusCode); } } /** * Get current battery level * @param context a Context instance * @return the battery level in percents */ public static float getBatteryLevel(Context context) { Intent batteryIntent = context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); if (batteryIntent == null) return -1; int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); return ((float)level / (float)scale) * 100.0f; } /** * Get whether the device is interactive currently * @param context a Context instance * @return true if the device is interactive, otherwise false */ public static boolean isDeviceInteractive(Context context) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { return pm.isInteractive(); } else { return pm.isScreenOn(); } } }