discord-jadx/app/src/main/java/androidx/loader/content/AsyncTaskLoader.java

224 lines
7.1 KiB
Java

package androidx.loader.content;
import android.content.Context;
import android.os.Handler;
import android.os.SystemClock;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.core.os.OperationCanceledException;
import androidx.core.util.TimeUtils;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
public abstract class AsyncTaskLoader<D> extends Loader<D> {
public static final boolean DEBUG = false;
public static final String TAG = "AsyncTaskLoader";
public volatile AsyncTaskLoader<D>.LoadTask mCancellingTask;
private final Executor mExecutor;
public Handler mHandler;
public long mLastLoadCompleteTime;
public volatile AsyncTaskLoader<D>.LoadTask mTask;
public long mUpdateThrottle;
public final class LoadTask extends ModernAsyncTask<Void, Void, D> implements Runnable {
private final CountDownLatch mDone = new CountDownLatch(1);
public boolean waiting;
public LoadTask() {
}
public D doInBackground(Void... voidArr) {
try {
return (D) AsyncTaskLoader.this.onLoadInBackground();
} catch (OperationCanceledException e) {
if (isCancelled()) {
return null;
}
throw e;
}
}
@Override // androidx.loader.content.ModernAsyncTask
public void onCancelled(D d) {
try {
AsyncTaskLoader.this.dispatchOnCancelled(this, d);
} finally {
this.mDone.countDown();
}
}
@Override // androidx.loader.content.ModernAsyncTask
public void onPostExecute(D d) {
try {
AsyncTaskLoader.this.dispatchOnLoadComplete(this, d);
} finally {
this.mDone.countDown();
}
}
@Override // java.lang.Runnable
public void run() {
this.waiting = false;
AsyncTaskLoader.this.executePendingTask();
}
public void waitForLoader() {
try {
this.mDone.await();
} catch (InterruptedException unused) {
}
}
}
public AsyncTaskLoader(@NonNull Context context) {
this(context, ModernAsyncTask.THREAD_POOL_EXECUTOR);
}
private AsyncTaskLoader(@NonNull Context context, @NonNull Executor executor) {
super(context);
this.mLastLoadCompleteTime = -10000;
this.mExecutor = executor;
}
public void cancelLoadInBackground() {
}
public void dispatchOnCancelled(AsyncTaskLoader<D>.LoadTask loadTask, D d) {
onCanceled(d);
if (this.mCancellingTask == loadTask) {
rollbackContentChanged();
this.mLastLoadCompleteTime = SystemClock.uptimeMillis();
this.mCancellingTask = null;
deliverCancellation();
executePendingTask();
}
}
public void dispatchOnLoadComplete(AsyncTaskLoader<D>.LoadTask loadTask, D d) {
if (this.mTask != loadTask) {
dispatchOnCancelled(loadTask, d);
} else if (isAbandoned()) {
onCanceled(d);
} else {
commitContentChanged();
this.mLastLoadCompleteTime = SystemClock.uptimeMillis();
this.mTask = null;
deliverResult(d);
}
}
@Override // androidx.loader.content.Loader
@Deprecated
public void dump(String str, FileDescriptor fileDescriptor, PrintWriter printWriter, String[] strArr) {
super.dump(str, fileDescriptor, printWriter, strArr);
if (this.mTask != null) {
printWriter.print(str);
printWriter.print("mTask=");
printWriter.print(this.mTask);
printWriter.print(" waiting=");
printWriter.println(this.mTask.waiting);
}
if (this.mCancellingTask != null) {
printWriter.print(str);
printWriter.print("mCancellingTask=");
printWriter.print(this.mCancellingTask);
printWriter.print(" waiting=");
printWriter.println(this.mCancellingTask.waiting);
}
if (this.mUpdateThrottle != 0) {
printWriter.print(str);
printWriter.print("mUpdateThrottle=");
TimeUtils.formatDuration(this.mUpdateThrottle, printWriter);
printWriter.print(" mLastLoadCompleteTime=");
TimeUtils.formatDuration(this.mLastLoadCompleteTime, SystemClock.uptimeMillis(), printWriter);
printWriter.println();
}
}
public void executePendingTask() {
if (this.mCancellingTask == null && this.mTask != null) {
if (this.mTask.waiting) {
this.mTask.waiting = false;
this.mHandler.removeCallbacks(this.mTask);
}
if (this.mUpdateThrottle <= 0 || SystemClock.uptimeMillis() >= this.mLastLoadCompleteTime + this.mUpdateThrottle) {
this.mTask.executeOnExecutor(this.mExecutor, null);
return;
}
this.mTask.waiting = true;
this.mHandler.postAtTime(this.mTask, this.mLastLoadCompleteTime + this.mUpdateThrottle);
}
}
public boolean isLoadInBackgroundCanceled() {
return this.mCancellingTask != null;
}
@Nullable
public abstract D loadInBackground();
@Override // androidx.loader.content.Loader
public boolean onCancelLoad() {
if (this.mTask == null) {
return false;
}
if (!this.mStarted) {
this.mContentChanged = true;
}
if (this.mCancellingTask != null) {
if (this.mTask.waiting) {
this.mTask.waiting = false;
this.mHandler.removeCallbacks(this.mTask);
}
this.mTask = null;
return false;
} else if (this.mTask.waiting) {
this.mTask.waiting = false;
this.mHandler.removeCallbacks(this.mTask);
this.mTask = null;
return false;
} else {
boolean cancel = this.mTask.cancel(false);
if (cancel) {
this.mCancellingTask = this.mTask;
cancelLoadInBackground();
}
this.mTask = null;
return cancel;
}
}
public void onCanceled(@Nullable D d) {
}
@Override // androidx.loader.content.Loader
public void onForceLoad() {
super.onForceLoad();
cancelLoad();
this.mTask = new LoadTask();
executePendingTask();
}
@Nullable
public D onLoadInBackground() {
return loadInBackground();
}
public void setUpdateThrottle(long j) {
this.mUpdateThrottle = j;
if (j != 0) {
this.mHandler = new Handler();
}
}
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP})
public void waitForLoader() {
AsyncTaskLoader<D>.LoadTask loadTask = this.mTask;
if (loadTask != null) {
loadTask.waitForLoader();
}
}
}