|
|
|
@ -305,7 +305,7 @@ public class Helper {
|
|
|
|
|
return filename.substring(index + 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static Boolean isMetered(Context context) {
|
|
|
|
|
static Boolean isMetered(Context context, boolean log) {
|
|
|
|
|
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
|
|
|
|
|
|
|
|
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M)
|
|
|
|
@ -313,12 +313,18 @@ public class Helper {
|
|
|
|
|
|
|
|
|
|
Network active = cm.getActiveNetwork();
|
|
|
|
|
if (active == null) {
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: no active network");
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: no active network");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
NetworkInfo ni = cm.getNetworkInfo(active);
|
|
|
|
|
if (ni == null) {
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: active no info");
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: active no info");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
@ -326,12 +332,18 @@ public class Helper {
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: active info=" + ni);
|
|
|
|
|
|
|
|
|
|
if (!ni.isConnected()) {
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: active not connected");
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: active not connected");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
NetworkCapabilities caps = cm.getNetworkCapabilities(active);
|
|
|
|
|
if (caps == null) {
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: active no caps");
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: active no caps");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
@ -340,6 +352,9 @@ public class Helper {
|
|
|
|
|
|
|
|
|
|
if (caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)) {
|
|
|
|
|
boolean unmetered = caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: active not VPN unmetered=" + unmetered);
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: active not VPN unmetered=" + unmetered);
|
|
|
|
|
return !unmetered;
|
|
|
|
|
}
|
|
|
|
@ -348,6 +363,9 @@ public class Helper {
|
|
|
|
|
|
|
|
|
|
Network[] networks = cm.getAllNetworks();
|
|
|
|
|
if (networks == null) {
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: no underlying networks");
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: no underlying networks");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
@ -356,6 +374,9 @@ public class Helper {
|
|
|
|
|
for (Network network : networks) {
|
|
|
|
|
ni = cm.getNetworkInfo(network);
|
|
|
|
|
if (ni == null) {
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: no underlying info");
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: no underlying info");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
@ -364,6 +385,9 @@ public class Helper {
|
|
|
|
|
|
|
|
|
|
caps = cm.getNetworkCapabilities(network);
|
|
|
|
|
if (caps == null) {
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: no underlying caps");
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: no underlying caps");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
@ -376,6 +400,9 @@ public class Helper {
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: underlying is connected");
|
|
|
|
|
|
|
|
|
|
if (caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)) {
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: underlying is unmetered");
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: underlying is unmetered");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
@ -386,10 +413,16 @@ public class Helper {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!connected) {
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: underlying disconnected");
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: underlying disconnected");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (log)
|
|
|
|
|
EntityLog.log(context, "isMetered: underlying is metered");
|
|
|
|
|
else
|
|
|
|
|
Log.i(Helper.TAG, "isMetered: underlying is metered");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|