263 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.loader.content;
 | |
| 
 | |
| import android.os.Binder;
 | |
| import android.os.Handler;
 | |
| import android.os.Looper;
 | |
| import android.os.Message;
 | |
| import android.os.Process;
 | |
| import android.util.Log;
 | |
| import java.util.concurrent.BlockingQueue;
 | |
| import java.util.concurrent.Callable;
 | |
| import java.util.concurrent.CancellationException;
 | |
| import java.util.concurrent.ExecutionException;
 | |
| import java.util.concurrent.Executor;
 | |
| import java.util.concurrent.FutureTask;
 | |
| import java.util.concurrent.LinkedBlockingQueue;
 | |
| import java.util.concurrent.ThreadFactory;
 | |
| import java.util.concurrent.ThreadPoolExecutor;
 | |
| import java.util.concurrent.TimeUnit;
 | |
| import java.util.concurrent.TimeoutException;
 | |
| import java.util.concurrent.atomic.AtomicBoolean;
 | |
| import java.util.concurrent.atomic.AtomicInteger;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| abstract class ModernAsyncTask<Params, Progress, Result> {
 | |
|     private static final int CORE_POOL_SIZE = 5;
 | |
|     private static final int KEEP_ALIVE = 1;
 | |
|     private static final String LOG_TAG = "AsyncTask";
 | |
|     private static final int MAXIMUM_POOL_SIZE = 128;
 | |
|     private static final int MESSAGE_POST_PROGRESS = 2;
 | |
|     private static final int MESSAGE_POST_RESULT = 1;
 | |
|     public static final Executor THREAD_POOL_EXECUTOR;
 | |
|     private static volatile Executor sDefaultExecutor;
 | |
|     private static InternalHandler sHandler;
 | |
|     private static final BlockingQueue<Runnable> sPoolWorkQueue;
 | |
|     private static final ThreadFactory sThreadFactory;
 | |
|     private final FutureTask<Result> mFuture;
 | |
|     private final WorkerRunnable<Params, Result> mWorker;
 | |
|     private volatile Status mStatus = Status.PENDING;
 | |
|     final AtomicBoolean mCancelled = new AtomicBoolean();
 | |
|     final AtomicBoolean mTaskInvoked = new AtomicBoolean();
 | |
| 
 | |
|     public enum Status {
 | |
|         PENDING,
 | |
|         RUNNING,
 | |
|         FINISHED
 | |
|     }
 | |
| 
 | |
|     public static void setDefaultExecutor(Executor executor) {
 | |
|         sDefaultExecutor = executor;
 | |
|     }
 | |
| 
 | |
|     protected abstract Result doInBackground(Params... paramsArr);
 | |
| 
 | |
|     public final Status getStatus() {
 | |
|         return this.mStatus;
 | |
|     }
 | |
| 
 | |
|     protected void onCancelled() {
 | |
|     }
 | |
| 
 | |
|     protected void onPostExecute(Result result) {
 | |
|     }
 | |
| 
 | |
|     protected void onPreExecute() {
 | |
|     }
 | |
| 
 | |
|     protected void onProgressUpdate(Progress... progressArr) {
 | |
|     }
 | |
| 
 | |
|     static {
 | |
|         ThreadFactory threadFactory = new ThreadFactory() { // from class: androidx.loader.content.ModernAsyncTask.1
 | |
|             private final AtomicInteger mCount = new AtomicInteger(1);
 | |
| 
 | |
|             @Override // java.util.concurrent.ThreadFactory
 | |
|             public Thread newThread(Runnable runnable) {
 | |
|                 return new Thread(runnable, "ModernAsyncTask #" + this.mCount.getAndIncrement());
 | |
|             }
 | |
|         };
 | |
|         sThreadFactory = threadFactory;
 | |
|         LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue(10);
 | |
|         sPoolWorkQueue = linkedBlockingQueue;
 | |
|         ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 128, 1L, TimeUnit.SECONDS, linkedBlockingQueue, threadFactory);
 | |
|         THREAD_POOL_EXECUTOR = threadPoolExecutor;
 | |
|         sDefaultExecutor = threadPoolExecutor;
 | |
|     }
 | |
