ADD week 5
This commit is contained in:
224
02-Easy5/E5/sources/androidx/loader/content/AsyncTaskLoader.java
Normal file
224
02-Easy5/E5/sources/androidx/loader/content/AsyncTaskLoader.java
Normal file
@@ -0,0 +1,224 @@
|
||||
package androidx.loader.content;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.os.SystemClock;
|
||||
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;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public abstract class AsyncTaskLoader<D> extends Loader<D> {
|
||||
static final boolean DEBUG = false;
|
||||
static final String TAG = "AsyncTaskLoader";
|
||||
volatile AsyncTaskLoader<D>.LoadTask mCancellingTask;
|
||||
private final Executor mExecutor;
|
||||
Handler mHandler;
|
||||
long mLastLoadCompleteTime;
|
||||
volatile AsyncTaskLoader<D>.LoadTask mTask;
|
||||
long mUpdateThrottle;
|
||||
|
||||
public void cancelLoadInBackground() {
|
||||
}
|
||||
|
||||
public boolean isLoadInBackgroundCanceled() {
|
||||
return this.mCancellingTask != null;
|
||||
}
|
||||
|
||||
public abstract D loadInBackground();
|
||||
|
||||
public void onCanceled(D d) {
|
||||
}
|
||||
|
||||
final class LoadTask extends ModernAsyncTask<Void, Void, D> implements Runnable {
|
||||
private final CountDownLatch mDone = new CountDownLatch(1);
|
||||
boolean waiting;
|
||||
|
||||
LoadTask() {
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: protected */
|
||||
@Override // androidx.loader.content.ModernAsyncTask
|
||||
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
|
||||
protected void onPostExecute(D d) {
|
||||
try {
|
||||
AsyncTaskLoader.this.dispatchOnLoadComplete(this, d);
|
||||
} finally {
|
||||
this.mDone.countDown();
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.loader.content.ModernAsyncTask
|
||||
protected void onCancelled(D d) {
|
||||
try {
|
||||
AsyncTaskLoader.this.dispatchOnCancelled(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(Context context) {
|
||||
this(context, ModernAsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
|
||||
private AsyncTaskLoader(Context context, Executor executor) {
|
||||
super(context);
|
||||
this.mLastLoadCompleteTime = -10000L;
|
||||
this.mExecutor = executor;
|
||||
}
|
||||
|
||||
public void setUpdateThrottle(long j) {
|
||||
this.mUpdateThrottle = j;
|
||||
if (j != 0) {
|
||||
this.mHandler = new Handler();
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.loader.content.Loader
|
||||
protected void onForceLoad() {
|
||||
super.onForceLoad();
|
||||
cancelLoad();
|
||||
this.mTask = new LoadTask();
|
||||
executePendingTask();
|
||||
}
|
||||
|
||||
@Override // androidx.loader.content.Loader
|
||||
protected 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;
|
||||
}
|
||||
if (this.mTask.waiting) {
|
||||
this.mTask.waiting = false;
|
||||
this.mHandler.removeCallbacks(this.mTask);
|
||||
this.mTask = null;
|
||||
return false;
|
||||
}
|
||||
boolean cancel = this.mTask.cancel(false);
|
||||
if (cancel) {
|
||||
this.mCancellingTask = this.mTask;
|
||||
cancelLoadInBackground();
|
||||
}
|
||||
this.mTask = null;
|
||||
return cancel;
|
||||
}
|
||||
|
||||
void executePendingTask() {
|
||||
if (this.mCancellingTask != null || this.mTask == null) {
|
||||
return;
|
||||
}
|
||||
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.waiting = true;
|
||||
this.mHandler.postAtTime(this.mTask, this.mLastLoadCompleteTime + this.mUpdateThrottle);
|
||||
} else {
|
||||
this.mTask.executeOnExecutor(this.mExecutor, null);
|
||||
}
|
||||
}
|
||||
|
||||
void dispatchOnCancelled(AsyncTaskLoader<D>.LoadTask loadTask, D d) {
|
||||
onCanceled(d);
|
||||
if (this.mCancellingTask == loadTask) {
|
||||
rollbackContentChanged();
|
||||
this.mLastLoadCompleteTime = SystemClock.uptimeMillis();
|
||||
this.mCancellingTask = null;
|
||||
deliverCancellation();
|
||||
executePendingTask();
|
||||
}
|
||||
}
|
||||
|
||||
void dispatchOnLoadComplete(AsyncTaskLoader<D>.LoadTask loadTask, D d) {
|
||||
if (this.mTask != loadTask) {
|
||||
dispatchOnCancelled(loadTask, d);
|
||||
return;
|
||||
}
|
||||
if (isAbandoned()) {
|
||||
onCanceled(d);
|
||||
return;
|
||||
}
|
||||
commitContentChanged();
|
||||
this.mLastLoadCompleteTime = SystemClock.uptimeMillis();
|
||||
this.mTask = null;
|
||||
deliverResult(d);
|
||||
}
|
||||
|
||||
protected D onLoadInBackground() {
|
||||
return loadInBackground();
|
||||
}
|
||||
|
||||
public void waitForLoader() {
|
||||
AsyncTaskLoader<D>.LoadTask loadTask = this.mTask;
|
||||
if (loadTask != null) {
|
||||
loadTask.waitForLoader();
|
||||
}
|
||||
}
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user