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