package androidx.core.app; import android.app.Activity; import android.app.Application; import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.RestrictTo; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.List; @RestrictTo({RestrictTo.Scope.LIBRARY}) public final class ActivityRecreator { private static final String LOG_TAG = "ActivityRecreator"; public static final Class activityThreadClass; private static final Handler mainHandler = new Handler(Looper.getMainLooper()); public static final Field mainThreadField = getMainThreadField(); public static final Method performStopActivity2ParamsMethod; public static final Method performStopActivity3ParamsMethod; public static final Method requestRelaunchActivityMethod; public static final Field tokenField = getTokenField(); /* renamed from: androidx.core.app.ActivityRecreator$1 reason: invalid class name */ public class AnonymousClass1 implements Runnable { public final /* synthetic */ LifecycleCheckCallbacks val$callbacks; public final /* synthetic */ Object val$token; public AnonymousClass1(LifecycleCheckCallbacks lifecycleCheckCallbacks, Object obj) { this.val$callbacks = lifecycleCheckCallbacks; this.val$token = obj; } @Override // java.lang.Runnable public void run() { this.val$callbacks.currentlyRecreatingToken = this.val$token; } } /* renamed from: androidx.core.app.ActivityRecreator$2 reason: invalid class name */ public class AnonymousClass2 implements Runnable { public final /* synthetic */ Application val$application; public final /* synthetic */ LifecycleCheckCallbacks val$callbacks; public AnonymousClass2(Application application, LifecycleCheckCallbacks lifecycleCheckCallbacks) { this.val$application = application; this.val$callbacks = lifecycleCheckCallbacks; } @Override // java.lang.Runnable public void run() { this.val$application.unregisterActivityLifecycleCallbacks(this.val$callbacks); } } /* renamed from: androidx.core.app.ActivityRecreator$3 reason: invalid class name */ public class AnonymousClass3 implements Runnable { public final /* synthetic */ Object val$activityThread; public final /* synthetic */ Object val$token; public AnonymousClass3(Object obj, Object obj2) { this.val$activityThread = obj; this.val$token = obj2; } @Override // java.lang.Runnable public void run() { try { Method method = ActivityRecreator.performStopActivity3ParamsMethod; if (method != null) { method.invoke(this.val$activityThread, this.val$token, Boolean.FALSE, "AppCompat recreation"); } else { ActivityRecreator.performStopActivity2ParamsMethod.invoke(this.val$activityThread, this.val$token, Boolean.FALSE); } } catch (RuntimeException e) { if (e.getClass() == RuntimeException.class && e.getMessage() != null && e.getMessage().startsWith("Unable to stop")) { throw e; } } catch (Throwable th) { Log.e("ActivityRecreator", "Exception while invoking performStopActivity", th); } } } public static final class LifecycleCheckCallbacks implements Application.ActivityLifecycleCallbacks { public Object currentlyRecreatingToken; private Activity mActivity; private boolean mDestroyed = false; private final int mRecreatingHashCode; private boolean mStarted = false; private boolean mStopQueued = false; public LifecycleCheckCallbacks(@NonNull Activity activity) { this.mActivity = activity; this.mRecreatingHashCode = activity.hashCode(); } @Override // android.app.Application.ActivityLifecycleCallbacks public void onActivityCreated(Activity activity, Bundle bundle) { } @Override // android.app.Application.ActivityLifecycleCallbacks public void onActivityDestroyed(Activity activity) { if (this.mActivity == activity) { this.mActivity = null; this.mDestroyed = true; } } @Override // android.app.Application.ActivityLifecycleCallbacks public void onActivityPaused(Activity activity) { if (this.mDestroyed && !this.mStopQueued && !this.mStarted && ActivityRecreator.queueOnStopIfNecessary(this.currentlyRecreatingToken, this.mRecreatingHashCode, activity)) { this.mStopQueued = true; this.currentlyRecreatingToken = null; } } @Override // android.app.Application.ActivityLifecycleCallbacks public void onActivityResumed(Activity activity) { } @Override // android.app.Application.ActivityLifecycleCallbacks public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { } @Override // android.app.Application.ActivityLifecycleCallbacks public void onActivityStarted(Activity activity) { if (this.mActivity == activity) { this.mStarted = true; } } @Override // android.app.Application.ActivityLifecycleCallbacks public void onActivityStopped(Activity activity) { } } static { Class activityThreadClass2 = getActivityThreadClass(); activityThreadClass = activityThreadClass2; performStopActivity3ParamsMethod = getPerformStopActivity3Params(activityThreadClass2); performStopActivity2ParamsMethod = getPerformStopActivity2Params(activityThreadClass2); requestRelaunchActivityMethod = getRequestRelaunchActivityMethod(activityThreadClass2); } private ActivityRecreator() { } private static Class getActivityThreadClass() { try { return Class.forName("android.app.ActivityThread"); } catch (Throwable unused) { return null; } } private static Field getMainThreadField() { try { Field declaredField = Activity.class.getDeclaredField("mMainThread"); declaredField.setAccessible(true); return declaredField; } catch (Throwable unused) { return null; } } private static Method getPerformStopActivity2Params(Class cls) { if (cls == null) { return null; } try { Method declaredMethod = cls.getDeclaredMethod("performStopActivity", IBinder.class, Boolean.TYPE); declaredMethod.setAccessible(true); return declaredMethod; } catch (Throwable unused) { return null; } } private static Method getPerformStopActivity3Params(Class cls) { if (cls == null) { return null; } try { Method declaredMethod = cls.getDeclaredMethod("performStopActivity", IBinder.class, Boolean.TYPE, String.class); declaredMethod.setAccessible(true); return declaredMethod; } catch (Throwable unused) { return null; } } private static Method getRequestRelaunchActivityMethod(Class cls) { if (needsRelaunchCall() && cls != null) { try { Class cls2 = Boolean.TYPE; Method declaredMethod = cls.getDeclaredMethod("requestRelaunchActivity", IBinder.class, List.class, List.class, Integer.TYPE, cls2, Configuration.class, Configuration.class, cls2, cls2); declaredMethod.setAccessible(true); return declaredMethod; } catch (Throwable unused) { } } return null; } private static Field getTokenField() { try { Field declaredField = Activity.class.getDeclaredField("mToken"); declaredField.setAccessible(true); return declaredField; } catch (Throwable unused) { return null; } } private static boolean needsRelaunchCall() { int i = Build.VERSION.SDK_INT; return i == 26 || i == 27; } public static boolean queueOnStopIfNecessary(Object obj, int i, Activity activity) { try { Object obj2 = tokenField.get(activity); if (obj2 == obj) { if (activity.hashCode() == i) { mainHandler.postAtFrontOfQueue(new AnonymousClass3(mainThreadField.get(activity), obj2)); return true; } } return false; } catch (Throwable th) { Log.e("ActivityRecreator", "Exception while fetching field values", th); return false; } } public static boolean recreate(@NonNull Activity activity) { Object obj; if (Build.VERSION.SDK_INT >= 28) { activity.recreate(); return true; } else if (needsRelaunchCall() && requestRelaunchActivityMethod == null) { return false; } else { if (performStopActivity2ParamsMethod == null && performStopActivity3ParamsMethod == null) { return false; } try { Object obj2 = tokenField.get(activity); if (obj2 == null || (obj = mainThreadField.get(activity)) == null) { return false; } Application application = activity.getApplication(); LifecycleCheckCallbacks lifecycleCheckCallbacks = new LifecycleCheckCallbacks(activity); application.registerActivityLifecycleCallbacks(lifecycleCheckCallbacks); Handler handler = mainHandler; handler.post(new AnonymousClass1(lifecycleCheckCallbacks, obj2)); try { if (needsRelaunchCall()) { Method method = requestRelaunchActivityMethod; Boolean bool = Boolean.FALSE; method.invoke(obj, obj2, null, null, 0, bool, null, null, bool, bool); } else { activity.recreate(); } handler.post(new AnonymousClass2(application, lifecycleCheckCallbacks)); return true; } catch (Throwable th) { mainHandler.post(new AnonymousClass2(application, lifecycleCheckCallbacks)); throw th; } } catch (Throwable unused) { return false; } } } }