package com.google.android.gms.common.api.internal; import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.util.Log; import android.util.Pair; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.PendingResult; import com.google.android.gms.common.api.Releasable; import com.google.android.gms.common.api.Result; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.ResultTransform; import com.google.android.gms.common.api.Status; import com.google.android.gms.common.api.TransformedResult; import com.google.android.gms.common.internal.ICancelToken; import com.google.android.gms.common.internal.Preconditions; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; /* loaded from: classes.dex */ public abstract class BasePendingResult extends PendingResult { static final ThreadLocal zaa = new zaq(); public static final int zad = 0; private zas mResultGuardian; protected final CallbackHandler zab; protected final WeakReference zac; private final Object zae; private final CountDownLatch zaf; private final ArrayList zag; private ResultCallback zah; private final AtomicReference zai; private R zaj; private Status zak; private volatile boolean zal; private boolean zam; private boolean zan; private ICancelToken zao; private volatile zada zap; private boolean zaq; @Deprecated BasePendingResult() { this.zae = new Object(); this.zaf = new CountDownLatch(1); this.zag = new ArrayList<>(); this.zai = new AtomicReference<>(); this.zaq = false; this.zab = new CallbackHandler<>(Looper.getMainLooper()); this.zac = new WeakReference<>(null); } private final R zaa() { R r; synchronized (this.zae) { Preconditions.checkState(!this.zal, "Result has already been consumed."); Preconditions.checkState(isReady(), "Result is not ready."); r = this.zaj; this.zaj = null; this.zah = null; this.zal = true; } zadb andSet = this.zai.getAndSet(null); if (andSet != null) { andSet.zaa.zab.remove(this); } return (R) Preconditions.checkNotNull(r); } private final void zab(R r) { this.zaj = r; this.zak = r.getStatus(); this.zao = null; this.zaf.countDown(); if (this.zam) { this.zah = null; } else { ResultCallback resultCallback = this.zah; if (resultCallback == null) { if (this.zaj instanceof Releasable) { this.mResultGuardian = new zas(this, null); } } else { this.zab.removeMessages(2); this.zab.zaa(resultCallback, zaa()); } } ArrayList arrayList = this.zag; int size = arrayList.size(); for (int i = 0; i < size; i++) { arrayList.get(i).onComplete(this.zak); } this.zag.clear(); } public static void zal(Result result) { if (result instanceof Releasable) { try { ((Releasable) result).release(); } catch (RuntimeException e) { String valueOf = String.valueOf(result); String.valueOf(valueOf).length(); Log.w("BasePendingResult", "Unable to release ".concat(String.valueOf(valueOf)), e); } } } @Override // com.google.android.gms.common.api.PendingResult public final void addStatusListener(PendingResult.StatusListener statusListener) { Preconditions.checkArgument(statusListener != null, "Callback cannot be null."); synchronized (this.zae) { if (!isReady()) { this.zag.add(statusListener); } else { statusListener.onComplete(this.zak); } } } @Override // com.google.android.gms.common.api.PendingResult public final R await() { Preconditions.checkNotMainThread("await must not be called on the UI thread"); Preconditions.checkState(!this.zal, "Result has already been consumed"); Preconditions.checkState(this.zap == null, "Cannot await if then() has been called."); try { this.zaf.await(); } catch (InterruptedException unused) { forceFailureUnlessReady(Status.RESULT_INTERRUPTED); } Preconditions.checkState(isReady(), "Result is not ready."); return zaa(); } @Override // com.google.android.gms.common.api.PendingResult public void cancel() { synchronized (this.zae) { if (!this.zam && !this.zal) { ICancelToken iCancelToken = this.zao; if (iCancelToken != null) { try { iCancelToken.cancel(); } catch (RemoteException unused) { } } zal(this.zaj); this.zam = true; zab(createFailedResult(Status.RESULT_CANCELED)); } } } public abstract R createFailedResult(Status status); @Deprecated public final void forceFailureUnlessReady(Status status) { synchronized (this.zae) { if (!isReady()) { setResult(createFailedResult(status)); this.zan = true; } } } @Override // com.google.android.gms.common.api.PendingResult public final boolean isCanceled() { boolean z; synchronized (this.zae) { z = this.zam; } return z; } public final boolean isReady() { return this.zaf.getCount() == 0; } protected final void setCancelToken(ICancelToken iCancelToken) { synchronized (this.zae) { this.zao = iCancelToken; } } @Override // com.google.android.gms.common.api.PendingResult public final void setResultCallback(ResultCallback resultCallback) { synchronized (this.zae) { if (resultCallback == null) { this.zah = null; return; } boolean z = true; Preconditions.checkState(!this.zal, "Result has already been consumed."); if (this.zap != null) { z = false; } Preconditions.checkState(z, "Cannot set callbacks if then() has been called."); if (isCanceled()) { return; } if (isReady()) { this.zab.zaa(resultCallback, zaa()); } else { this.zah = resultCallback; } } } @Override // com.google.android.gms.common.api.PendingResult public final TransformedResult then(ResultTransform resultTransform) { TransformedResult then; Preconditions.checkState(!this.zal, "Result has already been consumed."); synchronized (this.zae) { Preconditions.checkState(this.zap == null, "Cannot call then() twice."); Preconditions.checkState(this.zah == null, "Cannot call then() if callbacks are set."); Preconditions.checkState(!this.zam, "Cannot call then() if result was canceled."); this.zaq = true; this.zap = new zada<>(this.zac); then = this.zap.then(resultTransform); if (isReady()) { this.zab.zaa(this.zap, zaa()); } else { this.zah = this.zap; } } return then; } public final void zak() { this.zaq = this.zaq || zaa.get().booleanValue(); } public final boolean zam() { boolean isCanceled; synchronized (this.zae) { if (this.zac.get() == null || !this.zaq) { cancel(); } isCanceled = isCanceled(); } return isCanceled; } public final void zan(zadb zadbVar) { this.zai.set(zadbVar); } /* loaded from: classes.dex */ public static class CallbackHandler extends com.google.android.gms.internal.base.zaq { public CallbackHandler() { super(Looper.getMainLooper()); } /* JADX WARN: Multi-variable type inference failed */ @Override // android.os.Handler public final void handleMessage(Message message) { int i = message.what; if (i != 1) { if (i == 2) { ((BasePendingResult) message.obj).forceFailureUnlessReady(Status.RESULT_TIMEOUT); return; } else { int i2 = message.what; return; } } Pair pair = (Pair) message.obj; ResultCallback resultCallback = (ResultCallback) pair.first; Result result = (Result) pair.second; try { resultCallback.onResult(result); } catch (RuntimeException e) { BasePendingResult.zal(result); throw e; } } public final void zaa(ResultCallback resultCallback, R r) { sendMessage(obtainMessage(1, new Pair((ResultCallback) Preconditions.checkNotNull(resultCallback), r))); } public CallbackHandler(Looper looper) { super(looper); } } public final void setResult(R r) { synchronized (this.zae) { if (this.zan || this.zam) { zal(r); return; } isReady(); Preconditions.checkState(!isReady(), "Results have already been set"); Preconditions.checkState(!this.zal, "Result has already been consumed"); zab(r); } } @Deprecated public BasePendingResult(Looper looper) { this.zae = new Object(); this.zaf = new CountDownLatch(1); this.zag = new ArrayList<>(); this.zai = new AtomicReference<>(); this.zaq = false; this.zab = new CallbackHandler<>(looper); this.zac = new WeakReference<>(null); } @Override // com.google.android.gms.common.api.PendingResult public final R await(long j, TimeUnit timeUnit) { if (j > 0) { Preconditions.checkNotMainThread("await must not be called on the UI thread when time is greater than zero."); } Preconditions.checkState(!this.zal, "Result has already been consumed."); Preconditions.checkState(this.zap == null, "Cannot await if then() has been called."); try { if (!this.zaf.await(j, timeUnit)) { forceFailureUnlessReady(Status.RESULT_TIMEOUT); } } catch (InterruptedException unused) { forceFailureUnlessReady(Status.RESULT_INTERRUPTED); } Preconditions.checkState(isReady(), "Result is not ready."); return zaa(); } @Override // com.google.android.gms.common.api.PendingResult public final void setResultCallback(ResultCallback resultCallback, long j, TimeUnit timeUnit) { synchronized (this.zae) { if (resultCallback == null) { this.zah = null; return; } boolean z = true; Preconditions.checkState(!this.zal, "Result has already been consumed."); if (this.zap != null) { z = false; } Preconditions.checkState(z, "Cannot set callbacks if then() has been called."); if (isCanceled()) { return; } if (!isReady()) { this.zah = resultCallback; CallbackHandler callbackHandler = this.zab; callbackHandler.sendMessageDelayed(callbackHandler.obtainMessage(2, this), timeUnit.toMillis(j)); } else { this.zab.zaa(resultCallback, zaa()); } } } public BasePendingResult(GoogleApiClient googleApiClient) { this.zae = new Object(); this.zaf = new CountDownLatch(1); this.zag = new ArrayList<>(); this.zai = new AtomicReference<>(); this.zaq = false; this.zab = new CallbackHandler<>(googleApiClient != null ? googleApiClient.getLooper() : Looper.getMainLooper()); this.zac = new WeakReference<>(googleApiClient); } public BasePendingResult(CallbackHandler callbackHandler) { this.zae = new Object(); this.zaf = new CountDownLatch(1); this.zag = new ArrayList<>(); this.zai = new AtomicReference<>(); this.zaq = false; this.zab = (CallbackHandler) Preconditions.checkNotNull(callbackHandler, "CallbackHandler must not be null"); this.zac = new WeakReference<>(null); } }