ADD week 5
This commit is contained in:
45
02-Easy5/E5/sources/androidx/loader/app/LoaderManager.java
Normal file
45
02-Easy5/E5/sources/androidx/loader/app/LoaderManager.java
Normal file
@ -0,0 +1,45 @@
|
||||
package androidx.loader.app;
|
||||
|
||||
import android.os.Bundle;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.lifecycle.ViewModelStoreOwner;
|
||||
import androidx.loader.content.Loader;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public abstract class LoaderManager {
|
||||
|
||||
public interface LoaderCallbacks<D> {
|
||||
Loader<D> onCreateLoader(int i, Bundle bundle);
|
||||
|
||||
void onLoadFinished(Loader<D> loader, D d);
|
||||
|
||||
void onLoaderReset(Loader<D> loader);
|
||||
}
|
||||
|
||||
public abstract void destroyLoader(int i);
|
||||
|
||||
@Deprecated
|
||||
public abstract void dump(String str, FileDescriptor fileDescriptor, PrintWriter printWriter, String[] strArr);
|
||||
|
||||
public abstract <D> Loader<D> getLoader(int i);
|
||||
|
||||
public boolean hasRunningLoaders() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public abstract <D> Loader<D> initLoader(int i, Bundle bundle, LoaderCallbacks<D> loaderCallbacks);
|
||||
|
||||
public abstract void markForRedelivery();
|
||||
|
||||
public abstract <D> Loader<D> restartLoader(int i, Bundle bundle, LoaderCallbacks<D> loaderCallbacks);
|
||||
|
||||
public static <T extends LifecycleOwner & ViewModelStoreOwner> LoaderManager getInstance(T t) {
|
||||
return new LoaderManagerImpl(t, t.getViewModelStore());
|
||||
}
|
||||
|
||||
public static void enableDebugLogging(boolean z) {
|
||||
LoaderManagerImpl.DEBUG = z;
|
||||
}
|
||||
}
|
435
02-Easy5/E5/sources/androidx/loader/app/LoaderManagerImpl.java
Normal file
435
02-Easy5/E5/sources/androidx/loader/app/LoaderManagerImpl.java
Normal file
@ -0,0 +1,435 @@
|
||||
package androidx.loader.app;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
import androidx.collection.SparseArrayCompat;
|
||||
import androidx.core.util.DebugUtils;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.lifecycle.ViewModelStore;
|
||||
import androidx.lifecycle.viewmodel.CreationExtras;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.Loader;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
import java.lang.reflect.Modifier;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
class LoaderManagerImpl extends LoaderManager {
|
||||
static boolean DEBUG = false;
|
||||
static final String TAG = "LoaderManager";
|
||||
private final LifecycleOwner mLifecycleOwner;
|
||||
private final LoaderViewModel mLoaderViewModel;
|
||||
|
||||
public static class LoaderInfo<D> extends MutableLiveData<D> implements Loader.OnLoadCompleteListener<D> {
|
||||
private final Bundle mArgs;
|
||||
private final int mId;
|
||||
private LifecycleOwner mLifecycleOwner;
|
||||
private final Loader<D> mLoader;
|
||||
private LoaderObserver<D> mObserver;
|
||||
private Loader<D> mPriorLoader;
|
||||
|
||||
Loader<D> getLoader() {
|
||||
return this.mLoader;
|
||||
}
|
||||
|
||||
LoaderInfo(int i, Bundle bundle, Loader<D> loader, Loader<D> loader2) {
|
||||
this.mId = i;
|
||||
this.mArgs = bundle;
|
||||
this.mLoader = loader;
|
||||
this.mPriorLoader = loader2;
|
||||
loader.registerListener(i, this);
|
||||
}
|
||||
|
||||
@Override // androidx.lifecycle.LiveData
|
||||
protected void onActive() {
|
||||
if (LoaderManagerImpl.DEBUG) {
|
||||
Log.v(LoaderManagerImpl.TAG, " Starting: " + this);
|
||||
}
|
||||
this.mLoader.startLoading();
|
||||
}
|
||||
|
||||
@Override // androidx.lifecycle.LiveData
|
||||
protected void onInactive() {
|
||||
if (LoaderManagerImpl.DEBUG) {
|
||||
Log.v(LoaderManagerImpl.TAG, " Stopping: " + this);
|
||||
}
|
||||
this.mLoader.stopLoading();
|
||||
}
|
||||
|
||||
Loader<D> setCallback(LifecycleOwner lifecycleOwner, LoaderManager.LoaderCallbacks<D> loaderCallbacks) {
|
||||
LoaderObserver<D> loaderObserver = new LoaderObserver<>(this.mLoader, loaderCallbacks);
|
||||
observe(lifecycleOwner, loaderObserver);
|
||||
LoaderObserver<D> loaderObserver2 = this.mObserver;
|
||||
if (loaderObserver2 != null) {
|
||||
removeObserver(loaderObserver2);
|
||||
}
|
||||
this.mLifecycleOwner = lifecycleOwner;
|
||||
this.mObserver = loaderObserver;
|
||||
return this.mLoader;
|
||||
}
|
||||
|
||||
void markForRedelivery() {
|
||||
LifecycleOwner lifecycleOwner = this.mLifecycleOwner;
|
||||
LoaderObserver<D> loaderObserver = this.mObserver;
|
||||
if (lifecycleOwner == null || loaderObserver == null) {
|
||||
return;
|
||||
}
|
||||
super.removeObserver(loaderObserver);
|
||||
observe(lifecycleOwner, loaderObserver);
|
||||
}
|
||||
|
||||
boolean isCallbackWaitingForData() {
|
||||
LoaderObserver<D> loaderObserver;
|
||||
return (!hasActiveObservers() || (loaderObserver = this.mObserver) == null || loaderObserver.hasDeliveredData()) ? false : true;
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
@Override // androidx.lifecycle.LiveData
|
||||
public void removeObserver(Observer<? super D> observer) {
|
||||
super.removeObserver(observer);
|
||||
this.mLifecycleOwner = null;
|
||||
this.mObserver = null;
|
||||
}
|
||||
|
||||
Loader<D> destroy(boolean z) {
|
||||
if (LoaderManagerImpl.DEBUG) {
|
||||
Log.v(LoaderManagerImpl.TAG, " Destroying: " + this);
|
||||
}
|
||||
this.mLoader.cancelLoad();
|
||||
this.mLoader.abandon();
|
||||
LoaderObserver<D> loaderObserver = this.mObserver;
|
||||
if (loaderObserver != null) {
|
||||
removeObserver(loaderObserver);
|
||||
if (z) {
|
||||
loaderObserver.reset();
|
||||
}
|
||||
}
|
||||
this.mLoader.unregisterListener(this);
|
||||
if ((loaderObserver == null || loaderObserver.hasDeliveredData()) && !z) {
|
||||
return this.mLoader;
|
||||
}
|
||||
this.mLoader.reset();
|
||||
return this.mPriorLoader;
|
||||
}
|
||||
|
||||
@Override // androidx.loader.content.Loader.OnLoadCompleteListener
|
||||
public void onLoadComplete(Loader<D> loader, D d) {
|
||||
if (LoaderManagerImpl.DEBUG) {
|
||||
Log.v(LoaderManagerImpl.TAG, "onLoadComplete: " + this);
|
||||
}
|
||||
if (Looper.myLooper() == Looper.getMainLooper()) {
|
||||
setValue(d);
|
||||
return;
|
||||
}
|
||||
if (LoaderManagerImpl.DEBUG) {
|
||||
Log.w(LoaderManagerImpl.TAG, "onLoadComplete was incorrectly called on a background thread");
|
||||
}
|
||||
postValue(d);
|
||||
}
|
||||
|
||||
@Override // androidx.lifecycle.MutableLiveData, androidx.lifecycle.LiveData
|
||||
public void setValue(D d) {
|
||||
super.setValue(d);
|
||||
Loader<D> loader = this.mPriorLoader;
|
||||
if (loader != null) {
|
||||
loader.reset();
|
||||
this.mPriorLoader = null;
|
||||
}
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder(64);
|
||||
sb.append("LoaderInfo{");
|
||||
sb.append(Integer.toHexString(System.identityHashCode(this)));
|
||||
sb.append(" #");
|
||||
sb.append(this.mId);
|
||||
sb.append(" : ");
|
||||
DebugUtils.buildShortClassTag(this.mLoader, sb);
|
||||
sb.append("}}");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public void dump(String str, FileDescriptor fileDescriptor, PrintWriter printWriter, String[] strArr) {
|
||||
printWriter.print(str);
|
||||
printWriter.print("mId=");
|
||||
printWriter.print(this.mId);
|
||||
printWriter.print(" mArgs=");
|
||||
printWriter.println(this.mArgs);
|
||||
printWriter.print(str);
|
||||
printWriter.print("mLoader=");
|
||||
printWriter.println(this.mLoader);
|
||||
this.mLoader.dump(str + " ", fileDescriptor, printWriter, strArr);
|
||||
if (this.mObserver != null) {
|
||||
printWriter.print(str);
|
||||
printWriter.print("mCallbacks=");
|
||||
printWriter.println(this.mObserver);
|
||||
this.mObserver.dump(str + " ", printWriter);
|
||||
}
|
||||
printWriter.print(str);
|
||||
printWriter.print("mData=");
|
||||
printWriter.println(getLoader().dataToString(getValue()));
|
||||
printWriter.print(str);
|
||||
printWriter.print("mStarted=");
|
||||
printWriter.println(hasActiveObservers());
|
||||
}
|
||||
}
|
||||
|
||||
static class LoaderObserver<D> implements Observer<D> {
|
||||
private final LoaderManager.LoaderCallbacks<D> mCallback;
|
||||
private boolean mDeliveredData = false;
|
||||
private final Loader<D> mLoader;
|
||||
|
||||
boolean hasDeliveredData() {
|
||||
return this.mDeliveredData;
|
||||
}
|
||||
|
||||
LoaderObserver(Loader<D> loader, LoaderManager.LoaderCallbacks<D> loaderCallbacks) {
|
||||
this.mLoader = loader;
|
||||
this.mCallback = loaderCallbacks;
|
||||
}
|
||||
|
||||
@Override // androidx.lifecycle.Observer
|
||||
public void onChanged(D d) {
|
||||
if (LoaderManagerImpl.DEBUG) {
|
||||
Log.v(LoaderManagerImpl.TAG, " onLoadFinished in " + this.mLoader + ": " + this.mLoader.dataToString(d));
|
||||
}
|
||||
this.mCallback.onLoadFinished(this.mLoader, d);
|
||||
this.mDeliveredData = true;
|
||||
}
|
||||
|
||||
void reset() {
|
||||
if (this.mDeliveredData) {
|
||||
if (LoaderManagerImpl.DEBUG) {
|
||||
Log.v(LoaderManagerImpl.TAG, " Resetting: " + this.mLoader);
|
||||
}
|
||||
this.mCallback.onLoaderReset(this.mLoader);
|
||||
}
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return this.mCallback.toString();
|
||||
}
|
||||
|
||||
public void dump(String str, PrintWriter printWriter) {
|
||||
printWriter.print(str);
|
||||
printWriter.print("mDeliveredData=");
|
||||
printWriter.println(this.mDeliveredData);
|
||||
}
|
||||
}
|
||||
|
||||
static class LoaderViewModel extends ViewModel {
|
||||
private static final ViewModelProvider.Factory FACTORY = new ViewModelProvider.Factory() { // from class: androidx.loader.app.LoaderManagerImpl.LoaderViewModel.1
|
||||
@Override // androidx.lifecycle.ViewModelProvider.Factory
|
||||
public /* synthetic */ ViewModel create(Class cls, CreationExtras creationExtras) {
|
||||
return ViewModelProvider.Factory.CC.$default$create(this, cls, creationExtras);
|
||||
}
|
||||
|
||||
@Override // androidx.lifecycle.ViewModelProvider.Factory
|
||||
public <T extends ViewModel> T create(Class<T> cls) {
|
||||
return new LoaderViewModel();
|
||||
}
|
||||
};
|
||||
private SparseArrayCompat<LoaderInfo> mLoaders = new SparseArrayCompat<>();
|
||||
private boolean mCreatingLoader = false;
|
||||
|
||||
void finishCreatingLoader() {
|
||||
this.mCreatingLoader = false;
|
||||
}
|
||||
|
||||
boolean isCreatingLoader() {
|
||||
return this.mCreatingLoader;
|
||||
}
|
||||
|
||||
void startCreatingLoader() {
|
||||
this.mCreatingLoader = true;
|
||||
}
|
||||
|
||||
LoaderViewModel() {
|
||||
}
|
||||
|
||||
static LoaderViewModel getInstance(ViewModelStore viewModelStore) {
|
||||
return (LoaderViewModel) new ViewModelProvider(viewModelStore, FACTORY).get(LoaderViewModel.class);
|
||||
}
|
||||
|
||||
void putLoader(int i, LoaderInfo loaderInfo) {
|
||||
this.mLoaders.put(i, loaderInfo);
|
||||
}
|
||||
|
||||
<D> LoaderInfo<D> getLoader(int i) {
|
||||
return this.mLoaders.get(i);
|
||||
}
|
||||
|
||||
void removeLoader(int i) {
|
||||
this.mLoaders.remove(i);
|
||||
}
|
||||
|
||||
boolean hasRunningLoaders() {
|
||||
int size = this.mLoaders.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
if (this.mLoaders.valueAt(i).isCallbackWaitingForData()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void markForRedelivery() {
|
||||
int size = this.mLoaders.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
this.mLoaders.valueAt(i).markForRedelivery();
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.lifecycle.ViewModel
|
||||
protected void onCleared() {
|
||||
super.onCleared();
|
||||
int size = this.mLoaders.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
this.mLoaders.valueAt(i).destroy(true);
|
||||
}
|
||||
this.mLoaders.clear();
|
||||
}
|
||||
|
||||
public void dump(String str, FileDescriptor fileDescriptor, PrintWriter printWriter, String[] strArr) {
|
||||
if (this.mLoaders.size() > 0) {
|
||||
printWriter.print(str);
|
||||
printWriter.println("Loaders:");
|
||||
String str2 = str + " ";
|
||||
for (int i = 0; i < this.mLoaders.size(); i++) {
|
||||
LoaderInfo valueAt = this.mLoaders.valueAt(i);
|
||||
printWriter.print(str);
|
||||
printWriter.print(" #");
|
||||
printWriter.print(this.mLoaders.keyAt(i));
|
||||
printWriter.print(": ");
|
||||
printWriter.println(valueAt.toString());
|
||||
valueAt.dump(str2, fileDescriptor, printWriter, strArr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LoaderManagerImpl(LifecycleOwner lifecycleOwner, ViewModelStore viewModelStore) {
|
||||
this.mLifecycleOwner = lifecycleOwner;
|
||||
this.mLoaderViewModel = LoaderViewModel.getInstance(viewModelStore);
|
||||
}
|
||||
|
||||
private <D> Loader<D> createAndInstallLoader(int i, Bundle bundle, LoaderManager.LoaderCallbacks<D> loaderCallbacks, Loader<D> loader) {
|
||||
try {
|
||||
this.mLoaderViewModel.startCreatingLoader();
|
||||
Loader<D> onCreateLoader = loaderCallbacks.onCreateLoader(i, bundle);
|
||||
if (onCreateLoader == null) {
|
||||
throw new IllegalArgumentException("Object returned from onCreateLoader must not be null");
|
||||
}
|
||||
if (onCreateLoader.getClass().isMemberClass() && !Modifier.isStatic(onCreateLoader.getClass().getModifiers())) {
|
||||
throw new IllegalArgumentException("Object returned from onCreateLoader must not be a non-static inner member class: " + onCreateLoader);
|
||||
}
|
||||
LoaderInfo loaderInfo = new LoaderInfo(i, bundle, onCreateLoader, loader);
|
||||
if (DEBUG) {
|
||||
Log.v(TAG, " Created new loader " + loaderInfo);
|
||||
}
|
||||
this.mLoaderViewModel.putLoader(i, loaderInfo);
|
||||
this.mLoaderViewModel.finishCreatingLoader();
|
||||
return loaderInfo.setCallback(this.mLifecycleOwner, loaderCallbacks);
|
||||
} catch (Throwable th) {
|
||||
this.mLoaderViewModel.finishCreatingLoader();
|
||||
throw th;
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.loader.app.LoaderManager
|
||||
public <D> Loader<D> initLoader(int i, Bundle bundle, LoaderManager.LoaderCallbacks<D> loaderCallbacks) {
|
||||
if (this.mLoaderViewModel.isCreatingLoader()) {
|
||||
throw new IllegalStateException("Called while creating a loader");
|
||||
}
|
||||
if (Looper.getMainLooper() != Looper.myLooper()) {
|
||||
throw new IllegalStateException("initLoader must be called on the main thread");
|
||||
}
|
||||
LoaderInfo<D> loader = this.mLoaderViewModel.getLoader(i);
|
||||
if (DEBUG) {
|
||||
Log.v(TAG, "initLoader in " + this + ": args=" + bundle);
|
||||
}
|
||||
if (loader == null) {
|
||||
return createAndInstallLoader(i, bundle, loaderCallbacks, null);
|
||||
}
|
||||
if (DEBUG) {
|
||||
Log.v(TAG, " Re-using existing loader " + loader);
|
||||
}
|
||||
return loader.setCallback(this.mLifecycleOwner, loaderCallbacks);
|
||||
}
|
||||
|
||||
@Override // androidx.loader.app.LoaderManager
|
||||
public <D> Loader<D> restartLoader(int i, Bundle bundle, LoaderManager.LoaderCallbacks<D> loaderCallbacks) {
|
||||
if (this.mLoaderViewModel.isCreatingLoader()) {
|
||||
throw new IllegalStateException("Called while creating a loader");
|
||||
}
|
||||
if (Looper.getMainLooper() != Looper.myLooper()) {
|
||||
throw new IllegalStateException("restartLoader must be called on the main thread");
|
||||
}
|
||||
if (DEBUG) {
|
||||
Log.v(TAG, "restartLoader in " + this + ": args=" + bundle);
|
||||
}
|
||||
LoaderInfo<D> loader = this.mLoaderViewModel.getLoader(i);
|
||||
return createAndInstallLoader(i, bundle, loaderCallbacks, loader != null ? loader.destroy(false) : null);
|
||||
}
|
||||
|
||||
@Override // androidx.loader.app.LoaderManager
|
||||
public void destroyLoader(int i) {
|
||||
if (this.mLoaderViewModel.isCreatingLoader()) {
|
||||
throw new IllegalStateException("Called while creating a loader");
|
||||
}
|
||||
if (Looper.getMainLooper() != Looper.myLooper()) {
|
||||
throw new IllegalStateException("destroyLoader must be called on the main thread");
|
||||
}
|
||||
if (DEBUG) {
|
||||
Log.v(TAG, "destroyLoader in " + this + " of " + i);
|
||||
}
|
||||
LoaderInfo loader = this.mLoaderViewModel.getLoader(i);
|
||||
if (loader != null) {
|
||||
loader.destroy(true);
|
||||
this.mLoaderViewModel.removeLoader(i);
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.loader.app.LoaderManager
|
||||
public <D> Loader<D> getLoader(int i) {
|
||||
if (this.mLoaderViewModel.isCreatingLoader()) {
|
||||
throw new IllegalStateException("Called while creating a loader");
|
||||
}
|
||||
LoaderInfo<D> loader = this.mLoaderViewModel.getLoader(i);
|
||||
if (loader != null) {
|
||||
return loader.getLoader();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override // androidx.loader.app.LoaderManager
|
||||
public void markForRedelivery() {
|
||||
this.mLoaderViewModel.markForRedelivery();
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder(128);
|
||||
sb.append("LoaderManager{");
|
||||
sb.append(Integer.toHexString(System.identityHashCode(this)));
|
||||
sb.append(" in ");
|
||||
DebugUtils.buildShortClassTag(this.mLifecycleOwner, sb);
|
||||
sb.append("}}");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override // androidx.loader.app.LoaderManager
|
||||
@Deprecated
|
||||
public void dump(String str, FileDescriptor fileDescriptor, PrintWriter printWriter, String[] strArr) {
|
||||
this.mLoaderViewModel.dump(str, fileDescriptor, printWriter, strArr);
|
||||
}
|
||||
|
||||
@Override // androidx.loader.app.LoaderManager
|
||||
public boolean hasRunningLoaders() {
|
||||
return this.mLoaderViewModel.hasRunningLoaders();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user