225 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| 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();
 | |
|         }
 | |
|     }
 | |
| }
 |