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; } }