Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ff0f9ea authored by Patrick Baumann's avatar Patrick Baumann
Browse files

Allows forceQueryable to be set on install

This change adds a --force-queryable flag to adb install to allow, for
development and testing purposes, the ability to install a package so it
is visible to all other packages on the device.

Bug: 142386643
Test: atest AppEnumerationTests
Change-Id: Id793ac39a4dfb022fc5e4c0c1230a3da77bf41c6
parent 9558ea30
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -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) {
@@ -2475,6 +2492,14 @@ public class PackageInstaller {
            return rollbackDataPolicy;
        }

        /**
         * 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.
         *
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -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())));
+7 −0
Original line number Diff line number Diff line
@@ -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,
+12 −3
Original line number Diff line number Diff line
@@ -10570,6 +10570,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.
@@ -14063,6 +14067,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,
@@ -14084,6 +14089,7 @@ public class PackageManagerService extends IPackageManager.Stub
            this.signingDetails = signingDetails;
            this.installReason = installReason;
            this.requiredInstalledVersionCode = requiredInstalledVersionCode;
            this.forceQueryableOverride = false;
        }
        InstallParams(ActiveInstallSession activeInstallSession) {
@@ -14117,6 +14123,7 @@ public class PackageManagerService extends IPackageManager.Stub
            signingDetails = activeInstallSession.getSigningDetails();
            requiredInstalledVersionCode = activeInstallSession.getSessionParams()
                    .requiredInstalledVersionCode;
            forceQueryableOverride = activeInstallSession.getSessionParams().forceQueryableOverride;
        }
        @Override
@@ -14717,6 +14724,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
@@ -14730,7 +14738,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;
@@ -14747,6 +14755,7 @@ public class PackageManagerService extends IPackageManager.Stub
            this.traceCookie = traceCookie;
            this.signingDetails = signingDetails;
            this.installReason = installReason;
            this.forceQueryableOverride = forceQueryableOverride;
            this.mMultiPackageInstallParams = multiPackageInstallParams;
        }
@@ -14757,7 +14766,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();
@@ -14848,7 +14857,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;
        }
+3 −0
Original line number Diff line number Diff line
@@ -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
Loading