ADD week 5
This commit is contained in:
		
							
								
								
									
										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