147 lines
7.4 KiB
Java
147 lines
7.4 KiB
Java
package com.squareup.leakcanary;
|
|
|
|
import android.app.Activity;
|
|
import android.app.Application;
|
|
import android.app.Dialog;
|
|
import android.app.Fragment;
|
|
import android.os.MessageQueue;
|
|
import android.view.View;
|
|
import com.squareup.leakcanary.Reachability;
|
|
import com.unity3d.ads.metadata.MediationMetaData;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/* loaded from: classes.dex */
|
|
public enum AndroidReachabilityInspectors {
|
|
VIEW(ViewInspector.class),
|
|
ACTIVITY(ActivityInspector.class),
|
|
DIALOG(DialogInspector.class),
|
|
APPLICATION(ApplicationInspector.class),
|
|
FRAGMENT(FragmentInspector.class),
|
|
SUPPORT_FRAGMENT(SupportFragmentInspector.class),
|
|
MESSAGE_QUEUE(MessageQueueInspector.class),
|
|
MORTAR_PRESENTER(MortarPresenterInspector.class),
|
|
VIEW_ROOT_IMPL(ViewImplInspector.class),
|
|
MAIN_THEAD(MainThreadInspector.class),
|
|
WINDOW(WindowInspector.class);
|
|
|
|
private final Class<? extends Reachability.Inspector> inspectorClass;
|
|
|
|
public static class ActivityInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
if (!leakTraceElement.isInstanceOf(Activity.class)) {
|
|
return Reachability.UNKNOWN;
|
|
}
|
|
String fieldReferenceValue = leakTraceElement.getFieldReferenceValue("mDestroyed");
|
|
return fieldReferenceValue == null ? Reachability.UNKNOWN : fieldReferenceValue.equals("true") ? Reachability.UNREACHABLE : Reachability.REACHABLE;
|
|
}
|
|
}
|
|
|
|
public static class ApplicationInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
return leakTraceElement.isInstanceOf(Application.class) ? Reachability.REACHABLE : Reachability.UNKNOWN;
|
|
}
|
|
}
|
|
|
|
public static class DialogInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
if (!leakTraceElement.isInstanceOf(Dialog.class)) {
|
|
return Reachability.UNKNOWN;
|
|
}
|
|
String fieldReferenceValue = leakTraceElement.getFieldReferenceValue("mDecor");
|
|
return fieldReferenceValue == null ? Reachability.UNKNOWN : fieldReferenceValue.equals("null") ? Reachability.UNREACHABLE : Reachability.REACHABLE;
|
|
}
|
|
}
|
|
|
|
public static class FragmentInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
if (!leakTraceElement.isInstanceOf(Fragment.class)) {
|
|
return Reachability.UNKNOWN;
|
|
}
|
|
String fieldReferenceValue = leakTraceElement.getFieldReferenceValue("mDetached");
|
|
return fieldReferenceValue == null ? Reachability.UNKNOWN : fieldReferenceValue.equals("true") ? Reachability.UNREACHABLE : Reachability.REACHABLE;
|
|
}
|
|
}
|
|
|
|
public static class MainThreadInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
return !leakTraceElement.isInstanceOf(Thread.class) ? Reachability.UNKNOWN : "main".equals(leakTraceElement.getFieldReferenceValue(MediationMetaData.KEY_NAME)) ? Reachability.REACHABLE : Reachability.UNKNOWN;
|
|
}
|
|
}
|
|
|
|
public static class MessageQueueInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
return !leakTraceElement.isInstanceOf(MessageQueue.class) ? Reachability.UNKNOWN : "true".equals(leakTraceElement.getFieldReferenceValue("mQuitting")) ? Reachability.UNREACHABLE : Reachability.UNKNOWN;
|
|
}
|
|
}
|
|
|
|
public static class MortarPresenterInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
return !leakTraceElement.isInstanceOf("mortar.Presenter") ? Reachability.UNKNOWN : "null".equals(leakTraceElement.getFieldReferenceValue("view")) ? Reachability.UNREACHABLE : Reachability.UNKNOWN;
|
|
}
|
|
}
|
|
|
|
public static class SupportFragmentInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
if (!leakTraceElement.isInstanceOf("androidx.fragment.app.Fragment")) {
|
|
return Reachability.UNKNOWN;
|
|
}
|
|
String fieldReferenceValue = leakTraceElement.getFieldReferenceValue("mDetached");
|
|
return fieldReferenceValue == null ? Reachability.UNKNOWN : fieldReferenceValue.equals("true") ? Reachability.UNREACHABLE : Reachability.REACHABLE;
|
|
}
|
|
}
|
|
|
|
public static class ViewImplInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
if (!leakTraceElement.isInstanceOf("android.view.ViewRootImpl")) {
|
|
return Reachability.UNKNOWN;
|
|
}
|
|
String fieldReferenceValue = leakTraceElement.getFieldReferenceValue("mView");
|
|
return fieldReferenceValue == null ? Reachability.UNKNOWN : fieldReferenceValue.equals("null") ? Reachability.UNREACHABLE : Reachability.REACHABLE;
|
|
}
|
|
}
|
|
|
|
public static class ViewInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
if (!leakTraceElement.isInstanceOf(View.class)) {
|
|
return Reachability.UNKNOWN;
|
|
}
|
|
String fieldReferenceValue = leakTraceElement.getFieldReferenceValue("mAttachInfo");
|
|
return fieldReferenceValue == null ? Reachability.UNKNOWN : fieldReferenceValue.equals("null") ? Reachability.UNREACHABLE : Reachability.REACHABLE;
|
|
}
|
|
}
|
|
|
|
public static class WindowInspector implements Reachability.Inspector {
|
|
@Override // com.squareup.leakcanary.Reachability.Inspector
|
|
public Reachability expectedReachability(LeakTraceElement leakTraceElement) {
|
|
if (!leakTraceElement.isInstanceOf("android.view.Window")) {
|
|
return Reachability.UNKNOWN;
|
|
}
|
|
String fieldReferenceValue = leakTraceElement.getFieldReferenceValue("mDestroyed");
|
|
return fieldReferenceValue == null ? Reachability.UNKNOWN : fieldReferenceValue.equals("true") ? Reachability.UNREACHABLE : Reachability.REACHABLE;
|
|
}
|
|
}
|
|
|
|
AndroidReachabilityInspectors(Class cls) {
|
|
this.inspectorClass = cls;
|
|
}
|
|
|
|
public static List<Class<? extends Reachability.Inspector>> defaultAndroidInspectors() {
|
|
ArrayList arrayList = new ArrayList();
|
|
for (AndroidReachabilityInspectors androidReachabilityInspectors : values()) {
|
|
arrayList.add(androidReachabilityInspectors.inspectorClass);
|
|
}
|
|
return arrayList;
|
|
}
|
|
}
|