ADD week 5
This commit is contained in:
		| @@ -0,0 +1,58 @@ | ||||
| package androidx.fragment.app; | ||||
|  | ||||
| import androidx.collection.SimpleArrayMap; | ||||
| import androidx.fragment.app.Fragment; | ||||
| import java.lang.reflect.InvocationTargetException; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class FragmentFactory { | ||||
|     private static final SimpleArrayMap<ClassLoader, SimpleArrayMap<String, Class<?>>> sClassCacheMap = new SimpleArrayMap<>(); | ||||
|  | ||||
|     private static Class<?> loadClass(ClassLoader classLoader, String str) throws ClassNotFoundException { | ||||
|         SimpleArrayMap<ClassLoader, SimpleArrayMap<String, Class<?>>> simpleArrayMap = sClassCacheMap; | ||||
|         SimpleArrayMap<String, Class<?>> simpleArrayMap2 = simpleArrayMap.get(classLoader); | ||||
|         if (simpleArrayMap2 == null) { | ||||
|             simpleArrayMap2 = new SimpleArrayMap<>(); | ||||
|             simpleArrayMap.put(classLoader, simpleArrayMap2); | ||||
|         } | ||||
|         Class<?> cls = simpleArrayMap2.get(str); | ||||
|         if (cls != null) { | ||||
|             return cls; | ||||
|         } | ||||
|         Class<?> cls2 = Class.forName(str, false, classLoader); | ||||
|         simpleArrayMap2.put(str, cls2); | ||||
|         return cls2; | ||||
|     } | ||||
|  | ||||
|     static boolean isFragmentClass(ClassLoader classLoader, String str) { | ||||
|         try { | ||||
|             return Fragment.class.isAssignableFrom(loadClass(classLoader, str)); | ||||
|         } catch (ClassNotFoundException unused) { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static Class<? extends Fragment> loadFragmentClass(ClassLoader classLoader, String str) { | ||||
|         try { | ||||
|             return loadClass(classLoader, str); | ||||
|         } catch (ClassCastException e) { | ||||
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": make sure class is a valid subclass of Fragment", e); | ||||
|         } catch (ClassNotFoundException e2) { | ||||
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": make sure class name exists", e2); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public Fragment instantiate(ClassLoader classLoader, String str) { | ||||
|         try { | ||||
|             return loadFragmentClass(classLoader, str).getConstructor(new Class[0]).newInstance(new Object[0]); | ||||
|         } catch (IllegalAccessException e) { | ||||
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": make sure class name exists, is public, and has an empty constructor that is public", e); | ||||
|         } catch (InstantiationException e2) { | ||||
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": make sure class name exists, is public, and has an empty constructor that is public", e2); | ||||
|         } catch (NoSuchMethodException e3) { | ||||
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": could not find Fragment constructor", e3); | ||||
|         } catch (InvocationTargetException e4) { | ||||
|             throw new Fragment.InstantiationException("Unable to instantiate fragment " + str + ": calling Fragment constructor caused an exception", e4); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user