124 lines
5 KiB
Java
124 lines
5 KiB
Java
package androidx.room;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import androidx.annotation.MainThread;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.WorkerThread;
|
|
import androidx.arch.core.executor.ArchTaskExecutor;
|
|
import androidx.lifecycle.LiveData;
|
|
import androidx.room.InvalidationTracker;
|
|
import java.util.Set;
|
|
import java.util.concurrent.Callable;
|
|
import java.util.concurrent.Executor;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
public class RoomTrackingLiveData<T> extends LiveData<T> {
|
|
public final Callable<T> mComputeFunction;
|
|
public final AtomicBoolean mComputing = new AtomicBoolean(false);
|
|
private final InvalidationLiveDataContainer mContainer;
|
|
public final RoomDatabase mDatabase;
|
|
public final boolean mInTransaction;
|
|
public final AtomicBoolean mInvalid = new AtomicBoolean(true);
|
|
public final Runnable mInvalidationRunnable = new AnonymousClass2();
|
|
public final InvalidationTracker.Observer mObserver;
|
|
public final Runnable mRefreshRunnable = new AnonymousClass1();
|
|
public final AtomicBoolean mRegisteredObserver = new AtomicBoolean(false);
|
|
|
|
/* renamed from: androidx.room.RoomTrackingLiveData$1 reason: invalid class name */
|
|
public class AnonymousClass1 implements Runnable {
|
|
public AnonymousClass1() {
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
@WorkerThread
|
|
public void run() {
|
|
boolean z2;
|
|
boolean z3 = false;
|
|
if (RoomTrackingLiveData.this.mRegisteredObserver.compareAndSet(false, true)) {
|
|
RoomTrackingLiveData.this.mDatabase.getInvalidationTracker().addWeakObserver(RoomTrackingLiveData.this.mObserver);
|
|
}
|
|
do {
|
|
if (RoomTrackingLiveData.this.mComputing.compareAndSet(false, true)) {
|
|
T t = null;
|
|
z2 = false;
|
|
while (RoomTrackingLiveData.this.mInvalid.compareAndSet(true, false)) {
|
|
try {
|
|
try {
|
|
t = RoomTrackingLiveData.this.mComputeFunction.call();
|
|
z2 = true;
|
|
} catch (Exception e) {
|
|
throw new RuntimeException("Exception while computing database live data.", e);
|
|
}
|
|
} finally {
|
|
RoomTrackingLiveData.this.mComputing.set(z3);
|
|
}
|
|
}
|
|
if (z2) {
|
|
RoomTrackingLiveData.access$000(RoomTrackingLiveData.this, t);
|
|
}
|
|
} else {
|
|
z2 = false;
|
|
}
|
|
if (!z2) {
|
|
return;
|
|
}
|
|
} while (RoomTrackingLiveData.this.mInvalid.get());
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.room.RoomTrackingLiveData$2 reason: invalid class name */
|
|
public class AnonymousClass2 implements Runnable {
|
|
public AnonymousClass2() {
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
@MainThread
|
|
public void run() {
|
|
boolean hasActiveObservers = RoomTrackingLiveData.this.hasActiveObservers();
|
|
if (RoomTrackingLiveData.this.mInvalid.compareAndSet(false, true) && hasActiveObservers) {
|
|
RoomTrackingLiveData.this.getQueryExecutor().execute(RoomTrackingLiveData.this.mRefreshRunnable);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.room.RoomTrackingLiveData$3 reason: invalid class name */
|
|
public class AnonymousClass3 extends InvalidationTracker.Observer {
|
|
public AnonymousClass3(String[] strArr) {
|
|
super(strArr);
|
|
}
|
|
|
|
@Override // androidx.room.InvalidationTracker.Observer
|
|
public void onInvalidated(@NonNull Set<String> set) {
|
|
ArchTaskExecutor.getInstance().executeOnMainThread(RoomTrackingLiveData.this.mInvalidationRunnable);
|
|
}
|
|
}
|
|
|
|
@SuppressLint({"RestrictedApi"})
|
|
public RoomTrackingLiveData(RoomDatabase roomDatabase, InvalidationLiveDataContainer invalidationLiveDataContainer, boolean z2, Callable<T> callable, String[] strArr) {
|
|
this.mDatabase = roomDatabase;
|
|
this.mInTransaction = z2;
|
|
this.mComputeFunction = callable;
|
|
this.mContainer = invalidationLiveDataContainer;
|
|
this.mObserver = new AnonymousClass3(strArr);
|
|
}
|
|
|
|
public static /* synthetic */ void access$000(RoomTrackingLiveData roomTrackingLiveData, Object obj) {
|
|
roomTrackingLiveData.postValue(obj);
|
|
}
|
|
|
|
public Executor getQueryExecutor() {
|
|
return this.mInTransaction ? this.mDatabase.getTransactionExecutor() : this.mDatabase.getQueryExecutor();
|
|
}
|
|
|
|
@Override // androidx.lifecycle.LiveData
|
|
public void onActive() {
|
|
super.onActive();
|
|
this.mContainer.onActive(this);
|
|
getQueryExecutor().execute(this.mRefreshRunnable);
|
|
}
|
|
|
|
@Override // androidx.lifecycle.LiveData
|
|
public void onInactive() {
|
|
super.onInactive();
|
|
this.mContainer.onInactive(this);
|
|
}
|
|
}
|