From 786ef4b660266a861c5dbbfccc0ab132bbb92487 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 23 Mar 2020 19:30:57 +0100 Subject: [PATCH] Download images parallel on faster connections --- .../java/eu/faircode/email/ImageHelper.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ImageHelper.java b/app/src/main/java/eu/faircode/email/ImageHelper.java index cd2839f7d8..fe7f7fc289 100644 --- a/app/src/main/java/eu/faircode/email/ImageHelper.java +++ b/app/src/main/java/eu/faircode/email/ImageHelper.java @@ -37,6 +37,9 @@ import android.graphics.Typeface; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LevelListDrawable; +import android.net.ConnectivityManager; +import android.net.Network; +import android.net.NetworkCapabilities; import android.os.Build; import android.os.Handler; import android.text.TextUtils; @@ -69,13 +72,16 @@ import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; class ImageHelper { - private static final ExecutorService executor = - Helper.getBackgroundExecutor(1, "image"); + private static final ExecutorService executor_1 = + Helper.getBackgroundExecutor(1, "image_1"); + private static final ExecutorService executor_n = + Helper.getBackgroundExecutor(0, "image_n"); private static final int DOWNLOAD_TIMEOUT = 15 * 1000; // milliseconds private static final int MAX_REDIRECTS = 10; private static final long FIT_DRAWABLE_WARNING = 10 * 1000L; // milliseconds private static final long FIT_DRAWABLE_TIMEOUT = 20 * 1000L; // milliseconds + private static final int SLOW_CONNECTION = 2 * 1024; // Kbps static Bitmap generateIdenticon(@NonNull String email, int size, int pixels, Context context) { byte[] hash = getHash(email); @@ -336,6 +342,27 @@ class ImageHelper { lld.setBounds(0, 0, px, px); lld.setLevel(1); + boolean slow = true; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + // 2G GSM ~14.4 Kbps + // G GPRS ~26.8 Kbps + // E EDGE ~108.8 Kbps + // 3G UMTS ~128 Kbps + // H HSPA ~3.6 Mbps + // H+ HSPA+ ~14.4 Mbps-23.0 Mbps + // 4G LTE ~50 Mbps + // 4G LTE-A ~500 Mbps + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + Network active = (cm == null ? null : cm.getActiveNetwork()); + NetworkCapabilities caps = (active == null ? null : cm.getNetworkCapabilities(active)); + if (caps != null) { + int kbps = caps.getLinkDownstreamBandwidthKbps(); + slow = (kbps < SLOW_CONNECTION); + } + } + + ExecutorService executor = (slow ? executor_1 : executor_n); + executor.submit(new Runnable() { @Override public void run() {