jimu-decompiled/sources/com/squareup/leakcanary/internal/LeakCanaryInternals.java
2025-05-13 19:24:51 +02:00

141 lines
6.9 KiB
Java

package com.squareup.leakcanary.internal;
import android.app.ActivityManager;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Process;
import com.ijm.dataencryption.de.DataDecryptTool;
import com.squareup.leakcanary.CanaryLog;
import com.squareup.leakcanary.DefaultLeakDirectoryProvider;
import com.squareup.leakcanary.LeakDirectoryProvider;
import com.squareup.leakcanary.R;
import com.squareup.leakcanary.RefWatcher;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/* loaded from: classes.dex */
public final class LeakCanaryInternals {
public static final String HUAWEI = "HUAWEI";
public static final String LENOVO = "LENOVO";
public static final String LG = "LGE";
public static final String MEIZU = "Meizu";
public static final String MOTOROLA = "motorola";
private static final String NOTIFICATION_CHANNEL_ID = "leakcanary";
public static final String NVIDIA = "NVIDIA";
public static final String SAMSUNG = "samsung";
public static final String VIVO = "vivo";
public static volatile RefWatcher installedRefWatcher;
public static volatile Boolean isInAnalyzerProcess;
private static volatile LeakDirectoryProvider leakDirectoryProvider;
private LeakCanaryInternals() {
throw new AssertionError();
}
public static Notification buildNotification(Context context, Notification.Builder builder) {
builder.setSmallIcon(R.drawable.leak_canary_notification).setWhen(System.currentTimeMillis()).setOnlyAlertOnce(true);
if (Build.VERSION.SDK_INT >= 26) {
NotificationManager notificationManager = (NotificationManager) context.getSystemService("notification");
if (notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID) == null) {
notificationManager.createNotificationChannel(new NotificationChannel(NOTIFICATION_CHANNEL_ID, context.getString(R.string.leak_canary_notification_channel), 3));
}
builder.setChannelId(NOTIFICATION_CHANNEL_ID);
}
return Build.VERSION.SDK_INT < 16 ? builder.getNotification() : builder.build();
}
public static String classSimpleName(String str) {
int lastIndexOf = str.lastIndexOf(46);
return lastIndexOf == -1 ? str : str.substring(lastIndexOf + 1);
}
public static LeakDirectoryProvider getLeakDirectoryProvider(Context context) {
LeakDirectoryProvider leakDirectoryProvider2 = leakDirectoryProvider;
return leakDirectoryProvider2 == null ? new DefaultLeakDirectoryProvider(context) : leakDirectoryProvider2;
}
public static boolean isInServiceProcess(Context context, Class<? extends Service> cls) {
PackageManager packageManager = context.getPackageManager();
try {
String str = packageManager.getPackageInfo(context.getPackageName(), 4).applicationInfo.processName;
try {
ServiceInfo serviceInfo = packageManager.getServiceInfo(new ComponentName(context, cls), DataDecryptTool.DECRYPT_DB_FILE);
if (serviceInfo.processName.equals(str)) {
CanaryLog.d("Did not expect service %s to run in main process %s", cls, str);
return false;
}
int myPid = Process.myPid();
ActivityManager.RunningAppProcessInfo runningAppProcessInfo = null;
try {
List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = ((ActivityManager) context.getSystemService("activity")).getRunningAppProcesses();
if (runningAppProcesses != null) {
Iterator<ActivityManager.RunningAppProcessInfo> it = runningAppProcesses.iterator();
while (true) {
if (!it.hasNext()) {
break;
}
ActivityManager.RunningAppProcessInfo next = it.next();
if (next.pid == myPid) {
runningAppProcessInfo = next;
break;
}
}
}
if (runningAppProcessInfo != null) {
return runningAppProcessInfo.processName.equals(serviceInfo.processName);
}
CanaryLog.d("Could not find running process for %d", Integer.valueOf(myPid));
return false;
} catch (SecurityException e) {
CanaryLog.d("Could not get running app processes %d", e);
return false;
}
} catch (PackageManager.NameNotFoundException unused) {
}
} catch (Exception e2) {
CanaryLog.d(e2, "Could not get package info for %s", context.getPackageName());
return false;
}
}
public static Executor newSingleThreadExecutor(String str) {
return Executors.newSingleThreadExecutor(new LeakCanarySingleThreadFactory(str));
}
public static void setEnabledAsync(Context context, final Class<?> cls, final boolean z) {
final Context applicationContext = context.getApplicationContext();
AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() { // from class: com.squareup.leakcanary.internal.LeakCanaryInternals.1
@Override // java.lang.Runnable
public void run() {
LeakCanaryInternals.setEnabledBlocking(applicationContext, cls, z);
}
});
}
public static void setEnabledBlocking(Context context, Class<?> cls, boolean z) {
context.getPackageManager().setComponentEnabledSetting(new ComponentName(context, cls), z ? 1 : 2, 1);
}
public static void setLeakDirectoryProvider(LeakDirectoryProvider leakDirectoryProvider2) {
if (leakDirectoryProvider != null) {
throw new IllegalStateException("Cannot set the LeakDirectoryProvider after it has already been set. Try setting it before installing the RefWatcher.");
}
leakDirectoryProvider = leakDirectoryProvider2;
}
public static void showNotification(Context context, CharSequence charSequence, CharSequence charSequence2, PendingIntent pendingIntent, int i) {
((NotificationManager) context.getSystemService("notification")).notify(i, buildNotification(context, new Notification.Builder(context).setContentText(charSequence2).setContentTitle(charSequence).setAutoCancel(true).setContentIntent(pendingIntent)));
}
}