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 Original line Diff line number Diff line
@@ -1467,6 +1467,8 @@ public class PackageInstaller {
        public DataLoaderParams dataLoaderParams;
        public DataLoaderParams dataLoaderParams;
        /** {@hide} */
        /** {@hide} */
        public int rollbackDataPolicy = PackageManager.RollbackDataPolicy.RESTORE;
        public int rollbackDataPolicy = PackageManager.RollbackDataPolicy.RESTORE;
        /** {@hide} */
        public boolean forceQueryableOverride;


        /**
        /**
         * Construct parameters for a new package install session.
         * Construct parameters for a new package install session.
@@ -1499,6 +1501,7 @@ public class PackageInstaller {
            installerPackageName = source.readString();
            installerPackageName = source.readString();
            isMultiPackage = source.readBoolean();
            isMultiPackage = source.readBoolean();
            isStaged = source.readBoolean();
            isStaged = source.readBoolean();
            forceQueryableOverride = source.readBoolean();
            requiredInstalledVersionCode = source.readLong();
            requiredInstalledVersionCode = source.readLong();
            DataLoaderParamsParcel dataLoaderParamsParcel = source.readParcelable(
            DataLoaderParamsParcel dataLoaderParamsParcel = source.readParcelable(
                    DataLoaderParamsParcel.class.getClassLoader());
                    DataLoaderParamsParcel.class.getClassLoader());
@@ -1528,6 +1531,7 @@ public class PackageInstaller {
            ret.installerPackageName = installerPackageName;
            ret.installerPackageName = installerPackageName;
            ret.isMultiPackage = isMultiPackage;
            ret.isMultiPackage = isMultiPackage;
            ret.isStaged = isStaged;
            ret.isStaged = isStaged;
            ret.forceQueryableOverride = forceQueryableOverride;
            ret.requiredInstalledVersionCode = requiredInstalledVersionCode;
            ret.requiredInstalledVersionCode = requiredInstalledVersionCode;
            ret.dataLoaderParams = dataLoaderParams;
            ret.dataLoaderParams = dataLoaderParams;
            ret.rollbackDataPolicy = rollbackDataPolicy;
            ret.rollbackDataPolicy = rollbackDataPolicy;
@@ -1904,6 +1908,14 @@ public class PackageInstaller {
            this.dataLoaderParams = dataLoaderParams;
            this.dataLoaderParams = dataLoaderParams;
        }
        }


        /**
         *
         * {@hide}
         */
        public void setForceQueryable() {
            this.forceQueryableOverride = true;
        }

        /** {@hide} */
        /** {@hide} */
        public void dump(IndentingPrintWriter pw) {
        public void dump(IndentingPrintWriter pw) {
            pw.printPair("mode", mode);
            pw.printPair("mode", mode);
@@ -1923,6 +1935,7 @@ public class PackageInstaller {
            pw.printPair("installerPackageName", installerPackageName);
            pw.printPair("installerPackageName", installerPackageName);
            pw.printPair("isMultiPackage", isMultiPackage);
            pw.printPair("isMultiPackage", isMultiPackage);
            pw.printPair("isStaged", isStaged);
            pw.printPair("isStaged", isStaged);
            pw.printPair("forceQueryable", forceQueryableOverride);
            pw.printPair("requiredInstalledVersionCode", requiredInstalledVersionCode);
            pw.printPair("requiredInstalledVersionCode", requiredInstalledVersionCode);
            pw.printPair("dataLoaderParams", dataLoaderParams);
            pw.printPair("dataLoaderParams", dataLoaderParams);
            pw.printPair("rollbackDataPolicy", rollbackDataPolicy);
            pw.printPair("rollbackDataPolicy", rollbackDataPolicy);
@@ -1954,6 +1967,7 @@ public class PackageInstaller {
            dest.writeString(installerPackageName);
            dest.writeString(installerPackageName);
            dest.writeBoolean(isMultiPackage);
            dest.writeBoolean(isMultiPackage);
            dest.writeBoolean(isStaged);
            dest.writeBoolean(isStaged);
            dest.writeBoolean(forceQueryableOverride);
            dest.writeLong(requiredInstalledVersionCode);
            dest.writeLong(requiredInstalledVersionCode);
            if (dataLoaderParams != null) {
            if (dataLoaderParams != null) {
                dest.writeParcelable(dataLoaderParams.getData(), flags);
                dest.writeParcelable(dataLoaderParams.getData(), flags);
@@ -2078,6 +2092,8 @@ public class PackageInstaller {
        /** {@hide} */
        /** {@hide} */
        public boolean isStaged;
        public boolean isStaged;
        /** {@hide} */
        /** {@hide} */
        public boolean forceQueryable;
        /** {@hide} */
        public int parentSessionId = INVALID_ID;
        public int parentSessionId = INVALID_ID;
        /** {@hide} */
        /** {@hide} */
        public int[] childSessionIds = NO_SESSIONS;
        public int[] childSessionIds = NO_SESSIONS;
@@ -2135,6 +2151,7 @@ public class PackageInstaller {
            installFlags = source.readInt();
            installFlags = source.readInt();
            isMultiPackage = source.readBoolean();
            isMultiPackage = source.readBoolean();
            isStaged = source.readBoolean();
            isStaged = source.readBoolean();
            forceQueryable = source.readBoolean();
            parentSessionId = source.readInt();
            parentSessionId = source.readInt();
            childSessionIds = source.createIntArray();
            childSessionIds = source.createIntArray();
            if (childSessionIds == null) {
            if (childSessionIds == null) {
@@ -2475,6 +2492,14 @@ public class PackageInstaller {
            return rollbackDataPolicy;
            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.
         * Returns {@code true} if this session is an active staged session.
         *
         *
@@ -2636,6 +2661,7 @@ public class PackageInstaller {
            dest.writeInt(installFlags);
            dest.writeInt(installFlags);
            dest.writeBoolean(isMultiPackage);
            dest.writeBoolean(isMultiPackage);
            dest.writeBoolean(isStaged);
            dest.writeBoolean(isStaged);
            dest.writeBoolean(forceQueryable);
            dest.writeInt(parentSessionId);
            dest.writeInt(parentSessionId);
            dest.writeIntArray(childSessionIds);
            dest.writeIntArray(childSessionIds);
            dest.writeBoolean(isStagedSessionApplied);
            dest.writeBoolean(isStagedSessionApplied);
+1 −0
Original line number Original line Diff line number Diff line
@@ -347,6 +347,7 @@ public class AppsFilter {
                    mForceQueryable.contains(newPkgSetting.appId)
                    mForceQueryable.contains(newPkgSetting.appId)
                            /* shared user that is already force queryable */
                            /* shared user that is already force queryable */
                            || newPkg.isForceQueryable()
                            || newPkg.isForceQueryable()
                            || newPkgSetting.forceQueryableOverride
                            || (newPkgSetting.isSystem() && (mSystemAppsQueryable
                            || (newPkgSetting.isSystem() && (mSystemAppsQueryable
                            || ArrayUtils.contains(mForceQueryableByDevicePackageNames,
                            || ArrayUtils.contains(mForceQueryableByDevicePackageNames,
                            newPkg.getPackageName())));
                            newPkg.getPackageName())));
+7 −0
Original line number Original line Diff line number Diff line
@@ -635,6 +635,13 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
                stageCid = buildExternalStageCid(sessionId);
                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,
        InstallSource installSource = InstallSource.create(installerPackageName,
                originatingPackageName, requestedInstallerPackageName);
                originatingPackageName, requestedInstallerPackageName);
        session = new PackageInstallerSession(mInternalCallback, mContext, mPm, this,
        session = new PackageInstallerSession(mInternalCallback, mContext, mPm, this,
+12 −3
Original line number Original line Diff line number Diff line
@@ -10570,6 +10570,10 @@ public class PackageManagerService extends IPackageManager.Stub
        if (pkgSetting.sharedUser != null) {
        if (pkgSetting.sharedUser != null) {
            pkgSetting.sharedUser.addPackage(pkgSetting);
            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
        // 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
        // post scan; or, moving this stuff out of the Package object since it has nothing
        // to do with the package on disk.
        // to do with the package on disk.
@@ -14063,6 +14067,7 @@ public class PackageManagerService extends IPackageManager.Stub
        @Nullable
        @Nullable
        MultiPackageInstallParams mParentInstallParams;
        MultiPackageInstallParams mParentInstallParams;
        final long requiredInstalledVersionCode;
        final long requiredInstalledVersionCode;
        final boolean forceQueryableOverride;
        InstallParams(OriginInfo origin, MoveInfo move, IPackageInstallObserver2 observer,
        InstallParams(OriginInfo origin, MoveInfo move, IPackageInstallObserver2 observer,
                int installFlags, InstallSource installSource, String volumeUuid,
                int installFlags, InstallSource installSource, String volumeUuid,
@@ -14084,6 +14089,7 @@ public class PackageManagerService extends IPackageManager.Stub
            this.signingDetails = signingDetails;
            this.signingDetails = signingDetails;
            this.installReason = installReason;
            this.installReason = installReason;
            this.requiredInstalledVersionCode = requiredInstalledVersionCode;
            this.requiredInstalledVersionCode = requiredInstalledVersionCode;
            this.forceQueryableOverride = false;
        }
        }
        InstallParams(ActiveInstallSession activeInstallSession) {
        InstallParams(ActiveInstallSession activeInstallSession) {
@@ -14117,6 +14123,7 @@ public class PackageManagerService extends IPackageManager.Stub
            signingDetails = activeInstallSession.getSigningDetails();
            signingDetails = activeInstallSession.getSigningDetails();
            requiredInstalledVersionCode = activeInstallSession.getSessionParams()
            requiredInstalledVersionCode = activeInstallSession.getSessionParams()
                    .requiredInstalledVersionCode;
                    .requiredInstalledVersionCode;
            forceQueryableOverride = activeInstallSession.getSessionParams().forceQueryableOverride;
        }
        }
        @Override
        @Override
@@ -14717,6 +14724,7 @@ public class PackageManagerService extends IPackageManager.Stub
        final int traceCookie;
        final int traceCookie;
        final PackageParser.SigningDetails signingDetails;
        final PackageParser.SigningDetails signingDetails;
        final int installReason;
        final int installReason;
        final boolean forceQueryableOverride;
        @Nullable final MultiPackageInstallParams mMultiPackageInstallParams;
        @Nullable final MultiPackageInstallParams mMultiPackageInstallParams;
        // The list of instruction sets supported by this app. This is currently
        // 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,
                String abiOverride, String[] installGrantPermissions,
                List<String> whitelistedRestrictedPermissions,
                List<String> whitelistedRestrictedPermissions,
                String traceMethod, int traceCookie, SigningDetails signingDetails,
                String traceMethod, int traceCookie, SigningDetails signingDetails,
                int installReason,
                int installReason, boolean forceQueryableOverride,
                MultiPackageInstallParams multiPackageInstallParams) {
                MultiPackageInstallParams multiPackageInstallParams) {
            this.origin = origin;
            this.origin = origin;
            this.move = move;
            this.move = move;
@@ -14747,6 +14755,7 @@ public class PackageManagerService extends IPackageManager.Stub
            this.traceCookie = traceCookie;
            this.traceCookie = traceCookie;
            this.signingDetails = signingDetails;
            this.signingDetails = signingDetails;
            this.installReason = installReason;
            this.installReason = installReason;
            this.forceQueryableOverride = forceQueryableOverride;
            this.mMultiPackageInstallParams = multiPackageInstallParams;
            this.mMultiPackageInstallParams = multiPackageInstallParams;
        }
        }
@@ -14757,7 +14766,7 @@ public class PackageManagerService extends IPackageManager.Stub
                    params.getUser(), null /*instructionSets*/, params.packageAbiOverride,
                    params.getUser(), null /*instructionSets*/, params.packageAbiOverride,
                    params.grantedRuntimePermissions, params.whitelistedRestrictedPermissions,
                    params.grantedRuntimePermissions, params.whitelistedRestrictedPermissions,
                    params.traceMethod, params.traceCookie, params.signingDetails,
                    params.traceMethod, params.traceCookie, params.signingDetails,
                    params.installReason, params.mParentInstallParams);
                    params.installReason, params.forceQueryableOverride, params.mParentInstallParams);
        }
        }
        abstract int copyApk();
        abstract int copyApk();
@@ -14848,7 +14857,7 @@ public class PackageManagerService extends IPackageManager.Stub
            super(OriginInfo.fromNothing(), null, null, 0, InstallSource.EMPTY,
            super(OriginInfo.fromNothing(), null, null, 0, InstallSource.EMPTY,
                    null, null, instructionSets, null, null, null, null, 0,
                    null, null, instructionSets, null, null, null, null, 0,
                    PackageParser.SigningDetails.UNKNOWN,
                    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.codeFile = (codePath != null) ? new File(codePath) : null;
            this.resourceFile = (resourcePath != null) ? new File(resourcePath) : null;
            this.resourceFile = (resourcePath != null) ? new File(resourcePath) : null;
        }
        }
+3 −0
Original line number Original line Diff line number Diff line
@@ -2730,6 +2730,9 @@ class PackageManagerShellCommand extends ShellCommand {
                case "--staged":
                case "--staged":
                    sessionParams.setStaged();
                    sessionParams.setStaged();
                    break;
                    break;
                case "--force-queryable":
                    sessionParams.setForceQueryable();
                    break;
                case "--enable-rollback":
                case "--enable-rollback":
                    if (params.installerPackageName == null) {
                    if (params.installerPackageName == null) {
                        // com.android.shell has the TEST_MANAGE_ROLLBACKS
                        // com.android.shell has the TEST_MANAGE_ROLLBACKS
Loading