ADD week 5
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
package androidx.profileinstaller;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import androidx.concurrent.futures.ResolvableFuture;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
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.Objects;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public final class ProfileVerifier {
|
||||
private static final String CUR_PROFILES_BASE_DIR = "/data/misc/profiles/cur/0/";
|
||||
private static final String PROFILE_FILE_NAME = "primary.prof";
|
||||
private static final String PROFILE_INSTALLED_CACHE_FILE_NAME = "profileInstalled";
|
||||
private static final String REF_PROFILES_BASE_DIR = "/data/misc/profiles/ref/";
|
||||
private static final String TAG = "ProfileVerifier";
|
||||
private static final ResolvableFuture<CompilationStatus> sFuture = ResolvableFuture.create();
|
||||
private static final Object SYNC_OBJ = new Object();
|
||||
private static CompilationStatus sCompilationStatus = null;
|
||||
|
||||
public static ListenableFuture<CompilationStatus> getCompilationStatusAsync() {
|
||||
return sFuture;
|
||||
}
|
||||
|
||||
private ProfileVerifier() {
|
||||
}
|
||||
|
||||
public static CompilationStatus writeProfileVerification(Context context) {
|
||||
return writeProfileVerification(context, false);
|
||||
}
|
||||
|
||||
/* JADX WARN: Can't wrap try/catch for region: R(20:14|(1:78)(1:18)|19|(1:77)(1:23)|24|25|26|(2:63|64)(1:28)|29|(8:36|(1:40)|(1:47)|48|(2:55|56)|52|53|54)|(1:62)|(1:40)|(3:42|45|47)|48|(1:50)|55|56|52|53|54) */
|
||||
/* JADX WARN: Code restructure failed: missing block: B:58:0x00cf, code lost:
|
||||
|
||||
r3 = androidx.profileinstaller.ProfileVerifier.CompilationStatus.RESULT_CODE_ERROR_CANT_WRITE_PROFILE_VERIFICATION_RESULT_CACHE_FILE;
|
||||
*/
|
||||
/* JADX WARN: Code restructure failed: missing block: B:60:0x00a0, code lost:
|
||||
|
||||
r3 = 1;
|
||||
*/
|
||||
/*
|
||||
Code decompiled incorrectly, please refer to instructions dump.
|
||||
To view partially-correct add '--show-bad-code' argument
|
||||
*/
|
||||
static androidx.profileinstaller.ProfileVerifier.CompilationStatus writeProfileVerification(android.content.Context r18, boolean r19) {
|
||||
/*
|
||||
Method dump skipped, instructions count: 234
|
||||
To view this dump add '--comments-level debug' option
|
||||
*/
|
||||
throw new UnsupportedOperationException("Method not decompiled: androidx.profileinstaller.ProfileVerifier.writeProfileVerification(android.content.Context, boolean):androidx.profileinstaller.ProfileVerifier$CompilationStatus");
|
||||
}
|
||||
|
||||
private static CompilationStatus setCompilationStatus(int i, boolean z, boolean z2) {
|
||||
CompilationStatus compilationStatus = new CompilationStatus(i, z, z2);
|
||||
sCompilationStatus = compilationStatus;
|
||||
sFuture.set(compilationStatus);
|
||||
return sCompilationStatus;
|
||||
}
|
||||
|
||||
private static long getPackageLastUpdateTime(Context context) throws PackageManager.NameNotFoundException {
|
||||
PackageManager packageManager = context.getApplicationContext().getPackageManager();
|
||||
if (Build.VERSION.SDK_INT >= 33) {
|
||||
return Api33Impl.getPackageInfo(packageManager, context).lastUpdateTime;
|
||||
}
|
||||
return packageManager.getPackageInfo(context.getPackageName(), 0).lastUpdateTime;
|
||||
}
|
||||
|
||||
static class Cache {
|
||||
private static final int SCHEMA = 1;
|
||||
final long mInstalledCurrentProfileSize;
|
||||
final long mPackageLastUpdateTime;
|
||||
final int mResultCode;
|
||||
final int mSchema;
|
||||
|
||||
Cache(int i, int i2, long j, long j2) {
|
||||
this.mSchema = i;
|
||||
this.mResultCode = i2;
|
||||
this.mPackageLastUpdateTime = j;
|
||||
this.mInstalledCurrentProfileSize = j2;
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null || !(obj instanceof Cache)) {
|
||||
return false;
|
||||
}
|
||||
Cache cache = (Cache) obj;
|
||||
return this.mResultCode == cache.mResultCode && this.mPackageLastUpdateTime == cache.mPackageLastUpdateTime && this.mSchema == cache.mSchema && this.mInstalledCurrentProfileSize == cache.mInstalledCurrentProfileSize;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return Objects.hash(Integer.valueOf(this.mResultCode), Long.valueOf(this.mPackageLastUpdateTime), Integer.valueOf(this.mSchema), Long.valueOf(this.mInstalledCurrentProfileSize));
|
||||
}
|
||||
|
||||
void writeOnFile(File file) throws IOException {
|
||||
file.delete();
|
||||
DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(file));
|
||||
try {
|
||||
dataOutputStream.writeInt(this.mSchema);
|
||||
dataOutputStream.writeInt(this.mResultCode);
|
||||
dataOutputStream.writeLong(this.mPackageLastUpdateTime);
|
||||
dataOutputStream.writeLong(this.mInstalledCurrentProfileSize);
|
||||
dataOutputStream.close();
|
||||
} catch (Throwable th) {
|
||||
try {
|
||||
dataOutputStream.close();
|
||||
} catch (Throwable th2) {
|
||||
th.addSuppressed(th2);
|
||||
}
|
||||
throw th;
|
||||
}
|
||||
}
|
||||
|
||||
static Cache readFromFile(File file) throws IOException {
|
||||
DataInputStream dataInputStream = new DataInputStream(new FileInputStream(file));
|
||||
try {
|
||||
Cache cache = new Cache(dataInputStream.readInt(), dataInputStream.readInt(), dataInputStream.readLong(), dataInputStream.readLong());
|
||||
dataInputStream.close();
|
||||
return cache;
|
||||
} catch (Throwable th) {
|
||||
try {
|
||||
dataInputStream.close();
|
||||
} catch (Throwable th2) {
|
||||
th.addSuppressed(th2);
|
||||
}
|
||||
throw th;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class CompilationStatus {
|
||||
public static final int RESULT_CODE_COMPILED_WITH_PROFILE = 1;
|
||||
public static final int RESULT_CODE_COMPILED_WITH_PROFILE_NON_MATCHING = 3;
|
||||
public static final int RESULT_CODE_ERROR_CACHE_FILE_EXISTS_BUT_CANNOT_BE_READ = 131072;
|
||||
public static final int RESULT_CODE_ERROR_CANT_WRITE_PROFILE_VERIFICATION_RESULT_CACHE_FILE = 196608;
|
||||
private static final int RESULT_CODE_ERROR_CODE_BIT_SHIFT = 16;
|
||||
public static final int RESULT_CODE_ERROR_PACKAGE_NAME_DOES_NOT_EXIST = 65536;
|
||||
public static final int RESULT_CODE_ERROR_UNSUPPORTED_API_VERSION = 262144;
|
||||
public static final int RESULT_CODE_NO_PROFILE = 0;
|
||||
public static final int RESULT_CODE_PROFILE_ENQUEUED_FOR_COMPILATION = 2;
|
||||
private final boolean mHasCurrentProfile;
|
||||
private final boolean mHasReferenceProfile;
|
||||
final int mResultCode;
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface ResultCode {
|
||||
}
|
||||
|
||||
public int getProfileInstallResultCode() {
|
||||
return this.mResultCode;
|
||||
}
|
||||
|
||||
public boolean hasProfileEnqueuedForCompilation() {
|
||||
return this.mHasCurrentProfile;
|
||||
}
|
||||
|
||||
public boolean isCompiledWithProfile() {
|
||||
return this.mHasReferenceProfile;
|
||||
}
|
||||
|
||||
CompilationStatus(int i, boolean z, boolean z2) {
|
||||
this.mResultCode = i;
|
||||
this.mHasCurrentProfile = z2;
|
||||
this.mHasReferenceProfile = z;
|
||||
}
|
||||
}
|
||||
|
||||
private static class Api33Impl {
|
||||
private Api33Impl() {
|
||||
}
|
||||
|
||||
static PackageInfo getPackageInfo(PackageManager packageManager, Context context) throws PackageManager.NameNotFoundException {
|
||||
return packageManager.getPackageInfo(context.getPackageName(), PackageManager.PackageInfoFlags.of(0L));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user