* commit '33d3c53da021f0d044028860ace0f4ad817273f5': Move hidden ApplicationInfo flags into a separate field.
This commit is contained in:
@@ -333,44 +333,6 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
*/
|
||||
public static final int FLAG_FULL_BACKUP_ONLY = 1<<26;
|
||||
|
||||
/**
|
||||
* Value for {@link #flags}: true if the application is hidden via restrictions and for
|
||||
* most purposes is considered as not installed.
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int FLAG_HIDDEN = 1<<27;
|
||||
|
||||
/**
|
||||
* Value for {@link #flags}: set to <code>true</code> if the application
|
||||
* has reported that it is heavy-weight, and thus can not participate in
|
||||
* the normal application lifecycle.
|
||||
*
|
||||
* <p>Comes from the
|
||||
* android.R.styleable#AndroidManifestApplication_cantSaveState
|
||||
* attribute of the <application> tag.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int FLAG_CANT_SAVE_STATE = 1<<28;
|
||||
|
||||
/**
|
||||
* Value for {@link #flags}: Set to true if the application has been
|
||||
* installed using the forward lock option.
|
||||
*
|
||||
* NOTE: DO NOT CHANGE THIS VALUE! It is saved in packages.xml.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int FLAG_FORWARD_LOCK = 1<<29;
|
||||
|
||||
/**
|
||||
* Value for {@link #flags}: set to {@code true} if the application
|
||||
* is permitted to hold privileged permissions.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int FLAG_PRIVILEGED = 1<<30;
|
||||
|
||||
/**
|
||||
* Value for {@link #flags}: true if code from this application will need to be
|
||||
* loaded into other applications' processes. On devices that support multiple
|
||||
@@ -395,10 +357,59 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
* {@link #FLAG_SUPPORTS_LARGE_SCREENS}, {@link #FLAG_SUPPORTS_XLARGE_SCREENS},
|
||||
* {@link #FLAG_RESIZEABLE_FOR_SCREENS},
|
||||
* {@link #FLAG_SUPPORTS_SCREEN_DENSITIES}, {@link #FLAG_VM_SAFE_MODE},
|
||||
* {@link #FLAG_INSTALLED}, {@link #FLAG_IS_GAME}.
|
||||
* {@link #FLAG_ALLOW_BACKUP}, {@link #FLAG_KILL_AFTER_RESTORE},
|
||||
* {@link #FLAG_RESTORE_ANY_VERSION}, {@link #FLAG_EXTERNAL_STORAGE},
|
||||
* {@link #FLAG_LARGE_HEAP}, {@link #FLAG_STOPPED},
|
||||
* {@link #FLAG_SUPPORTS_RTL}, {@link #FLAG_INSTALLED},
|
||||
* {@link #FLAG_IS_DATA_ONLY}, {@link #FLAG_IS_GAME},
|
||||
* {@link #FLAG_FULL_BACKUP_ONLY}, {@link #FLAG_MULTIARCH}.
|
||||
*/
|
||||
public int flags = 0;
|
||||
|
||||
/**
|
||||
* Value for {@link #privateFlags}: true if the application is hidden via restrictions and for
|
||||
* most purposes is considered as not installed.
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_HIDDEN = 1<<0;
|
||||
|
||||
/**
|
||||
* Value for {@link #privateFlags}: set to <code>true</code> if the application
|
||||
* has reported that it is heavy-weight, and thus can not participate in
|
||||
* the normal application lifecycle.
|
||||
*
|
||||
* <p>Comes from the
|
||||
* android.R.styleable#AndroidManifestApplication_cantSaveState
|
||||
* attribute of the <application> tag.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_CANT_SAVE_STATE = 1<<1;
|
||||
|
||||
/**
|
||||
* Value for {@link #privateFlags}: Set to true if the application has been
|
||||
* installed using the forward lock option.
|
||||
*
|
||||
* NOTE: DO NOT CHANGE THIS VALUE! It is saved in packages.xml.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_FORWARD_LOCK = 1<<2;
|
||||
|
||||
/**
|
||||
* Value for {@link #privateFlags}: set to {@code true} if the application
|
||||
* is permitted to hold privileged permissions.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_PRIVILEGED = 1<<3;
|
||||
|
||||
/**
|
||||
* Private/hidden flags. See {@code PRIVATE_FLAG_...} constants.
|
||||
* {@hide}
|
||||
*/
|
||||
public int privateFlags;
|
||||
|
||||
/**
|
||||
* The required smallest screen width the application can run on. If 0,
|
||||
* nothing has been specified. Comes from
|
||||
@@ -598,6 +609,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
pw.println(prefix + "processName=" + processName);
|
||||
pw.println(prefix + "taskAffinity=" + taskAffinity);
|
||||
pw.println(prefix + "uid=" + uid + " flags=0x" + Integer.toHexString(flags)
|
||||
+ " privateFlags=0x" + Integer.toHexString(privateFlags)
|
||||
+ " theme=0x" + Integer.toHexString(theme));
|
||||
pw.println(prefix + "requiresSmallestWidthDp=" + requiresSmallestWidthDp
|
||||
+ " compatibleWidthLimitDp=" + compatibleWidthLimitDp
|
||||
@@ -680,6 +692,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
className = orig.className;
|
||||
theme = orig.theme;
|
||||
flags = orig.flags;
|
||||
privateFlags = orig.privateFlags;
|
||||
requiresSmallestWidthDp = orig.requiresSmallestWidthDp;
|
||||
compatibleWidthLimitDp = orig.compatibleWidthLimitDp;
|
||||
largestWidthLimitDp = orig.largestWidthLimitDp;
|
||||
@@ -730,6 +743,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
dest.writeString(className);
|
||||
dest.writeInt(theme);
|
||||
dest.writeInt(flags);
|
||||
dest.writeInt(privateFlags);
|
||||
dest.writeInt(requiresSmallestWidthDp);
|
||||
dest.writeInt(compatibleWidthLimitDp);
|
||||
dest.writeInt(largestWidthLimitDp);
|
||||
@@ -779,6 +793,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
||||
className = source.readString();
|
||||
theme = source.readInt();
|
||||
flags = source.readInt();
|
||||
privateFlags = source.readInt();
|
||||
requiresSmallestWidthDp = source.readInt();
|
||||
compatibleWidthLimitDp = source.readInt();
|
||||
largestWidthLimitDp = source.readInt();
|
||||
|
||||
@@ -111,6 +111,8 @@ interface IPackageManager {
|
||||
|
||||
int getFlagsForUid(int uid);
|
||||
|
||||
int getPrivateFlagsForUid(int uid);
|
||||
|
||||
boolean isUidPrivileged(int uid);
|
||||
|
||||
String[] getAppOpPermissionPackages(String permissionName);
|
||||
|
||||
@@ -800,6 +800,7 @@ public class PackageParser {
|
||||
pkg.splitCodePaths = lite.splitCodePaths;
|
||||
pkg.splitRevisionCodes = lite.splitRevisionCodes;
|
||||
pkg.splitFlags = new int[num];
|
||||
pkg.splitPrivateFlags = new int[num];
|
||||
|
||||
for (int i = 0; i < num; i++) {
|
||||
parseSplitApk(pkg, i, assets, flags);
|
||||
@@ -1405,7 +1406,7 @@ public class PackageParser {
|
||||
|
||||
/* Set the global "forward lock" flag */
|
||||
if ((flags & PARSE_FORWARD_LOCK) != 0) {
|
||||
pkg.applicationInfo.flags |= ApplicationInfo.FLAG_FORWARD_LOCK;
|
||||
pkg.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK;
|
||||
}
|
||||
|
||||
/* Set the global "on SD card" flag */
|
||||
@@ -2608,7 +2609,7 @@ public class PackageParser {
|
||||
if (sa.getBoolean(
|
||||
com.android.internal.R.styleable.AndroidManifestApplication_cantSaveState,
|
||||
false)) {
|
||||
ai.flags |= ApplicationInfo.FLAG_CANT_SAVE_STATE;
|
||||
ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE;
|
||||
|
||||
// A heavy-weight application can not be in a custom process.
|
||||
// We can do direct compare because we intern all strings.
|
||||
@@ -3136,7 +3137,8 @@ public class PackageParser {
|
||||
|
||||
sa.recycle();
|
||||
|
||||
if (receiver && (owner.applicationInfo.flags&ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) {
|
||||
if (receiver && (owner.applicationInfo.privateFlags
|
||||
&ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0) {
|
||||
// A heavy-weight application can not have receives in its main process
|
||||
// We can do direct compare because we intern all strings.
|
||||
if (a.info.processName == owner.packageName) {
|
||||
@@ -3489,7 +3491,8 @@ public class PackageParser {
|
||||
|
||||
sa.recycle();
|
||||
|
||||
if ((owner.applicationInfo.flags&ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) {
|
||||
if ((owner.applicationInfo.privateFlags&ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE)
|
||||
!= 0) {
|
||||
// A heavy-weight application can not have providers in its main process
|
||||
// We can do direct compare because we intern all strings.
|
||||
if (p.info.processName == owner.packageName) {
|
||||
@@ -3768,7 +3771,8 @@ public class PackageParser {
|
||||
|
||||
sa.recycle();
|
||||
|
||||
if ((owner.applicationInfo.flags&ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) {
|
||||
if ((owner.applicationInfo.privateFlags&ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE)
|
||||
!= 0) {
|
||||
// A heavy-weight application can not have services in its main process
|
||||
// We can do direct compare because we intern all strings.
|
||||
if (s.info.processName == owner.packageName) {
|
||||
@@ -4186,6 +4190,13 @@ public class PackageParser {
|
||||
/** Flags of any split APKs; ordered by parsed splitName */
|
||||
public int[] splitFlags;
|
||||
|
||||
/**
|
||||
* Private flags of any split APKs; ordered by parsed splitName.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public int[] splitPrivateFlags;
|
||||
|
||||
public boolean baseHardwareAccelerated;
|
||||
|
||||
// For now we only support one application per package.
|
||||
@@ -4621,9 +4632,9 @@ public class PackageParser {
|
||||
ai.flags &= ~ApplicationInfo.FLAG_INSTALLED;
|
||||
}
|
||||
if (state.hidden) {
|
||||
ai.flags |= ApplicationInfo.FLAG_HIDDEN;
|
||||
ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_HIDDEN;
|
||||
} else {
|
||||
ai.flags &= ~ApplicationInfo.FLAG_HIDDEN;
|
||||
ai.privateFlags &= ~ApplicationInfo.PRIVATE_FLAG_HIDDEN;
|
||||
}
|
||||
if (state.enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
|
||||
ai.enabled = true;
|
||||
|
||||
@@ -104,7 +104,7 @@ public class KeyphraseEnrollmentInfo {
|
||||
try {
|
||||
ai = pm.getApplicationInfo(
|
||||
ri.activityInfo.packageName, PackageManager.GET_META_DATA);
|
||||
if ((ai.flags & ApplicationInfo.FLAG_PRIVILEGED) == 0) {
|
||||
if ((ai.privateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) == 0) {
|
||||
// The application isn't privileged (/system/priv-app).
|
||||
// The enrollment application needs to be a privileged system app.
|
||||
Slog.w(TAG, ai.packageName + "is not a privileged system app");
|
||||
|
||||
Reference in New Issue
Block a user