182 lines
7.0 KiB
Java
182 lines
7.0 KiB
Java
package com.google.android.gms.common.images;
|
|
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.BitmapFactory;
|
|
import android.net.Uri;
|
|
import android.os.Bundle;
|
|
import android.os.Handler;
|
|
import android.os.Looper;
|
|
import android.os.ParcelFileDescriptor;
|
|
import android.os.ResultReceiver;
|
|
import android.os.SystemClock;
|
|
import android.util.Log;
|
|
import androidx.collection.LruCache;
|
|
import com.google.android.gms.common.annotation.KeepName;
|
|
import com.google.android.gms.common.internal.Asserts;
|
|
import com.google.android.gms.internal.base.zak;
|
|
import com.google.android.gms.internal.base.zal;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.HashSet;
|
|
import java.util.Map;
|
|
import java.util.concurrent.CountDownLatch;
|
|
import java.util.concurrent.ExecutorService;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class ImageManager {
|
|
private static final Object i = new Object();
|
|
private static HashSet<Uri> j = new HashSet<>();
|
|
private final Context a;
|
|
private final Handler b;
|
|
private final ExecutorService c;
|
|
private final zaa d;
|
|
private final zak e;
|
|
private final Map<com.google.android.gms.common.images.zaa, ImageReceiver> f;
|
|
private final Map<Uri, ImageReceiver> g;
|
|
private final Map<Uri, Long> h;
|
|
|
|
@KeepName
|
|
private final class ImageReceiver extends ResultReceiver {
|
|
private final Uri mUri;
|
|
private final ArrayList<com.google.android.gms.common.images.zaa> zamp;
|
|
|
|
ImageReceiver(Uri uri) {
|
|
super(new zal(Looper.getMainLooper()));
|
|
this.mUri = uri;
|
|
this.zamp = new ArrayList<>();
|
|
}
|
|
|
|
@Override // android.os.ResultReceiver
|
|
public final void onReceiveResult(int i, Bundle bundle) {
|
|
ImageManager.this.c.execute(ImageManager.this.new zab(this.mUri, (ParcelFileDescriptor) bundle.getParcelable("com.google.android.gms.extra.fileDescriptor")));
|
|
}
|
|
|
|
public final void zab(com.google.android.gms.common.images.zaa zaaVar) {
|
|
Asserts.a("ImageReceiver.addImageRequest() must be called in the main thread");
|
|
this.zamp.add(zaaVar);
|
|
}
|
|
|
|
public final void zac(com.google.android.gms.common.images.zaa zaaVar) {
|
|
Asserts.a("ImageReceiver.removeImageRequest() must be called in the main thread");
|
|
this.zamp.remove(zaaVar);
|
|
}
|
|
|
|
public final void zace() {
|
|
Intent intent = new Intent("com.google.android.gms.common.images.LOAD_IMAGE");
|
|
intent.putExtra("com.google.android.gms.extras.uri", this.mUri);
|
|
intent.putExtra("com.google.android.gms.extras.resultReceiver", this);
|
|
intent.putExtra("com.google.android.gms.extras.priority", 3);
|
|
ImageManager.this.a.sendBroadcast(intent);
|
|
}
|
|
}
|
|
|
|
private static final class zaa extends LruCache<com.google.android.gms.common.images.zab, Bitmap> {
|
|
}
|
|
|
|
private final class zab implements Runnable {
|
|
private final Uri a;
|
|
private final ParcelFileDescriptor b;
|
|
|
|
public zab(Uri uri, ParcelFileDescriptor parcelFileDescriptor) {
|
|
this.a = uri;
|
|
this.b = parcelFileDescriptor;
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public final void run() {
|
|
boolean z;
|
|
Bitmap bitmap;
|
|
Asserts.b("LoadBitmapFromDiskRunnable can't be executed in the main thread");
|
|
ParcelFileDescriptor parcelFileDescriptor = this.b;
|
|
boolean z2 = false;
|
|
Bitmap bitmap2 = null;
|
|
if (parcelFileDescriptor != null) {
|
|
try {
|
|
bitmap2 = BitmapFactory.decodeFileDescriptor(parcelFileDescriptor.getFileDescriptor());
|
|
} catch (OutOfMemoryError e) {
|
|
String valueOf = String.valueOf(this.a);
|
|
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 34);
|
|
sb.append("OOM while loading bitmap for uri: ");
|
|
sb.append(valueOf);
|
|
Log.e("ImageManager", sb.toString(), e);
|
|
z2 = true;
|
|
}
|
|
try {
|
|
this.b.close();
|
|
} catch (IOException e2) {
|
|
Log.e("ImageManager", "closed failed", e2);
|
|
}
|
|
z = z2;
|
|
bitmap = bitmap2;
|
|
} else {
|
|
bitmap = null;
|
|
z = false;
|
|
}
|
|
CountDownLatch countDownLatch = new CountDownLatch(1);
|
|
ImageManager.this.b.post(ImageManager.this.new zad(this.a, bitmap, z, countDownLatch));
|
|
try {
|
|
countDownLatch.await();
|
|
} catch (InterruptedException unused) {
|
|
String valueOf2 = String.valueOf(this.a);
|
|
StringBuilder sb2 = new StringBuilder(String.valueOf(valueOf2).length() + 32);
|
|
sb2.append("Latch interrupted while posting ");
|
|
sb2.append(valueOf2);
|
|
Log.w("ImageManager", sb2.toString());
|
|
}
|
|
}
|
|
}
|
|
|
|
private final class zad implements Runnable {
|
|
private final Uri a;
|
|
private final Bitmap b;
|
|
private final CountDownLatch c;
|
|
private boolean d;
|
|
|
|
public zad(Uri uri, Bitmap bitmap, boolean z, CountDownLatch countDownLatch) {
|
|
this.a = uri;
|
|
this.b = bitmap;
|
|
this.d = z;
|
|
this.c = countDownLatch;
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public final void run() {
|
|
Asserts.a("OnBitmapLoadedRunnable must be executed in the main thread");
|
|
boolean z = this.b != null;
|
|
if (ImageManager.this.d != null) {
|
|
if (this.d) {
|
|
ImageManager.this.d.a();
|
|
System.gc();
|
|
this.d = false;
|
|
ImageManager.this.b.post(this);
|
|
return;
|
|
}
|
|
if (z) {
|
|
ImageManager.this.d.a(new com.google.android.gms.common.images.zab(this.a), this.b);
|
|
}
|
|
}
|
|
ImageReceiver imageReceiver = (ImageReceiver) ImageManager.this.g.remove(this.a);
|
|
if (imageReceiver != null) {
|
|
ArrayList arrayList = imageReceiver.zamp;
|
|
int size = arrayList.size();
|
|
for (int i = 0; i < size; i++) {
|
|
com.google.android.gms.common.images.zaa zaaVar = (com.google.android.gms.common.images.zaa) arrayList.get(i);
|
|
if (z) {
|
|
zaaVar.a(ImageManager.this.a, this.b, false);
|
|
} else {
|
|
ImageManager.this.h.put(this.a, Long.valueOf(SystemClock.elapsedRealtime()));
|
|
zaaVar.a(ImageManager.this.a, ImageManager.this.e, false);
|
|
}
|
|
ImageManager.this.f.remove(zaaVar);
|
|
}
|
|
}
|
|
this.c.countDown();
|
|
synchronized (ImageManager.i) {
|
|
ImageManager.j.remove(this.a);
|
|
}
|
|
}
|
|
}
|
|
}
|