| 
 | |
|     private static Handler getHandler() {
 | |
|         InternalHandler internalHandler;
 | |
|         synchronized (ModernAsyncTask.class) {
 | |
|             if (sHandler == null) {
 | |
|                 sHandler = new InternalHandler();
 | |
|             }
 | |
|             internalHandler = sHandler;
 | |
|         }
 | |
|         return internalHandler;
 | |
|     }
 | |
| 
 | |
|     ModernAsyncTask() {
 | |
|         WorkerRunnable<Params, Result> workerRunnable = new WorkerRunnable<Params, Result>() { // from class: androidx.loader.content.ModernAsyncTask.2
 | |
|             @Override // java.util.concurrent.Callable
 | |
|             public Result call() throws Exception {
 | |
|                 ModernAsyncTask.this.mTaskInvoked.set(true);
 | |
|                 Result result = null;
 | |
|                 try {
 | |
|                     Process.setThreadPriority(10);
 | |
|                     result = (Result) ModernAsyncTask.this.doInBackground(this.mParams);
 | |
|                     Binder.flushPendingCommands();
 | |
|                     return result;
 | |
|                 } finally {
 | |
|                 }
 | |
|             }
 | |
|         };
 | |
|         this.mWorker = workerRunnable;
 | |
|         this.mFuture = new FutureTask<Result>(workerRunnable) { // from class: androidx.loader.content.ModernAsyncTask.3
 | |
|             @Override // java.util.concurrent.FutureTask
 | |
|             protected void done() {
 | |
|                 try {
 | |
|                     ModernAsyncTask.this.postResultIfNotInvoked(get());
 | |
|                 } catch (InterruptedException e) {
 | |
|                     Log.w(ModernAsyncTask.LOG_TAG, e);
 | |
|                 } catch (CancellationException unused) {
 | |
|                     ModernAsyncTask.this.postResultIfNotInvoked(null);
 | |
|                 } catch (ExecutionException e2) {
 | |
|                     throw new RuntimeException("An error occurred while executing doInBackground()", e2.getCause());
 | |
|                 } catch (Throwable th) {
 | |
|                     throw new RuntimeException("An error occurred while executing doInBackground()", th);
 | |
|                 }
 | |
|             }
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     void postResultIfNotInvoked(Result result) {
 | |
|         if (this.mTaskInvoked.get()) {
 | |
|             return;
 | |
|         }
 | |
|         postResult(result);
 | |
|     }
 | |
| 
 | |
|     Result postResult(Result result) {
 | |
|         getHandler().obtainMessage(1, new AsyncTaskResult(this, result)).sendToTarget();
 | |
|         return result;
 | |
|     }
 | |
| 
 | |
|     protected void onCancelled(Result result) {
 | |
|         onCancelled();
 | |
|     }
 | |
| 
 | |
|     public final boolean isCancelled() {
 | |
|         return this.mCancelled.get();
 | |
|     }
 | |
| 
 | |
|     public final boolean cancel(boolean z) {
 | |
|         this.mCancelled.set(true);
 | |
|         return this.mFuture.cancel(z);
 | |
|     }
 | |
| 
 | |
|     public final Result get() throws InterruptedException, ExecutionException {
 | |
|         return this.mFuture.get();
 | |
|     }
 | |
| 
 | |
|     public final Result get(long j, TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException {
 | |
|         return this.mFuture.get(j, timeUnit);
 | |
|     }
 | |
| 
 | |
|     public final ModernAsyncTask<Params, Progress, Result> execute(Params... paramsArr) {
 | |
|         return executeOnExecutor(sDefaultExecutor, paramsArr);
 | |
|     }
 | |
| 
 | |
|     /* renamed from: androidx.loader.content.ModernAsyncTask$4, reason: invalid class name */
 | |
|     static /* synthetic */ class AnonymousClass4 {
 | |
|         static final /* synthetic */ int[] $SwitchMap$androidx$loader$content$ModernAsyncTask$Status;
 | |
| 
 | |
|         static {
 | |
|             int[] iArr = new int[Status.values().length];
 | |
|             $SwitchMap$androidx$loader$content$ModernAsyncTask$Status = iArr;
 | |
|             try {
 | |
|                 iArr[Status.RUNNING.ordinal()] = 1;
 | |
|             } catch (NoSuchFieldError unused) {
 | |
|             }
 | |
|             try {
 | |
|                 $SwitchMap$androidx$loader$content$ModernAsyncTask$Status[Status.FINISHED.ordinal()] = 2;
 | |
|             } catch (NoSuchFieldError unused2) {
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public final ModernAsyncTask<Params, Progress, Result> executeOnExecutor(Executor executor, Params... paramsArr) {
 | |
|         if (this.mStatus != Status.PENDING) {
 | |
|             int i = AnonymousClass4.$SwitchMap$androidx$loader$content$ModernAsyncTask$Status[this.mStatus.ordinal()];
 | |
|             if (i == 1) {
 | |
|                 throw new IllegalStateException("Cannot execute task: the task is already running.");
 | |
|             }
 | |
|             if (i == 2) {
 | |
|                 throw new IllegalStateException("Cannot execute task: the task has already been executed (a task can be executed only once)");
 | |
|             }
 | |
|             throw new IllegalStateException("We should never reach this state");
 | |
|         }
 | |
|         this.mStatus = Status.RUNNING;
 | |
|         onPreExecute();
 | |
|         this.mWorker.mParams = paramsArr;
 | |
|         executor.execute(this.mFuture);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public static void execute(Runnable runnable) {
 | |
|         sDefaultExecutor.execute(runnable);
 | |
|     }
 | |
| 
 | |
|     protected final void publishProgress(Progress... progressArr) {
 | |
|         if (isCancelled()) {
 | |
|             return;
 | |
|         }
 | |
|         getHandler().obtainMessage(2, new AsyncTaskResult(this, progressArr)).sendToTarget();
 | |
|     }
 | |
| 
 | |
|     void finish(Result result) {
 | |
|         if (isCancelled()) {
 | |
|             onCancelled(result);
 | |
|         } else {
 | |
|             onPostExecute(result);
 | |
|         }
 | |
|         this.mStatus = Status.FINISHED;
 | |
|     }
 | |
| 
 | |
|     private static class InternalHandler extends Handler {
 | |
|         InternalHandler() {
 | |
|             super(Looper.getMainLooper());
 | |
|         }
 | |
| 
 | |
|         /* JADX WARN: Multi-variable type inference failed */
 | |
|         @Override // android.os.Handler
 | |
|         public void handleMessage(Message message) {
 | |
|             AsyncTaskResult asyncTaskResult = (AsyncTaskResult) message.obj;
 | |
|             int i = message.what;
 | |
|             if (i == 1) {
 | |
|                 asyncTaskResult.mTask.finish(asyncTaskResult.mData[0]);
 | |
|             } else {
 | |
|                 if (i != 2) {
 | |
|                     return;
 | |
|                 }
 | |
|                 asyncTaskResult.mTask.onProgressUpdate(asyncTaskResult.mData);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static abstract class WorkerRunnable<Params, Result> implements Callable<Result> {
 | |
|         Params[] mParams;
 | |
| 
 | |
|         WorkerRunnable() {
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static class AsyncTaskResult<Data> {
 | |
|         final Data[] mData;
 | |
|         final ModernAsyncTask mTask;
 | |
| 
 | |
|         AsyncTaskResult(ModernAsyncTask modernAsyncTask, Data... dataArr) {
 | |
|             this.mTask = modernAsyncTask;
 | |
|             this.mData = dataArr;
 | |
|         }
 | |
|     }
 | |
| }
 |