diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6b8ac00ae..a415ffcf5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,6 +6,7 @@
+
diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/BackgroundUpdatableAppsTask.java b/app/src/main/java/com/github/yeriomin/yalpstore/BackgroundUpdatableAppsTask.java
index 4c1f4c78e..40b076961 100644
--- a/app/src/main/java/com/github/yeriomin/yalpstore/BackgroundUpdatableAppsTask.java
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/BackgroundUpdatableAppsTask.java
@@ -35,7 +35,7 @@ class BackgroundUpdatableAppsTask extends UpdatableAppsTask {
(PreferenceActivity.getBoolean(context, PreferenceActivity.PREFERENCE_BACKGROUND_UPDATE_DOWNLOAD)
&& (DownloadManagerFactory.get(context) instanceof DownloadManagerAdapter
|| !PreferenceActivity.getBoolean(context, PreferenceActivity.PREFERENCE_BACKGROUND_UPDATE_WIFI_ONLY)
- || NetworkState.isWifi()
+ || !NetworkState.isMetered(context)
)
)
;
diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/BitmapManager.java b/app/src/main/java/com/github/yeriomin/yalpstore/BitmapManager.java
index 3c331ebba..5f2985198 100644
--- a/app/src/main/java/com/github/yeriomin/yalpstore/BitmapManager.java
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/BitmapManager.java
@@ -58,7 +58,7 @@ public class BitmapManager {
public BitmapManager(Context context) {
baseDir = context.getCacheDir();
- noImages = PreferenceActivity.getBoolean(context, PreferenceActivity.PREFERENCE_NO_IMAGES);
+ noImages = PreferenceActivity.getBoolean(context, PreferenceActivity.PREFERENCE_NO_IMAGES) && NetworkState.isMetered(context);
}
public Bitmap getBitmap(String url, boolean fullSize) {
@@ -72,7 +72,7 @@ public class BitmapManager {
cacheBitmapInMemory(url, bitmap);
return bitmap;
}
- if (noImages && !NetworkState.isWifi()) {
+ if (noImages) {
return null;
}
bitmap = downloadBitmap(url, fullSize);
diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/LoadImageTask.java b/app/src/main/java/com/github/yeriomin/yalpstore/LoadImageTask.java
index 7eb740954..bf30eae69 100644
--- a/app/src/main/java/com/github/yeriomin/yalpstore/LoadImageTask.java
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/LoadImageTask.java
@@ -59,6 +59,6 @@ public class LoadImageTask extends AsyncTask {
}
private boolean noImages() {
- return !NetworkState.isWifi() && PreferenceActivity.getBoolean(imageView.getContext(), PreferenceActivity.PREFERENCE_NO_IMAGES);
+ return NetworkState.isMetered(imageView.getContext()) && PreferenceActivity.getBoolean(imageView.getContext(), PreferenceActivity.PREFERENCE_NO_IMAGES);
}
}
diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/NetworkState.java b/app/src/main/java/com/github/yeriomin/yalpstore/NetworkState.java
index 1d68875d5..1393335e3 100644
--- a/app/src/main/java/com/github/yeriomin/yalpstore/NetworkState.java
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/NetworkState.java
@@ -1,10 +1,23 @@
package com.github.yeriomin.yalpstore;
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import eu.chainfire.libsuperuser.Shell;
+import static android.content.Context.CONNECTIVITY_SERVICE;
+import static android.net.ConnectivityManager.TYPE_MOBILE;
+import static android.net.ConnectivityManager.TYPE_MOBILE_DUN;
+import static android.net.ConnectivityManager.TYPE_MOBILE_HIPRI;
+import static android.net.ConnectivityManager.TYPE_MOBILE_MMS;
+import static android.net.ConnectivityManager.TYPE_MOBILE_SUPL;
+import static android.net.ConnectivityManager.TYPE_WIFI;
+import static android.net.ConnectivityManager.TYPE_WIMAX;
+
public class NetworkState {
static public boolean isVpn() {
@@ -18,23 +31,38 @@ public class NetworkState {
return false;
}
- static public boolean isWifi() {
- for (String line: Shell.SH.run("cat /proc/net/wireless")) {
- String trimmed = line.trim();
- if (trimmed.startsWith("Inter") || trimmed.startsWith("face")) {
- continue;
- }
- for (String component: TextUtils.split(trimmed, " ")) {
- if (component.endsWith(":")) {
- continue;
- }
- component = component.replace(".", "");
- boolean isZero = Util.parseInt(component, 0) == 0;
- if (!isZero) {
- return true;
- }
- }
+ static public boolean isMetered(Context context) {
+ ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
+ if (null == connectivityManager) {
+ return true;
+ }
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
+ return isActiveNetworkMetered(connectivityManager);
+ } else {
+ return connectivityManager.isActiveNetworkMetered();
+ }
+ }
+
+ static private boolean isActiveNetworkMetered(ConnectivityManager connectivityManager) {
+ final NetworkInfo info = connectivityManager.getActiveNetworkInfo();
+ if (info == null) {
+ // err on side of caution
+ return true;
+ }
+ final int type = info.getType();
+ switch (type) {
+ case TYPE_MOBILE:
+ case TYPE_MOBILE_DUN:
+ case TYPE_MOBILE_HIPRI:
+ case TYPE_MOBILE_MMS:
+ case TYPE_MOBILE_SUPL:
+ case TYPE_WIMAX:
+ return true;
+ case TYPE_WIFI:
+ return false;
+ default:
+ // err on side of caution
+ return true;
}
- return false;
}
}