From 8b32e164280bb834a45fdc0f97563025540a274d Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Fri, 12 May 2023 19:51:27 +0300 Subject: [PATCH] check_for_slow_speed (#1293) --- .../java/ru/vtosters/lite/ssfs/UsersList.java | 2 +- .../ru/vtosters/lite/utils/ImageUtils.java | 3 +- .../ru/vtosters/lite/utils/NetworkUtils.java | 30 +++++++++++++++++++ .../vtosters/lite/utils/VTVerifications.java | 2 +- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/ssfs/UsersList.java b/app/src/main/java/ru/vtosters/lite/ssfs/UsersList.java index 4faabadff..a734d5fc8 100644 --- a/app/src/main/java/ru/vtosters/lite/ssfs/UsersList.java +++ b/app/src/main/java/ru/vtosters/lite/ssfs/UsersList.java @@ -28,7 +28,7 @@ public class UsersList { public static void getUsersList() { var prefs = AndroidUtils.getGlobalContext().getSharedPreferences("vt_another_data", 0); - if ((!NetworkUtils.isNetworkConnected() || getBoolValue("isRoamingState", false)) && prefs.contains("ids")) { + if ((!NetworkUtils.isNetworkConnected() || NetworkUtils.isInternetSlow()) && prefs.contains("ids")) { return; } diff --git a/app/src/main/java/ru/vtosters/lite/utils/ImageUtils.java b/app/src/main/java/ru/vtosters/lite/utils/ImageUtils.java index b2a875e9d..8ba6c3813 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/ImageUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/ImageUtils.java @@ -13,8 +13,7 @@ public class ImageUtils { // must be called asynchronously public static Drawable getDrawableFromUrl(String url, int placeholderRes, boolean rounded, boolean scaled) { - - if (NetworkUtils.isNetworkConnected()) { + if (NetworkUtils.isNetworkConnected() && !NetworkUtils.isInternetSlow()) { try { var bmp = BitmapFactory.decodeStream(new URL(url).openStream()); diff --git a/app/src/main/java/ru/vtosters/lite/utils/NetworkUtils.java b/app/src/main/java/ru/vtosters/lite/utils/NetworkUtils.java index 8a3e689f6..72e2129d9 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/NetworkUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/NetworkUtils.java @@ -2,7 +2,13 @@ package ru.vtosters.lite.utils; import android.content.Context; import android.net.ConnectivityManager; +import android.net.NetworkCapabilities; +import android.net.NetworkInfo; import android.os.Build; +import android.telephony.TelephonyManager; +import androidx.core.content.ContextCompat; + +import static ru.vtosters.lite.utils.Preferences.getBoolValue; public class NetworkUtils { public static boolean isNetworkConnected() { @@ -13,4 +19,28 @@ public class NetworkUtils { return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnectedOrConnecting(); } } // Network check + + public static boolean isInternetSlow() { + if (getBoolValue("isRoamingState", false)) return true; + ConnectivityManager cm = (ConnectivityManager) AndroidUtils.getGlobalContext().getSystemService(Context.CONNECTIVITY_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + NetworkCapabilities nc = cm != null ? cm.getNetworkCapabilities(cm.getActiveNetwork()) : null; + if (nc == null) { + return true; + } else { + int speed = nc.getLinkDownstreamBandwidthKbps(); + double speedMbps = speed / 1000.0; + return speedMbps < 1.0; + } + } else { + NetworkInfo ni = cm != null ? cm.getActiveNetworkInfo() : null; + if (ni == null || !ni.isConnected()) { + return true; + } else { + int type = ni.getType(); + int subtype = ni.getSubtype(); + return type == ConnectivityManager.TYPE_MOBILE && (subtype == TelephonyManager.NETWORK_TYPE_EDGE || subtype == TelephonyManager.NETWORK_TYPE_GPRS); + } + } + } } diff --git a/app/src/main/java/ru/vtosters/lite/utils/VTVerifications.java b/app/src/main/java/ru/vtosters/lite/utils/VTVerifications.java index 168419d8d..2ed647272 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/VTVerifications.java +++ b/app/src/main/java/ru/vtosters/lite/utils/VTVerifications.java @@ -28,7 +28,7 @@ public class VTVerifications { public static void load(Context context) { var prefs = context.getSharedPreferences("vt_another_data", 0); - if ((!NetworkUtils.isNetworkConnected() || getBoolValue("isRoamingState", false)) && prefs.contains("ids")) { + if ((!NetworkUtils.isNetworkConnected() && NetworkUtils.isInternetSlow() || getBoolValue("isRoamingState", false)) && prefs.contains("ids")) { parseJson(prefs.getString("ids", "[]")); return; }