Download images parallel on faster connections

This commit is contained in:
M66B 2020-03-23 19:30:57 +01:00
parent c263149c5d
commit 786ef4b660
1 changed files with 29 additions and 2 deletions

View File

@ -37,6 +37,9 @@ import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.LevelListDrawable; import android.graphics.drawable.LevelListDrawable;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.text.TextUtils; import android.text.TextUtils;
@ -69,13 +72,16 @@ import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
class ImageHelper { class ImageHelper {
private static final ExecutorService executor = private static final ExecutorService executor_1 =
Helper.getBackgroundExecutor(1, "image"); 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 DOWNLOAD_TIMEOUT = 15 * 1000; // milliseconds
private static final int MAX_REDIRECTS = 10; private static final int MAX_REDIRECTS = 10;
private static final long FIT_DRAWABLE_WARNING = 10 * 1000L; // milliseconds private static final long FIT_DRAWABLE_WARNING = 10 * 1000L; // milliseconds
private static final long FIT_DRAWABLE_TIMEOUT = 20 * 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) { static Bitmap generateIdenticon(@NonNull String email, int size, int pixels, Context context) {
byte[] hash = getHash(email); byte[] hash = getHash(email);
@ -336,6 +342,27 @@ class ImageHelper {
lld.setBounds(0, 0, px, px); lld.setBounds(0, 0, px, px);
lld.setLevel(1); 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() { executor.submit(new Runnable() {
@Override @Override
public void run() { public void run() {