2021-06-27 20:44:35 +00:00
package androidx.savedstate ;
import android.annotation.SuppressLint ;
import android.os.Bundle ;
import androidx.annotation.NonNull ;
import androidx.lifecycle.GenericLifecycleObserver ;
import androidx.lifecycle.Lifecycle ;
import androidx.lifecycle.LifecycleOwner ;
import androidx.savedstate.SavedStateRegistry ;
import c.d.b.a.a ;
import java.lang.reflect.Constructor ;
import java.util.ArrayList ;
import java.util.HashSet ;
import java.util.Iterator ;
import java.util.Set ;
@SuppressLint ( { " RestrictedApi " } )
public final class Recreator implements GenericLifecycleObserver {
public static final String CLASSES_KEY = " classes_to_restore " ;
public static final String COMPONENT_KEY = " androidx.savedstate.Restarter " ;
private final SavedStateRegistryOwner mOwner ;
public static final class SavedStateProvider implements SavedStateRegistry . SavedStateProvider {
public final Set < String > mClasses = new HashSet ( ) ;
public SavedStateProvider ( SavedStateRegistry savedStateRegistry ) {
savedStateRegistry . registerSavedStateProvider ( " androidx.savedstate.Restarter " , this ) ;
}
public void add ( String str ) {
this . mClasses . add ( str ) ;
}
@Override // androidx.savedstate.SavedStateRegistry.SavedStateProvider
@NonNull
public Bundle saveState ( ) {
Bundle bundle = new Bundle ( ) ;
bundle . putStringArrayList ( " classes_to_restore " , new ArrayList < > ( this . mClasses ) ) ;
return bundle ;
}
}
public Recreator ( SavedStateRegistryOwner savedStateRegistryOwner ) {
this . mOwner = savedStateRegistryOwner ;
}
private void reflectiveNew ( String str ) {
Class cls ;
try {
try {
Constructor declaredConstructor = Class . forName ( str , false , Recreator . class . getClassLoader ( ) ) . asSubclass ( SavedStateRegistry . AutoRecreated . class ) . getDeclaredConstructor ( new Class [ 0 ] ) ;
declaredConstructor . setAccessible ( true ) ;
try {
( ( SavedStateRegistry . AutoRecreated ) declaredConstructor . newInstance ( new Object [ 0 ] ) ) . onRecreated ( this . mOwner ) ;
} catch ( Exception e ) {
2021-07-13 20:23:20 +00:00
throw new RuntimeException ( a . t ( " Failed to instantiate " , str ) , e ) ;
2021-06-27 20:44:35 +00:00
}
} catch ( NoSuchMethodException e2 ) {
StringBuilder L = a . L ( " Class " ) ;
L . append ( cls . getSimpleName ( ) ) ;
L . append ( " must have default constructor in order to be automatically recreated " ) ;
throw new IllegalStateException ( L . toString ( ) , e2 ) ;
}
} catch ( ClassNotFoundException e3 ) {
2021-07-13 20:23:20 +00:00
throw new RuntimeException ( a . u ( " Class " , str , " wasn't found " ) , e3 ) ;
2021-06-27 20:44:35 +00:00
}
}
@Override // androidx.lifecycle.LifecycleEventObserver
public void onStateChanged ( LifecycleOwner lifecycleOwner , Lifecycle . Event event ) {
if ( event = = Lifecycle . Event . ON_CREATE ) {
lifecycleOwner . getLifecycle ( ) . removeObserver ( this ) ;
Bundle consumeRestoredStateForKey = this . mOwner . getSavedStateRegistry ( ) . consumeRestoredStateForKey ( " androidx.savedstate.Restarter " ) ;
if ( consumeRestoredStateForKey ! = null ) {
ArrayList < String > stringArrayList = consumeRestoredStateForKey . getStringArrayList ( " classes_to_restore " ) ;
if ( stringArrayList ! = null ) {
Iterator < String > it = stringArrayList . iterator ( ) ;
while ( it . hasNext ( ) ) {
reflectiveNew ( it . next ( ) ) ;
}
return ;
}
throw new IllegalStateException ( " Bundle with restored state for the component \" androidx.savedstate.Restarter \" must contain list of strings by the key \" classes_to_restore \" " ) ;
}
return ;
}
throw new AssertionError ( " Next event must be ON_CREATE " ) ;
}
}