Files
rr3-apk/decompiled/sources/com/facebook/internal/ImageDownloader.java
Daniel Elliott f9d20bb3fc Add decompiled APK source code (JADX)
- 28,932 files
- Full Java source code
- Smali files
- Resources

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-18 14:52:23 -08:00

408 lines
15 KiB
Java

package com.facebook.internal;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.VisibleForTesting;
import com.facebook.internal.ImageRequest;
import com.facebook.internal.WorkQueue;
import com.facebook.internal.instrument.crashshield.CrashShieldHandler;
import java.util.HashMap;
import java.util.Map;
import kotlin.Unit;
import kotlin.jvm.internal.DefaultConstructorMarker;
import kotlin.jvm.internal.Intrinsics;
/* loaded from: classes2.dex */
public final class ImageDownloader {
private static final int CACHE_READ_QUEUE_MAX_CONCURRENT = 2;
private static final int DOWNLOAD_QUEUE_MAX_CONCURRENT = 8;
private static Handler handler;
public static final ImageDownloader INSTANCE = new ImageDownloader();
private static final WorkQueue downloadQueue = new WorkQueue(8, null, 2, null);
private static final WorkQueue cacheReadQueue = new WorkQueue(2, null, 2, null);
private static final Map<RequestKey, DownloaderContext> pendingRequests = new HashMap();
@VisibleForTesting(otherwise = 2)
public final Map<RequestKey, DownloaderContext> getPendingRequests() {
return pendingRequests;
}
private ImageDownloader() {
}
private final synchronized Handler getHandler() {
try {
if (handler == null) {
handler = new Handler(Looper.getMainLooper());
}
} catch (Throwable th) {
throw th;
}
return handler;
}
public static final void downloadAsync(ImageRequest imageRequest) {
if (imageRequest == null) {
return;
}
RequestKey requestKey = new RequestKey(imageRequest.getImageUri(), imageRequest.getCallerTag());
Map<RequestKey, DownloaderContext> map = pendingRequests;
synchronized (map) {
try {
DownloaderContext downloaderContext = map.get(requestKey);
if (downloaderContext != null) {
downloaderContext.setRequest(imageRequest);
downloaderContext.setCancelled(false);
WorkQueue.WorkItem workItem = downloaderContext.getWorkItem();
if (workItem != null) {
workItem.moveToFront();
Unit unit = Unit.INSTANCE;
}
} else {
INSTANCE.enqueueCacheRead(imageRequest, requestKey, imageRequest.isCachedRedirectAllowed());
Unit unit2 = Unit.INSTANCE;
}
} finally {
}
}
}
public static final boolean cancelRequest(ImageRequest request) {
boolean z;
Intrinsics.checkNotNullParameter(request, "request");
RequestKey requestKey = new RequestKey(request.getImageUri(), request.getCallerTag());
Map<RequestKey, DownloaderContext> map = pendingRequests;
synchronized (map) {
try {
DownloaderContext downloaderContext = map.get(requestKey);
if (downloaderContext != null) {
WorkQueue.WorkItem workItem = downloaderContext.getWorkItem();
z = true;
if (workItem != null && workItem.cancel()) {
map.remove(requestKey);
} else {
downloaderContext.setCancelled(true);
}
} else {
z = false;
}
Unit unit = Unit.INSTANCE;
} catch (Throwable th) {
throw th;
}
}
return z;
}
public static final void prioritizeRequest(ImageRequest request) {
WorkQueue.WorkItem workItem;
Intrinsics.checkNotNullParameter(request, "request");
RequestKey requestKey = new RequestKey(request.getImageUri(), request.getCallerTag());
Map<RequestKey, DownloaderContext> map = pendingRequests;
synchronized (map) {
try {
DownloaderContext downloaderContext = map.get(requestKey);
if (downloaderContext != null && (workItem = downloaderContext.getWorkItem()) != null) {
workItem.moveToFront();
}
Unit unit = Unit.INSTANCE;
} catch (Throwable th) {
throw th;
}
}
}
public static final void clearCache() {
ImageResponseCache.clearCache();
UrlRedirectCache.clearCache();
}
private final void enqueueCacheRead(ImageRequest imageRequest, RequestKey requestKey, boolean z) {
enqueueRequest(imageRequest, requestKey, cacheReadQueue, new CacheReadWorkItem(requestKey, z));
}
private final void enqueueDownload(ImageRequest imageRequest, RequestKey requestKey) {
enqueueRequest(imageRequest, requestKey, downloadQueue, new DownloadImageWorkItem(requestKey));
}
private final void enqueueRequest(ImageRequest imageRequest, RequestKey requestKey, WorkQueue workQueue, Runnable runnable) {
Map<RequestKey, DownloaderContext> map = pendingRequests;
synchronized (map) {
DownloaderContext downloaderContext = new DownloaderContext(imageRequest);
map.put(requestKey, downloaderContext);
downloaderContext.setWorkItem(WorkQueue.addActiveWorkItem$default(workQueue, runnable, false, 2, null));
Unit unit = Unit.INSTANCE;
}
}
private final void issueResponse(RequestKey requestKey, final Exception exc, final Bitmap bitmap, final boolean z) {
Handler handler2;
DownloaderContext removePendingRequest = removePendingRequest(requestKey);
if (removePendingRequest == null || removePendingRequest.isCancelled()) {
return;
}
final ImageRequest request = removePendingRequest.getRequest();
final ImageRequest.Callback callback = request == null ? null : request.getCallback();
if (callback == null || (handler2 = getHandler()) == null) {
return;
}
handler2.post(new Runnable() { // from class: com.facebook.internal.ImageDownloader$$ExternalSyntheticLambda0
@Override // java.lang.Runnable
public final void run() {
ImageDownloader.m573issueResponse$lambda4(ImageRequest.this, exc, z, bitmap, callback);
}
});
}
/* JADX INFO: Access modifiers changed from: private */
/* renamed from: issueResponse$lambda-4, reason: not valid java name */
public static final void m573issueResponse$lambda4(ImageRequest request, Exception exc, boolean z, Bitmap bitmap, ImageRequest.Callback callback) {
Intrinsics.checkNotNullParameter(request, "$request");
callback.onCompleted(new ImageResponse(request, exc, z, bitmap));
}
/* JADX INFO: Access modifiers changed from: private */
/* JADX WARN: Removed duplicated region for block: B:11:0x0027 */
/* JADX WARN: Removed duplicated region for block: B:14:0x0032 */
/* JADX WARN: Removed duplicated region for block: B:9:0x001b */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public final void readFromCache(com.facebook.internal.ImageDownloader.RequestKey r4, boolean r5) {
/*
r3 = this;
r0 = 0
r1 = 0
if (r5 == 0) goto L18
com.facebook.internal.UrlRedirectCache r5 = com.facebook.internal.UrlRedirectCache.INSTANCE
android.net.Uri r5 = r4.getUri()
android.net.Uri r5 = com.facebook.internal.UrlRedirectCache.getRedirectedUri(r5)
if (r5 == 0) goto L18
java.io.InputStream r5 = com.facebook.internal.ImageResponseCache.getCachedImageStream(r5)
if (r5 == 0) goto L19
r1 = 1
goto L19
L18:
r5 = r0
L19:
if (r1 != 0) goto L25
com.facebook.internal.ImageResponseCache r5 = com.facebook.internal.ImageResponseCache.INSTANCE
android.net.Uri r5 = r4.getUri()
java.io.InputStream r5 = com.facebook.internal.ImageResponseCache.getCachedImageStream(r5)
L25:
if (r5 == 0) goto L32
android.graphics.Bitmap r2 = android.graphics.BitmapFactory.decodeStream(r5)
com.facebook.internal.Utility.closeQuietly(r5)
r3.issueResponse(r4, r0, r2, r1)
goto L4a
L32:
com.facebook.internal.ImageDownloader$DownloaderContext r5 = r3.removePendingRequest(r4)
if (r5 != 0) goto L39
goto L3d
L39:
com.facebook.internal.ImageRequest r0 = r5.getRequest()
L3d:
if (r5 == 0) goto L4a
boolean r5 = r5.isCancelled()
if (r5 != 0) goto L4a
if (r0 == 0) goto L4a
r3.enqueueDownload(r0, r4)
L4a:
return
*/
throw new UnsupportedOperationException("Method not decompiled: com.facebook.internal.ImageDownloader.readFromCache(com.facebook.internal.ImageDownloader$RequestKey, boolean):void");
}
/* JADX INFO: Access modifiers changed from: private */
/* JADX WARN: Removed duplicated region for block: B:28:0x00e5 */
/* JADX WARN: Removed duplicated region for block: B:31:? A[RETURN, SYNTHETIC] */
/* JADX WARN: Type inference failed for: r4v6, types: [int] */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public final void download(com.facebook.internal.ImageDownloader.RequestKey r11) {
/*
Method dump skipped, instructions count: 233
To view this dump add '--comments-level debug' option
*/
throw new UnsupportedOperationException("Method not decompiled: com.facebook.internal.ImageDownloader.download(com.facebook.internal.ImageDownloader$RequestKey):void");
}
private final DownloaderContext removePendingRequest(RequestKey requestKey) {
DownloaderContext remove;
Map<RequestKey, DownloaderContext> map = pendingRequests;
synchronized (map) {
remove = map.remove(requestKey);
}
return remove;
}
@VisibleForTesting(otherwise = 2)
public static final class RequestKey {
public static final Companion Companion = new Companion(null);
private static final int HASH_MULTIPLIER = 37;
private static final int HASH_SEED = 29;
private Object tag;
private Uri uri;
public final Object getTag() {
return this.tag;
}
public final Uri getUri() {
return this.uri;
}
public final void setTag(Object obj) {
Intrinsics.checkNotNullParameter(obj, "<set-?>");
this.tag = obj;
}
public final void setUri(Uri uri) {
Intrinsics.checkNotNullParameter(uri, "<set-?>");
this.uri = uri;
}
public RequestKey(Uri uri, Object tag) {
Intrinsics.checkNotNullParameter(uri, "uri");
Intrinsics.checkNotNullParameter(tag, "tag");
this.uri = uri;
this.tag = tag;
}
public int hashCode() {
return ((1073 + this.uri.hashCode()) * 37) + this.tag.hashCode();
}
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof RequestKey)) {
return false;
}
RequestKey requestKey = (RequestKey) obj;
return requestKey.uri == this.uri && requestKey.tag == this.tag;
}
public static final class Companion {
public /* synthetic */ Companion(DefaultConstructorMarker defaultConstructorMarker) {
this();
}
private Companion() {
}
}
}
@VisibleForTesting(otherwise = 2)
public static final class DownloaderContext {
private boolean isCancelled;
private ImageRequest request;
private WorkQueue.WorkItem workItem;
public final ImageRequest getRequest() {
return this.request;
}
public final WorkQueue.WorkItem getWorkItem() {
return this.workItem;
}
public final boolean isCancelled() {
return this.isCancelled;
}
public final void setCancelled(boolean z) {
this.isCancelled = z;
}
public final void setRequest(ImageRequest imageRequest) {
Intrinsics.checkNotNullParameter(imageRequest, "<set-?>");
this.request = imageRequest;
}
public final void setWorkItem(WorkQueue.WorkItem workItem) {
this.workItem = workItem;
}
public DownloaderContext(ImageRequest request) {
Intrinsics.checkNotNullParameter(request, "request");
this.request = request;
}
}
public static final class CacheReadWorkItem implements Runnable {
private final boolean allowCachedRedirects;
private final RequestKey key;
public CacheReadWorkItem(RequestKey key, boolean z) {
Intrinsics.checkNotNullParameter(key, "key");
this.key = key;
this.allowCachedRedirects = z;
}
@Override // java.lang.Runnable
public void run() {
if (CrashShieldHandler.isObjectCrashing(this)) {
return;
}
try {
if (CrashShieldHandler.isObjectCrashing(this)) {
return;
}
try {
if (CrashShieldHandler.isObjectCrashing(this)) {
return;
}
try {
ImageDownloader.INSTANCE.readFromCache(this.key, this.allowCachedRedirects);
} catch (Throwable th) {
CrashShieldHandler.handleThrowable(th, this);
}
} catch (Throwable th2) {
CrashShieldHandler.handleThrowable(th2, this);
}
} catch (Throwable th3) {
CrashShieldHandler.handleThrowable(th3, this);
}
}
}
public static final class DownloadImageWorkItem implements Runnable {
private final RequestKey key;
public DownloadImageWorkItem(RequestKey key) {
Intrinsics.checkNotNullParameter(key, "key");
this.key = key;
}
@Override // java.lang.Runnable
public void run() {
if (CrashShieldHandler.isObjectCrashing(this)) {
return;
}
try {
if (CrashShieldHandler.isObjectCrashing(this)) {
return;
}
try {
if (CrashShieldHandler.isObjectCrashing(this)) {
return;
}
try {
ImageDownloader.INSTANCE.download(this.key);
} catch (Throwable th) {
CrashShieldHandler.handleThrowable(th, this);
}
} catch (Throwable th2) {
CrashShieldHandler.handleThrowable(th2, this);
}
} catch (Throwable th3) {
CrashShieldHandler.handleThrowable(th3, this);
}
}
}
}