discord-jadx/app/src/main/java/androidx/core/app/ActivityRecreator.java

282 lines
11 KiB
Java

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;
}
}
}
}