Prevent lock out

This commit is contained in:
M66B 2020-01-13 13:48:46 +01:00
parent e73d8f4329
commit 7fbaa2c6a6
1 changed files with 42 additions and 32 deletions

View File

@ -39,6 +39,7 @@ import android.graphics.drawable.Drawable;
import android.graphics.drawable.LevelListDrawable; import android.graphics.drawable.LevelListDrawable;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Base64; import android.util.Base64;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
@ -72,6 +73,7 @@ class ImageHelper {
Helper.getBackgroundExecutor(1, "image"); Helper.getBackgroundExecutor(1, "image");
private static final int MAX_REDIRECTS = 10; private static final int MAX_REDIRECTS = 10;
private static final long FIT_DRAWABLE_TIMEOUT = 10 * 1000L; // milliseconds
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);
@ -389,11 +391,30 @@ class ImageHelper {
} }
private static void fitDrawable(final Drawable d, final AnnotatedSource a, final View view) { private static void fitDrawable(final Drawable d, final AnnotatedSource a, final View view) {
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
Log.w("fitDrawable UI thread");
_fitDrawble(d, a, view);
} else {
Semaphore semaphore = new Semaphore(0); Semaphore semaphore = new Semaphore(0);
view.post(new Runnable() { view.post(new Runnable() {
@Override @Override
public void run() { public void run() {
_fitDrawble(d, a, view);
semaphore.release();
}
});
try {
if (!semaphore.tryAcquire(FIT_DRAWABLE_TIMEOUT, TimeUnit.MILLISECONDS))
Log.e("fitDrawable failed timeout=" + FIT_DRAWABLE_TIMEOUT);
} catch (InterruptedException ex) {
Log.w(ex);
}
}
}
private static void _fitDrawble(Drawable d, AnnotatedSource a, View view) {
Rect bounds = d.getBounds(); Rect bounds = d.getBounds();
int w = bounds.width(); int w = bounds.width();
int h = bounds.height(); int h = bounds.height();
@ -416,17 +437,6 @@ class ImageHelper {
h = Math.round(h * scale); h = Math.round(h * scale);
d.setBounds(0, 0, w, h); d.setBounds(0, 0, w, h);
} }
semaphore.release();
}
});
try {
if (!semaphore.tryAcquire(10 * 1000, TimeUnit.MILLISECONDS))
Log.e("fitDrawable failed");
} catch (InterruptedException ex) {
Log.w(ex);
}
} }
private static Drawable getDataDrawable(Context context, String source) { private static Drawable getDataDrawable(Context context, String source) {