summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-02-04 01:55:44 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-02-04 01:55:44 +0000
commit99e390e9af80fc10f651bbf1dd78ed19737cf4c0 (patch)
tree24e2aa1d970405eaf7b3e0196c864ed5b0af2949
parentc250524f4a473175f3aef4fdeae81fa648d333d6 (diff)
parent5ff0f9ea6af2d8847f3fba62415c0e1c431628af (diff)
Merge "Allows forceQueryable to be set on install"
-rw-r--r--core/java/android/content/pm/PackageInstaller.java26
-rw-r--r--services/core/java/com/android/server/pm/AppsFilter.java1
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerService.java7
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java15
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerShellCommand.java3
-rw-r--r--services/core/java/com/android/server/pm/PackageSettingBase.java5
-rw-r--r--services/core/java/com/android/server/pm/Settings.java6
7 files changed, 59 insertions, 4 deletions
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index b1b9454aeddd..2acbb97cb20a 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -1467,6 +1467,8 @@ public class PackageInstaller {
public DataLoaderParams dataLoaderParams;
/** {@hide} */
public int rollbackDataPolicy = PackageManager.RollbackDataPolicy.RESTORE;
+ /** {@hide} */
+ public boolean forceQueryableOverride;
/**
* Construct parameters for a new package install session.
@@ -1499,6 +1501,7 @@ public class PackageInstaller {
installerPackageName = source.readString();
isMultiPackage = source.readBoolean();
isStaged = source.readBoolean();
+ forceQueryableOverride = source.readBoolean();
requiredInstalledVersionCode = source.readLong();
DataLoaderParamsParcel dataLoaderParamsParcel = source.readParcelable(
DataLoaderParamsParcel.class.getClassLoader());
@@ -1528,6 +1531,7 @@ public class PackageInstaller {
ret.installerPackageName = installerPackageName;
ret.isMultiPackage = isMultiPackage;
ret.isStaged = isStaged;
+ ret.forceQueryableOverride = forceQueryableOverride;
ret.requiredInstalledVersionCode = requiredInstalledVersionCode;
ret.dataLoaderParams = dataLoaderParams;
ret.rollbackDataPolicy = rollbackDataPolicy;
@@ -1904,6 +1908,14 @@ public class PackageInstaller {
this.dataLoaderParams = dataLoaderParams;
}
+ /**
+ *
+ * {@hide}
+ */
+ public void setForceQueryable() {
+ this.forceQueryableOverride = true;
+ }
+
/** {@hide} */
public void dump(IndentingPrintWriter pw) {
pw.printPair("mode", mode);
@@ -1923,6 +1935,7 @@ public class PackageInstaller {
pw.printPair("installerPackageName", installerPackageName);
pw.printPair("isMultiPackage", isMultiPackage);
pw.printPair("isStaged", isStaged);
+ pw.printPair("forceQueryable", forceQueryableOverride);
pw.printPair("requiredInstalledVersionCode", requiredInstalledVersionCode);
pw.printPair("dataLoaderParams", dataLoaderParams);
pw.printPair("rollbackDataPolicy", rollbackDataPolicy);
@@ -1954,6 +1967,7 @@ public class PackageInstaller {
dest.writeString(installerPackageName);
dest.writeBoolean(isMultiPackage);
dest.writeBoolean(isStaged);
+ dest.writeBoolean(forceQueryableOverride);
dest.writeLong(requiredInstalledVersionCode);
if (dataLoaderParams != null) {
dest.writeParcelable(dataLoaderParams.getData(), flags);
@@ -2078,6 +2092,8 @@ public class PackageInstaller {
/** {@hide} */
public boolean isStaged;
/** {@hide} */
+ public boolean forceQueryable;
+ /** {@hide} */
public int parentSessionId = INVALID_ID;
/** {@hide} */
public int[] childSessionIds = NO_SESSIONS;
@@ -2135,6 +2151,7 @@ public class PackageInstaller {
installFlags = source.readInt();
isMultiPackage = source.readBoolean();
isStaged = source.readBoolean();
+ forceQueryable = source.readBoolean();
parentSessionId = source.readInt();
childSessionIds = source.createIntArray();
if (childSessionIds == null) {
@@ -2476,6 +2493,14 @@ public class PackageInstaller {
}
/**
+ * Returns true if this session is marked as forceQueryable
+ * {@hide}
+ */
+ public boolean isForceQueryable() {
+ return forceQueryable;
+ }
+
+ /**
* Returns {@code true} if this session is an active staged session.
*
* We consider a session active if it has been committed and it is either pending
@@ -2636,6 +2661,7 @@ public class PackageInstaller {
dest.writeInt(installFlags);
dest.writeBoolean(isMultiPackage);
dest.writeBoolean(isStaged);
+ dest.writeBoolean(forceQueryable);
dest.writeInt(parentSessionId);
dest.writeIntArray(childSessionIds);
dest.writeBoolean(isStagedSessionApplied);
diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java
index 89f24d86192c..3ad120705eb3 100644
--- a/services/core/java/com/android/server/pm/AppsFilter.java
+++ b/services/core/java/com/android/server/pm/AppsFilter.java
@@ -347,6 +347,7 @@ public class AppsFilter {
mForceQueryable.contains(newPkgSetting.appId)
/* shared user that is already force queryable */
|| newPkg.isForceQueryable()
+ || newPkgSetting.forceQueryableOverride
|| (newPkgSetting.isSystem() && (mSystemAppsQueryable
|| ArrayUtils.contains(mForceQueryableByDevicePackageNames,
newPkg.getPackageName())));
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index c17ad1119631..9116c4032ad5 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -635,6 +635,13 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
stageCid = buildExternalStageCid(sessionId);
}
}
+
+ // reset the force queryable param if it's not called by an approved caller.
+ if (params.forceQueryableOverride) {
+ if (callingUid != Process.SHELL_UID && callingUid != Process.ROOT_UID) {
+ params.forceQueryableOverride = false;
+ }
+ }
InstallSource installSource = InstallSource.create(installerPackageName,
originatingPackageName, requestedInstallerPackageName);
session = new PackageInstallerSession(mInternalCallback, mContext, mPm, this,
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index d6fd4d040352..c09fb38c4d8a 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -10572,6 +10572,10 @@ public class PackageManagerService extends IPackageManager.Stub
if (pkgSetting.sharedUser != null) {
pkgSetting.sharedUser.addPackage(pkgSetting);
}
+ if (reconciledPkg.installArgs != null && reconciledPkg.installArgs.forceQueryableOverride) {
+ pkgSetting.forceQueryableOverride = true;
+ }
+
// TODO(toddke): Consider a method specifically for modifying the Package object
// post scan; or, moving this stuff out of the Package object since it has nothing
// to do with the package on disk.
@@ -14065,6 +14069,7 @@ public class PackageManagerService extends IPackageManager.Stub
@Nullable
MultiPackageInstallParams mParentInstallParams;
final long requiredInstalledVersionCode;
+ final boolean forceQueryableOverride;
InstallParams(OriginInfo origin, MoveInfo move, IPackageInstallObserver2 observer,
int installFlags, InstallSource installSource, String volumeUuid,
@@ -14086,6 +14091,7 @@ public class PackageManagerService extends IPackageManager.Stub
this.signingDetails = signingDetails;
this.installReason = installReason;
this.requiredInstalledVersionCode = requiredInstalledVersionCode;
+ this.forceQueryableOverride = false;
}
InstallParams(ActiveInstallSession activeInstallSession) {
@@ -14119,6 +14125,7 @@ public class PackageManagerService extends IPackageManager.Stub
signingDetails = activeInstallSession.getSigningDetails();
requiredInstalledVersionCode = activeInstallSession.getSessionParams()
.requiredInstalledVersionCode;
+ forceQueryableOverride = activeInstallSession.getSessionParams().forceQueryableOverride;
}
@Override
@@ -14719,6 +14726,7 @@ public class PackageManagerService extends IPackageManager.Stub
final int traceCookie;
final PackageParser.SigningDetails signingDetails;
final int installReason;
+ final boolean forceQueryableOverride;
@Nullable final MultiPackageInstallParams mMultiPackageInstallParams;
// The list of instruction sets supported by this app. This is currently
@@ -14732,7 +14740,7 @@ public class PackageManagerService extends IPackageManager.Stub
String abiOverride, String[] installGrantPermissions,
List<String> whitelistedRestrictedPermissions,
String traceMethod, int traceCookie, SigningDetails signingDetails,
- int installReason,
+ int installReason, boolean forceQueryableOverride,
MultiPackageInstallParams multiPackageInstallParams) {
this.origin = origin;
this.move = move;
@@ -14749,6 +14757,7 @@ public class PackageManagerService extends IPackageManager.Stub
this.traceCookie = traceCookie;
this.signingDetails = signingDetails;
this.installReason = installReason;
+ this.forceQueryableOverride = forceQueryableOverride;
this.mMultiPackageInstallParams = multiPackageInstallParams;
}
@@ -14759,7 +14768,7 @@ public class PackageManagerService extends IPackageManager.Stub
params.getUser(), null /*instructionSets*/, params.packageAbiOverride,
params.grantedRuntimePermissions, params.whitelistedRestrictedPermissions,
params.traceMethod, params.traceCookie, params.signingDetails,
- params.installReason, params.mParentInstallParams);
+ params.installReason, params.forceQueryableOverride, params.mParentInstallParams);
}
abstract int copyApk();
@@ -14850,7 +14859,7 @@ public class PackageManagerService extends IPackageManager.Stub
super(OriginInfo.fromNothing(), null, null, 0, InstallSource.EMPTY,
null, null, instructionSets, null, null, null, null, 0,
PackageParser.SigningDetails.UNKNOWN,
- PackageManager.INSTALL_REASON_UNKNOWN, null /* parent */);
+ PackageManager.INSTALL_REASON_UNKNOWN, false, null /* parent */);
this.codeFile = (codePath != null) ? new File(codePath) : null;
this.resourceFile = (resourcePath != null) ? new File(resourcePath) : null;
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index e7f6b8982b04..bb69680fb9f9 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -2730,6 +2730,9 @@ class PackageManagerShellCommand extends ShellCommand {
case "--staged":
sessionParams.setStaged();
break;
+ case "--force-queryable":
+ sessionParams.setForceQueryable();
+ break;
case "--enable-rollback":
if (params.installerPackageName == null) {
// com.android.shell has the TEST_MANAGE_ROLLBACKS
diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java
index f1ac0afa5dfd..7d95b198d8ce 100644
--- a/services/core/java/com/android/server/pm/PackageSettingBase.java
+++ b/services/core/java/com/android/server/pm/PackageSettingBase.java
@@ -36,7 +36,6 @@ import android.util.SparseArray;
import android.util.proto.ProtoOutputStream;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.Preconditions;
import java.io.File;
import java.util.Arrays;
@@ -132,6 +131,8 @@ public abstract class PackageSettingBase extends SettingBase {
IntentFilterVerificationInfo verificationInfo;
+ boolean forceQueryableOverride;
+
PackageSettingBase(String name, String realName, File codePath, File resourcePath,
String legacyNativeLibraryPathString, String primaryCpuAbiString,
String secondaryCpuAbiString, String cpuAbiOverrideString,
@@ -261,6 +262,7 @@ public abstract class PackageSettingBase extends SettingBase {
? Arrays.copyOf(orig.usesStaticLibrariesVersions,
orig.usesStaticLibrariesVersions.length) : null;
updateAvailable = orig.updateAvailable;
+ forceQueryableOverride = orig.forceQueryableOverride;
}
@VisibleForTesting
@@ -693,6 +695,7 @@ public abstract class PackageSettingBase extends SettingBase {
this.categoryHint = other.categoryHint;
this.updateAvailable = other.updateAvailable;
this.verificationInfo = other.verificationInfo;
+ this.forceQueryableOverride = other.forceQueryableOverride;
if (mOldCodePaths != null) {
if (other.mOldCodePaths != null) {
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 5d948b24256a..fcd8e221a9e8 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -2836,6 +2836,9 @@ public final class Settings {
if (pkg.updateAvailable) {
serializer.attribute(null, "updateAvailable", "true");
}
+ if (pkg.forceQueryableOverride) {
+ serializer.attribute(null, "forceQueryable", "true");
+ }
writeUsesStaticLibLPw(serializer, pkg.usesStaticLibraries, pkg.usesStaticLibrariesVersions);
@@ -3599,6 +3602,7 @@ public final class Settings {
PackageSetting packageSetting = null;
String version = null;
long versionCode = 0;
+ String installedForceQueryable = null;
try {
name = parser.getAttributeValue(null, ATTR_NAME);
realName = parser.getAttributeValue(null, "realName");
@@ -3615,6 +3619,7 @@ public final class Settings {
secondaryCpuAbiString = parser.getAttributeValue(null, "secondaryCpuAbi");
cpuAbiOverrideString = parser.getAttributeValue(null, "cpuAbiOverride");
updateAvailable = parser.getAttributeValue(null, "updateAvailable");
+ installedForceQueryable = parser.getAttributeValue(null, "forceQueryable");
if (primaryCpuAbiString == null && legacyCpuAbiString != null) {
primaryCpuAbiString = legacyCpuAbiString;
@@ -3798,6 +3803,7 @@ public final class Settings {
packageSetting.primaryCpuAbiString = primaryCpuAbiString;
packageSetting.secondaryCpuAbiString = secondaryCpuAbiString;
packageSetting.updateAvailable = "true".equals(updateAvailable);
+ packageSetting.forceQueryableOverride = "true".equals(installedForceQueryable);
// Handle legacy string here for single-user mode
final String enabledStr = parser.getAttributeValue(null, ATTR_ENABLED);
if (enabledStr != null) {