jimu-decompiled/sources/com/liulishuo/filedownloader/QueuesHandler.java
2025-05-13 19:24:51 +02:00

229 lines
8.9 KiB
Java

package com.liulishuo.filedownloader;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.util.SparseArray;
import com.liulishuo.filedownloader.BaseDownloadTask;
import com.liulishuo.filedownloader.util.FileDownloadLog;
import com.liulishuo.filedownloader.util.FileDownloadUtils;
import java.lang.ref.WeakReference;
import java.util.Iterator;
import java.util.List;
/* loaded from: classes.dex */
class QueuesHandler implements IQueuesHandler {
private final SparseArray<Handler> a = new SparseArray<>();
private static class SerialFinishListener implements BaseDownloadTask.FinishListener {
private final WeakReference<SerialHandlerCallback> a;
private int b;
public BaseDownloadTask.FinishListener a(int i) {
this.b = i;
return this;
}
private SerialFinishListener(WeakReference<SerialHandlerCallback> weakReference) {
this.a = weakReference;
}
@Override // com.liulishuo.filedownloader.BaseDownloadTask.FinishListener
public void a(BaseDownloadTask baseDownloadTask) {
WeakReference<SerialHandlerCallback> weakReference = this.a;
if (weakReference == null || weakReference.get() == null) {
return;
}
this.a.get().a(this.b);
}
}
private class SerialHandlerCallback implements Handler.Callback {
private Handler a;
private List<BaseDownloadTask.IRunningTask> b;
private int c = 0;
private SerialFinishListener d = new SerialFinishListener(new WeakReference(this));
SerialHandlerCallback() {
}
public void b() {
a(this.c);
}
@Override // android.os.Handler.Callback
public boolean handleMessage(Message message) {
int i = message.what;
if (i == 1) {
if (message.arg1 < this.b.size()) {
this.c = message.arg1;
BaseDownloadTask.IRunningTask iRunningTask = this.b.get(this.c);
synchronized (iRunningTask.y()) {
if (iRunningTask.F().getStatus() == 0 && !FileDownloadList.b().c(iRunningTask)) {
BaseDownloadTask F = iRunningTask.F();
SerialFinishListener serialFinishListener = this.d;
serialFinishListener.a(this.c + 1);
F.a((BaseDownloadTask.FinishListener) serialFinishListener);
iRunningTask.A();
}
if (FileDownloadLog.a) {
FileDownloadLog.a(SerialHandlerCallback.class, "direct go next by not contains %s %d", iRunningTask, Integer.valueOf(message.arg1));
}
a(message.arg1 + 1);
return true;
}
}
synchronized (QueuesHandler.this.a) {
QueuesHandler.this.a.remove(this.b.get(0).i());
}
Handler handler = this.a;
FileDownloadListener fileDownloadListener = null;
if (handler != null && handler.getLooper() != null) {
this.a.getLooper().quit();
this.a = null;
this.b = null;
this.d = null;
}
if (FileDownloadLog.a) {
Object[] objArr = new Object[2];
List<BaseDownloadTask.IRunningTask> list = this.b;
if (list != null && list.get(0) != null) {
fileDownloadListener = this.b.get(0).F().v();
}
objArr[0] = fileDownloadListener;
objArr[1] = Integer.valueOf(message.arg1);
FileDownloadLog.a(SerialHandlerCallback.class, "final serial %s %d", objArr);
}
return true;
}
if (i == 2) {
a();
} else if (i == 3) {
b();
}
return true;
}
public void a(Handler handler) {
this.a = handler;
}
public void a(List<BaseDownloadTask.IRunningTask> list) {
this.b = list;
}
public void a() {
this.b.get(this.c).F().b(this.d);
this.a.removeCallbacksAndMessages(null);
}
/* JADX INFO: Access modifiers changed from: private */
public void a(int i) {
Handler handler = this.a;
if (handler != null && this.b != null) {
Message obtainMessage = handler.obtainMessage();
obtainMessage.what = 1;
obtainMessage.arg1 = i;
if (FileDownloadLog.a) {
Object[] objArr = new Object[2];
List<BaseDownloadTask.IRunningTask> list = this.b;
FileDownloadListener fileDownloadListener = null;
if (list != null && list.get(0) != null) {
fileDownloadListener = this.b.get(0).F().v();
}
objArr[0] = fileDownloadListener;
objArr[1] = Integer.valueOf(obtainMessage.arg1);
FileDownloadLog.a(SerialHandlerCallback.class, "start next %s %s", objArr);
}
this.a.sendMessage(obtainMessage);
return;
}
FileDownloadLog.e(this, "need go next %d, but params is not ready %s %s", Integer.valueOf(i), this.a, this.b);
}
}
QueuesHandler() {
}
@Override // com.liulishuo.filedownloader.IQueuesHandler
public boolean b(FileDownloadListener fileDownloadListener) {
SerialHandlerCallback serialHandlerCallback = new SerialHandlerCallback();
int hashCode = serialHandlerCallback.hashCode();
List<BaseDownloadTask.IRunningTask> a = FileDownloadList.b().a(hashCode, fileDownloadListener);
if (a(hashCode, a, fileDownloadListener, true)) {
return false;
}
HandlerThread handlerThread = new HandlerThread(FileDownloadUtils.a("filedownloader serial thread %s-%d", fileDownloadListener, Integer.valueOf(hashCode)));
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper(), serialHandlerCallback);
serialHandlerCallback.a(handler);
serialHandlerCallback.a(a);
serialHandlerCallback.a(0);
synchronized (this.a) {
this.a.put(hashCode, handler);
}
return true;
}
@Override // com.liulishuo.filedownloader.IQueuesHandler
public boolean a(FileDownloadListener fileDownloadListener) {
int hashCode = fileDownloadListener.hashCode();
List<BaseDownloadTask.IRunningTask> a = FileDownloadList.b().a(hashCode, fileDownloadListener);
if (a(hashCode, a, fileDownloadListener, false)) {
return false;
}
Iterator<BaseDownloadTask.IRunningTask> it = a.iterator();
while (it.hasNext()) {
it.next().A();
}
return true;
}
@Override // com.liulishuo.filedownloader.IQueuesHandler
public void a(List<Integer> list) {
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
b(this.a.get(it.next().intValue()));
}
}
@Override // com.liulishuo.filedownloader.IQueuesHandler
public int a() {
return this.a.size();
}
@Override // com.liulishuo.filedownloader.IQueuesHandler
public boolean a(int i) {
return this.a.get(i) != null;
}
private boolean a(int i, List<BaseDownloadTask.IRunningTask> list, FileDownloadListener fileDownloadListener, boolean z) {
if (FileDownloadMonitor.b()) {
FileDownloadMonitor.a().a(list.size(), true, fileDownloadListener);
}
if (FileDownloadLog.a) {
FileDownloadLog.d(FileDownloader.class, "start list attachKey[%d] size[%d] listener[%s] isSerial[%B]", Integer.valueOf(i), Integer.valueOf(list.size()), fileDownloadListener, Boolean.valueOf(z));
}
if (list != null && !list.isEmpty()) {
return false;
}
FileDownloadLog.e(FileDownloader.class, "Tasks with the listener can't start, because can't find any task with the provided listener, maybe tasks instance has been started in the past, so they are all are inUsing, if in this case, you can use [BaseDownloadTask#reuse] to reuse theme first then start again: [%s, %B]", fileDownloadListener, Boolean.valueOf(z));
return true;
}
@Override // com.liulishuo.filedownloader.IQueuesHandler
public void b() {
for (int i = 0; i < this.a.size(); i++) {
a(this.a.get(this.a.keyAt(i)));
}
}
private void a(Handler handler) {
handler.sendEmptyMessage(2);
}
private void b(Handler handler) {
handler.sendEmptyMessage(3);
}
}