Rabbit-R1/switch port/java/sources/androidx/profileinstaller/ProfileInstaller.java
2024-05-21 17:08:36 -04:00

252 lines
11 KiB
Java

package androidx.profileinstaller;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.util.Log;
import androidx.media3.exoplayer.offline.DefaultDownloaderFactory$$ExternalSyntheticLambda0;
import androidx.profileinstaller.ProfileInstaller;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.concurrent.Executor;
/* loaded from: classes2.dex */
public class ProfileInstaller {
public static final int DIAGNOSTIC_CURRENT_PROFILE_DOES_NOT_EXIST = 2;
public static final int DIAGNOSTIC_CURRENT_PROFILE_EXISTS = 1;
public static final int DIAGNOSTIC_PROFILE_IS_COMPRESSED = 5;
public static final int DIAGNOSTIC_REF_PROFILE_DOES_NOT_EXIST = 4;
public static final int DIAGNOSTIC_REF_PROFILE_EXISTS = 3;
private static final DiagnosticsCallback EMPTY_DIAGNOSTICS = new DiagnosticsCallback() { // from class: androidx.profileinstaller.ProfileInstaller.1
@Override // androidx.profileinstaller.ProfileInstaller.DiagnosticsCallback
public void onDiagnosticReceived(int i, Object obj) {
}
@Override // androidx.profileinstaller.ProfileInstaller.DiagnosticsCallback
public void onResultReceived(int i, Object obj) {
}
};
static final DiagnosticsCallback LOG_DIAGNOSTICS = new DiagnosticsCallback() { // from class: androidx.profileinstaller.ProfileInstaller.2
static final String TAG = "ProfileInstaller";
@Override // androidx.profileinstaller.ProfileInstaller.DiagnosticsCallback
public void onDiagnosticReceived(int i, Object obj) {
Log.d(TAG, i != 1 ? i != 2 ? i != 3 ? i != 4 ? i != 5 ? "" : "DIAGNOSTIC_PROFILE_IS_COMPRESSED" : "DIAGNOSTIC_REF_PROFILE_DOES_NOT_EXIST" : "DIAGNOSTIC_REF_PROFILE_EXISTS" : "DIAGNOSTIC_CURRENT_PROFILE_DOES_NOT_EXIST" : "DIAGNOSTIC_CURRENT_PROFILE_EXISTS");
}
@Override // androidx.profileinstaller.ProfileInstaller.DiagnosticsCallback
public void onResultReceived(int i, Object obj) {
String str;
switch (i) {
case 1:
str = "RESULT_INSTALL_SUCCESS";
break;
case 2:
str = "RESULT_ALREADY_INSTALLED";
break;
case 3:
str = "RESULT_UNSUPPORTED_ART_VERSION";
break;
case 4:
str = "RESULT_NOT_WRITABLE";
break;
case 5:
str = "RESULT_DESIRED_FORMAT_UNSUPPORTED";
break;
case 6:
str = "RESULT_BASELINE_PROFILE_NOT_FOUND";
break;
case 7:
str = "RESULT_IO_EXCEPTION";
break;
case 8:
str = "RESULT_PARSE_EXCEPTION";
break;
case 9:
default:
str = "";
break;
case 10:
str = "RESULT_INSTALL_SKIP_FILE_SUCCESS";
break;
case 11:
str = "RESULT_DELETE_SKIP_FILE_SUCCESS";
break;
}
if (i == 6 || i == 7 || i == 8) {
Log.e(TAG, str, (Throwable) obj);
} else {
Log.d(TAG, str);
}
}
};
private static final String PROFILE_BASE_DIR = "/data/misc/profiles/cur/0";
private static final String PROFILE_FILE = "primary.prof";
private static final String PROFILE_INSTALLER_SKIP_FILE_NAME = "profileinstaller_profileWrittenFor_lastUpdateTime.dat";
private static final String PROFILE_META_LOCATION = "dexopt/baseline.profm";
private static final String PROFILE_SOURCE_LOCATION = "dexopt/baseline.prof";
public static final int RESULT_ALREADY_INSTALLED = 2;
public static final int RESULT_BASELINE_PROFILE_NOT_FOUND = 6;
public static final int RESULT_BENCHMARK_OPERATION_FAILURE = 15;
public static final int RESULT_BENCHMARK_OPERATION_SUCCESS = 14;
public static final int RESULT_BENCHMARK_OPERATION_UNKNOWN = 16;
public static final int RESULT_DELETE_SKIP_FILE_SUCCESS = 11;
public static final int RESULT_DESIRED_FORMAT_UNSUPPORTED = 5;
public static final int RESULT_INSTALL_SKIP_FILE_SUCCESS = 10;
public static final int RESULT_INSTALL_SUCCESS = 1;
public static final int RESULT_IO_EXCEPTION = 7;
public static final int RESULT_META_FILE_REQUIRED_BUT_NOT_FOUND = 9;
public static final int RESULT_NOT_WRITABLE = 4;
public static final int RESULT_PARSE_EXCEPTION = 8;
public static final int RESULT_SAVE_PROFILE_SIGNALLED = 12;
public static final int RESULT_SAVE_PROFILE_SKIPPED = 13;
public static final int RESULT_UNSUPPORTED_ART_VERSION = 3;
private static final String TAG = "ProfileInstaller";
@Retention(RetentionPolicy.SOURCE)
/* loaded from: classes2.dex */
public @interface DiagnosticCode {
}
/* loaded from: classes2.dex */
public interface DiagnosticsCallback {
void onDiagnosticReceived(int i, Object obj);
void onResultReceived(int i, Object obj);
}
@Retention(RetentionPolicy.SOURCE)
/* loaded from: classes2.dex */
public @interface ResultCode {
}
private ProfileInstaller() {
}
static void result(Executor executor, final DiagnosticsCallback diagnosticsCallback, final int i, final Object obj) {
executor.execute(new Runnable() { // from class: androidx.profileinstaller.ProfileInstaller$$ExternalSyntheticLambda0
@Override // java.lang.Runnable
public final void run() {
ProfileInstaller.DiagnosticsCallback.this.onResultReceived(i, obj);
}
});
}
static void diagnostic(Executor executor, final DiagnosticsCallback diagnosticsCallback, final int i, final Object obj) {
executor.execute(new Runnable() { // from class: androidx.profileinstaller.ProfileInstaller$$ExternalSyntheticLambda1
@Override // java.lang.Runnable
public final void run() {
ProfileInstaller.DiagnosticsCallback.this.onDiagnosticReceived(i, obj);
}
});
}
static boolean hasAlreadyWrittenProfileForThisInstall(PackageInfo packageInfo, File file, DiagnosticsCallback diagnosticsCallback) {
File file2 = new File(file, PROFILE_INSTALLER_SKIP_FILE_NAME);
if (!file2.exists()) {
return false;
}
try {
DataInputStream dataInputStream = new DataInputStream(new FileInputStream(file2));
try {
long readLong = dataInputStream.readLong();
dataInputStream.close();
boolean z = readLong == packageInfo.lastUpdateTime;
if (z) {
diagnosticsCallback.onResultReceived(2, null);
}
return z;
} finally {
}
} catch (IOException unused) {
return false;
}
}
static void noteProfileWrittenFor(PackageInfo packageInfo, File file) {
try {
DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(new File(file, PROFILE_INSTALLER_SKIP_FILE_NAME)));
try {
dataOutputStream.writeLong(packageInfo.lastUpdateTime);
dataOutputStream.close();
} finally {
}
} catch (IOException unused) {
}
}
static boolean deleteProfileWrittenFor(File file) {
return new File(file, PROFILE_INSTALLER_SKIP_FILE_NAME).delete();
}
private static boolean transcodeAndWrite(AssetManager assetManager, String str, PackageInfo packageInfo, File file, String str2, Executor executor, DiagnosticsCallback diagnosticsCallback) {
DeviceProfileWriter deviceProfileWriter = new DeviceProfileWriter(assetManager, executor, diagnosticsCallback, str2, PROFILE_SOURCE_LOCATION, PROFILE_META_LOCATION, new File(new File(PROFILE_BASE_DIR, str), PROFILE_FILE));
if (!deviceProfileWriter.deviceAllowsProfileInstallerAotWrites()) {
return false;
}
boolean write = deviceProfileWriter.read().transcodeIfNeeded().write();
if (write) {
noteProfileWrittenFor(packageInfo, file);
}
return write;
}
public static void writeProfile(Context context) {
writeProfile(context, new DefaultDownloaderFactory$$ExternalSyntheticLambda0(), EMPTY_DIAGNOSTICS);
}
public static void writeProfile(Context context, Executor executor, DiagnosticsCallback diagnosticsCallback) {
writeProfile(context, executor, diagnosticsCallback, false);
}
/* JADX INFO: Access modifiers changed from: package-private */
public static void writeProfile(Context context, Executor executor, DiagnosticsCallback diagnosticsCallback, boolean z) {
Context applicationContext = context.getApplicationContext();
String packageName = applicationContext.getPackageName();
ApplicationInfo applicationInfo = applicationContext.getApplicationInfo();
AssetManager assets = applicationContext.getAssets();
String name = new File(applicationInfo.sourceDir).getName();
boolean z2 = false;
try {
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);
File filesDir = context.getFilesDir();
if (z || !hasAlreadyWrittenProfileForThisInstall(packageInfo, filesDir, diagnosticsCallback)) {
Log.d(TAG, "Installing profile for " + context.getPackageName());
if (transcodeAndWrite(assets, packageName, packageInfo, filesDir, name, executor, diagnosticsCallback) && z) {
z2 = true;
}
ProfileVerifier.writeProfileVerification(context, z2);
return;
}
Log.d(TAG, "Skipping profile installation for " + context.getPackageName());
ProfileVerifier.writeProfileVerification(context, false);
} catch (PackageManager.NameNotFoundException e) {
diagnosticsCallback.onResultReceived(7, e);
ProfileVerifier.writeProfileVerification(context, false);
}
}
/* JADX INFO: Access modifiers changed from: package-private */
public static void writeSkipFile(Context context, Executor executor, DiagnosticsCallback diagnosticsCallback) {
try {
noteProfileWrittenFor(context.getPackageManager().getPackageInfo(context.getApplicationContext().getPackageName(), 0), context.getFilesDir());
result(executor, diagnosticsCallback, 10, null);
} catch (PackageManager.NameNotFoundException e) {
result(executor, diagnosticsCallback, 7, e);
}
}
/* JADX INFO: Access modifiers changed from: package-private */
public static void deleteSkipFile(Context context, Executor executor, DiagnosticsCallback diagnosticsCallback) {
deleteProfileWrittenFor(context.getFilesDir());
result(executor, diagnosticsCallback, 11, null);
}
}