Issue #248 wifi detection does not work on some devices, so I'll have to add a permission

This commit is contained in:
Sergey Eremin
2017-07-29 20:38:24 +03:00
parent a2c7e291d8
commit e90fedcf3f
5 changed files with 50 additions and 21 deletions

View File

@@ -6,6 +6,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermissions" />

View File

@@ -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)
)
)
;

View File

@@ -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);

View File

@@ -59,6 +59,6 @@ public class LoadImageTask extends AsyncTask<ImageSource, Void, Void> {
}
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);
}
}

View File

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