Merge "Skip no-state checkUseInstalled check inside PackageInfoUtils" into rvc-dev am: a57109b660
Change-Id: I348d2ea20a6a2f5f8b122349ca7a36c3d93cc771
This commit is contained in:
@@ -40,11 +40,6 @@ import android.content.pm.SELinuxUtil;
|
|||||||
import android.content.pm.ServiceInfo;
|
import android.content.pm.ServiceInfo;
|
||||||
import android.content.pm.Signature;
|
import android.content.pm.Signature;
|
||||||
import android.content.pm.SigningInfo;
|
import android.content.pm.SigningInfo;
|
||||||
import android.content.pm.parsing.ParsingPackage;
|
|
||||||
import android.os.Environment;
|
|
||||||
import android.os.UserHandle;
|
|
||||||
|
|
||||||
import com.android.internal.util.ArrayUtils;
|
|
||||||
import android.content.pm.parsing.component.ComponentParseUtils;
|
import android.content.pm.parsing.component.ComponentParseUtils;
|
||||||
import android.content.pm.parsing.component.ParsedActivity;
|
import android.content.pm.parsing.component.ParsedActivity;
|
||||||
import android.content.pm.parsing.component.ParsedComponent;
|
import android.content.pm.parsing.component.ParsedComponent;
|
||||||
@@ -54,6 +49,10 @@ import android.content.pm.parsing.component.ParsedPermission;
|
|||||||
import android.content.pm.parsing.component.ParsedPermissionGroup;
|
import android.content.pm.parsing.component.ParsedPermissionGroup;
|
||||||
import android.content.pm.parsing.component.ParsedProvider;
|
import android.content.pm.parsing.component.ParsedProvider;
|
||||||
import android.content.pm.parsing.component.ParsedService;
|
import android.content.pm.parsing.component.ParsedService;
|
||||||
|
import android.os.Environment;
|
||||||
|
import android.os.UserHandle;
|
||||||
|
|
||||||
|
import com.android.internal.util.ArrayUtils;
|
||||||
|
|
||||||
import libcore.util.EmptyArray;
|
import libcore.util.EmptyArray;
|
||||||
|
|
||||||
@@ -186,6 +185,22 @@ public class PackageInfoWithoutStateUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return generateWithoutComponentsUnchecked(pkg, gids, flags, firstInstallTime,
|
||||||
|
lastUpdateTime, grantedPermissions, state, userId, apexInfo, applicationInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This bypasses critical checks that are necessary for usage with data passed outside of
|
||||||
|
* system server.
|
||||||
|
*
|
||||||
|
* Prefer {@link #generateWithoutComponents(ParsingPackageRead, int[], int, long, long, Set,
|
||||||
|
* PackageUserState, int, ApexInfo, ApplicationInfo)}.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static PackageInfo generateWithoutComponentsUnchecked(ParsingPackageRead pkg, int[] gids,
|
||||||
|
@PackageManager.PackageInfoFlags int flags, long firstInstallTime, long lastUpdateTime,
|
||||||
|
Set<String> grantedPermissions, PackageUserState state, int userId,
|
||||||
|
@Nullable ApexInfo apexInfo, @NonNull ApplicationInfo applicationInfo) {
|
||||||
PackageInfo pi = new PackageInfo();
|
PackageInfo pi = new PackageInfo();
|
||||||
pi.packageName = pkg.getPackageName();
|
pi.packageName = pkg.getPackageName();
|
||||||
pi.splitNames = pkg.getSplitNames();
|
pi.splitNames = pkg.getSplitNames();
|
||||||
@@ -317,6 +332,18 @@ public class PackageInfoWithoutStateUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return generateApplicationInfoUnchecked(pkg, flags, state, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This bypasses critical checks that are necessary for usage with data passed outside of
|
||||||
|
* system server.
|
||||||
|
*
|
||||||
|
* Prefer {@link #generateApplicationInfo(ParsingPackageRead, int, PackageUserState, int)}.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static ApplicationInfo generateApplicationInfoUnchecked(@NonNull ParsingPackageRead pkg,
|
||||||
|
@PackageManager.ApplicationInfoFlags int flags, PackageUserState state, int userId) {
|
||||||
// Make shallow copy so we can store the metadata/libraries safely
|
// Make shallow copy so we can store the metadata/libraries safely
|
||||||
ApplicationInfo ai = pkg.toAppInfoWithoutState();
|
ApplicationInfo ai = pkg.toAppInfoWithoutState();
|
||||||
// Init handles data directories
|
// Init handles data directories
|
||||||
@@ -378,6 +405,23 @@ public class PackageInfoWithoutStateUtils {
|
|||||||
if (applicationInfo == null) {
|
if (applicationInfo == null) {
|
||||||
applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
|
applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
|
||||||
}
|
}
|
||||||
|
if (applicationInfo == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return generateActivityInfoUnchecked(a, applicationInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This bypasses critical checks that are necessary for usage with data passed outside of
|
||||||
|
* system server.
|
||||||
|
*
|
||||||
|
* Prefer {@link #generateActivityInfo(ParsingPackageRead, ParsedActivity, int,
|
||||||
|
* PackageUserState, ApplicationInfo, int)}.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static ActivityInfo generateActivityInfoUnchecked(@NonNull ParsedActivity a,
|
||||||
|
@NonNull ApplicationInfo applicationInfo) {
|
||||||
// Make shallow copies so we can store the metadata safely
|
// Make shallow copies so we can store the metadata safely
|
||||||
ActivityInfo ai = new ActivityInfo();
|
ActivityInfo ai = new ActivityInfo();
|
||||||
assignSharedFieldsForComponentInfo(ai, a);
|
assignSharedFieldsForComponentInfo(ai, a);
|
||||||
@@ -431,6 +475,23 @@ public class PackageInfoWithoutStateUtils {
|
|||||||
if (applicationInfo == null) {
|
if (applicationInfo == null) {
|
||||||
applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
|
applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
|
||||||
}
|
}
|
||||||
|
if (applicationInfo == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return generateServiceInfoUnchecked(s, applicationInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This bypasses critical checks that are necessary for usage with data passed outside of
|
||||||
|
* system server.
|
||||||
|
*
|
||||||
|
* Prefer {@link #generateServiceInfo(ParsingPackageRead, ParsedService, int, PackageUserState,
|
||||||
|
* ApplicationInfo, int)}.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static ServiceInfo generateServiceInfoUnchecked(@NonNull ParsedService s,
|
||||||
|
@NonNull ApplicationInfo applicationInfo) {
|
||||||
// Make shallow copies so we can store the metadata safely
|
// Make shallow copies so we can store the metadata safely
|
||||||
ServiceInfo si = new ServiceInfo();
|
ServiceInfo si = new ServiceInfo();
|
||||||
assignSharedFieldsForComponentInfo(si, s);
|
assignSharedFieldsForComponentInfo(si, s);
|
||||||
@@ -461,6 +522,24 @@ public class PackageInfoWithoutStateUtils {
|
|||||||
if (applicationInfo == null) {
|
if (applicationInfo == null) {
|
||||||
applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
|
applicationInfo = generateApplicationInfo(pkg, flags, state, userId);
|
||||||
}
|
}
|
||||||
|
if (applicationInfo == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return generateProviderInfoUnchecked(p, flags, applicationInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This bypasses critical checks that are necessary for usage with data passed outside of
|
||||||
|
* system server.
|
||||||
|
*
|
||||||
|
* Prefer {@link #generateProviderInfo(ParsingPackageRead, ParsedProvider, int,
|
||||||
|
* PackageUserState, ApplicationInfo, int)}.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static ProviderInfo generateProviderInfoUnchecked(@NonNull ParsedProvider p,
|
||||||
|
@PackageManager.ComponentInfoFlags int flags,
|
||||||
|
@NonNull ApplicationInfo applicationInfo) {
|
||||||
// Make shallow copies so we can store the metadata safely
|
// Make shallow copies so we can store the metadata safely
|
||||||
ProviderInfo pi = new ProviderInfo();
|
ProviderInfo pi = new ProviderInfo();
|
||||||
assignSharedFieldsForComponentInfo(pi, p);
|
assignSharedFieldsForComponentInfo(pi, p);
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ import libcore.util.EmptyArray;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
@@ -110,12 +109,9 @@ public class PackageInfoUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
PackageInfo info = PackageInfoWithoutStateUtils.generateWithoutComponents(pkg, gids, flags,
|
PackageInfo info = PackageInfoWithoutStateUtils.generateWithoutComponentsUnchecked(pkg,
|
||||||
firstInstallTime, lastUpdateTime, grantedPermissions, state, userId, apexInfo,
|
gids, flags, firstInstallTime, lastUpdateTime, grantedPermissions, state, userId,
|
||||||
applicationInfo);
|
apexInfo, applicationInfo);
|
||||||
if (info == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
info.isStub = pkg.isStub();
|
info.isStub = pkg.isStub();
|
||||||
info.coreApp = pkg.isCoreApp();
|
info.coreApp = pkg.isCoreApp();
|
||||||
@@ -220,11 +216,8 @@ public class PackageInfoUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplicationInfo info = PackageInfoWithoutStateUtils.generateApplicationInfo(pkg, flags,
|
ApplicationInfo info = PackageInfoWithoutStateUtils.generateApplicationInfoUnchecked(pkg,
|
||||||
state, userId);
|
flags, state, userId);
|
||||||
if (info == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pkgSetting != null) {
|
if (pkgSetting != null) {
|
||||||
// TODO(b/135203078): Remove PackageParser1/toAppInfoWithoutState and clean all this up
|
// TODO(b/135203078): Remove PackageParser1/toAppInfoWithoutState and clean all this up
|
||||||
@@ -267,12 +260,13 @@ public class PackageInfoUtils {
|
|||||||
if (applicationInfo == null) {
|
if (applicationInfo == null) {
|
||||||
applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting);
|
applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting);
|
||||||
}
|
}
|
||||||
ActivityInfo info = PackageInfoWithoutStateUtils.generateActivityInfo(pkg, a, flags, state,
|
|
||||||
applicationInfo, userId);
|
if (applicationInfo == null) {
|
||||||
if (info == null) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ActivityInfo info =
|
||||||
|
PackageInfoWithoutStateUtils.generateActivityInfoUnchecked(a, applicationInfo);
|
||||||
assignSharedFieldsForComponentInfo(info, a, pkgSetting);
|
assignSharedFieldsForComponentInfo(info, a, pkgSetting);
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
@@ -302,12 +296,12 @@ public class PackageInfoUtils {
|
|||||||
if (applicationInfo == null) {
|
if (applicationInfo == null) {
|
||||||
applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting);
|
applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting);
|
||||||
}
|
}
|
||||||
ServiceInfo info = PackageInfoWithoutStateUtils.generateServiceInfo(pkg, s, flags, state,
|
if (applicationInfo == null) {
|
||||||
applicationInfo, userId);
|
|
||||||
if (info == null) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ServiceInfo info =
|
||||||
|
PackageInfoWithoutStateUtils.generateServiceInfoUnchecked(s, applicationInfo);
|
||||||
assignSharedFieldsForComponentInfo(info, s, pkgSetting);
|
assignSharedFieldsForComponentInfo(info, s, pkgSetting);
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
@@ -321,21 +315,20 @@ public class PackageInfoUtils {
|
|||||||
@NonNull ApplicationInfo applicationInfo, int userId,
|
@NonNull ApplicationInfo applicationInfo, int userId,
|
||||||
@Nullable PackageSetting pkgSetting) {
|
@Nullable PackageSetting pkgSetting) {
|
||||||
if (p == null) return null;
|
if (p == null) return null;
|
||||||
|
if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (applicationInfo == null || !pkg.getPackageName().equals(applicationInfo.packageName)) {
|
if (applicationInfo == null || !pkg.getPackageName().equals(applicationInfo.packageName)) {
|
||||||
Slog.wtf(TAG, "AppInfo's package name is different. Expected=" + pkg.getPackageName()
|
Slog.wtf(TAG, "AppInfo's package name is different. Expected=" + pkg.getPackageName()
|
||||||
+ " actual=" + (applicationInfo == null ? "(null AppInfo)"
|
+ " actual=" + (applicationInfo == null ? "(null AppInfo)"
|
||||||
: applicationInfo.packageName));
|
: applicationInfo.packageName));
|
||||||
applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting);
|
applicationInfo = generateApplicationInfo(pkg, flags, state, userId, pkgSetting);
|
||||||
}
|
}
|
||||||
if (!checkUseInstalledOrHidden(pkg, pkgSetting, state, flags)) {
|
if (applicationInfo == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
ProviderInfo info = PackageInfoWithoutStateUtils.generateProviderInfo(pkg, p, flags, state,
|
ProviderInfo info = PackageInfoWithoutStateUtils.generateProviderInfoUnchecked(p, flags,
|
||||||
applicationInfo, userId);
|
applicationInfo);
|
||||||
if (info == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
assignSharedFieldsForComponentInfo(info, p, pkgSetting);
|
assignSharedFieldsForComponentInfo(info, p, pkgSetting);
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user