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

Commit c5024848 authored by Todd Kennedy's avatar Todd Kennedy Committed by android-build-merger
Browse files

Merge "Merge changes Iea24e5a1,If71385bc into oc-dev am: 3834421c am:...

Merge "Merge changes Iea24e5a1,If71385bc into oc-dev am: 3834421c am: 4d2a9a9f" into oc-dr1-dev-plus-aosp
am: ed07898d

Change-Id: I468d43c265ab002ccabd3f33f8375d81f17ac66e
parents 5ebf0177 ed07898d
Loading
Loading
Loading
Loading
+102 −63
Original line number Original line Diff line number Diff line
@@ -2188,12 +2188,12 @@ public class PackageManagerService extends IPackageManager.Stub
    private void grantRequestedRuntimePermissionsForUser(PackageParser.Package pkg, int userId,
    private void grantRequestedRuntimePermissionsForUser(PackageParser.Package pkg, int userId,
            String[] grantedPermissions) {
            String[] grantedPermissions) {
        SettingBase sb = (SettingBase) pkg.mExtras;
        PackageSetting ps = (PackageSetting) pkg.mExtras;
        if (sb == null) {
        if (ps == null) {
            return;
            return;
        }
        }
        PermissionsState permissionsState = sb.getPermissionsState();
        PermissionsState permissionsState = ps.getPermissionsState();
        final int immutableFlags = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED
        final int immutableFlags = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED
                | PackageManager.FLAG_PERMISSION_POLICY_FIXED;
                | PackageManager.FLAG_PERMISSION_POLICY_FIXED;
@@ -3517,7 +3517,7 @@ public class PackageManagerService extends IPackageManager.Stub
     *     and {@code 0}</li>
     *     and {@code 0}</li>
     * <li>The calling application has the permission
     * <li>The calling application has the permission
     *     {@link android.Manifest.permission#ACCESS_INSTANT_APPS}</li>
     *     {@link android.Manifest.permission#ACCESS_INSTANT_APPS}</li>
     * <li>[TODO] The calling application is the default launcher on the
     * <li>The calling application is the default launcher on the
     *     system partition.</li>
     *     system partition.</li>
     * </ol>
     * </ol>
     */
     */
@@ -4905,9 +4905,13 @@ public class PackageManagerService extends IPackageManager.Stub
        }
        }
    }
    }
    private void updateSequenceNumberLP(String packageName, int[] userList) {
    private void updateSequenceNumberLP(PackageSetting pkgSetting, int[] userList) {
        for (int i = userList.length - 1; i >= 0; --i) {
        for (int i = userList.length - 1; i >= 0; --i) {
            final int userId = userList[i];
            final int userId = userList[i];
            // don't add instant app to the list of updates
            if (pkgSetting.getInstantApp(userId)) {
                continue;
            }
            SparseArray<String> changedPackages = mChangedPackages.get(userId);
            SparseArray<String> changedPackages = mChangedPackages.get(userId);
            if (changedPackages == null) {
            if (changedPackages == null) {
                changedPackages = new SparseArray<>();
                changedPackages = new SparseArray<>();
@@ -4918,12 +4922,12 @@ public class PackageManagerService extends IPackageManager.Stub
                sequenceNumbers = new HashMap<>();
                sequenceNumbers = new HashMap<>();
                mChangedPackagesSequenceNumbers.put(userId, sequenceNumbers);
                mChangedPackagesSequenceNumbers.put(userId, sequenceNumbers);
            }
            }
            final Integer sequenceNumber = sequenceNumbers.get(packageName);
            final Integer sequenceNumber = sequenceNumbers.get(pkgSetting.name);
            if (sequenceNumber != null) {
            if (sequenceNumber != null) {
                changedPackages.remove(sequenceNumber);
                changedPackages.remove(sequenceNumber);
            }
            }
            changedPackages.put(mChangedPackagesSequenceNumber, packageName);
            changedPackages.put(mChangedPackagesSequenceNumber, pkgSetting.name);
            sequenceNumbers.put(packageName, mChangedPackagesSequenceNumber);
            sequenceNumbers.put(pkgSetting.name, mChangedPackagesSequenceNumber);
        }
        }
        mChangedPackagesSequenceNumber++;
        mChangedPackagesSequenceNumber++;
    }
    }
@@ -5365,7 +5369,7 @@ public class PackageManagerService extends IPackageManager.Stub
                "grantRuntimePermission");
                "grantRuntimePermission");
        final int uid;
        final int uid;
        final SettingBase sb;
        final PackageSetting ps;
        synchronized (mPackages) {
        synchronized (mPackages) {
            final PackageParser.Package pkg = mPackages.get(packageName);
            final PackageParser.Package pkg = mPackages.get(packageName);
@@ -5376,12 +5380,9 @@ public class PackageManagerService extends IPackageManager.Stub
            if (bp == null) {
            if (bp == null) {
                throw new IllegalArgumentException("Unknown permission: " + name);
                throw new IllegalArgumentException("Unknown permission: " + name);
            }
            }
            sb = (SettingBase) pkg.mExtras;
            ps = (PackageSetting) pkg.mExtras;
            if (sb == null) {
            if (ps == null
                throw new IllegalArgumentException("Unknown package: " + packageName);
                    || filterAppAccessLPr(ps, callingUid, userId)) {
            }
            if (sb instanceof PackageSetting
                    && filterAppAccessLPr((PackageSetting) sb, callingUid, userId)) {
                throw new IllegalArgumentException("Unknown package: " + packageName);
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            }
@@ -5399,7 +5400,7 @@ public class PackageManagerService extends IPackageManager.Stub
            uid = UserHandle.getUid(userId, pkg.applicationInfo.uid);
            uid = UserHandle.getUid(userId, pkg.applicationInfo.uid);
            final PermissionsState permissionsState = sb.getPermissionsState();
            final PermissionsState permissionsState = ps.getPermissionsState();
            final int flags = permissionsState.getPermissionFlags(name, userId);
            final int flags = permissionsState.getPermissionFlags(name, userId);
            if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) {
            if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) {
@@ -5421,7 +5422,6 @@ public class PackageManagerService extends IPackageManager.Stub
                return;
                return;
            }
            }
            final PackageSetting ps = mSettings.mPackages.get(packageName);
            if (ps.getInstantApp(userId) && !bp.isInstant()) {
            if (ps.getInstantApp(userId) && !bp.isInstant()) {
                throw new SecurityException("Cannot grant non-ephemeral permission"
                throw new SecurityException("Cannot grant non-ephemeral permission"
                        + name + " for package " + packageName);
                        + name + " for package " + packageName);
@@ -5505,7 +5505,11 @@ public class PackageManagerService extends IPackageManager.Stub
            if (pkg == null) {
            if (pkg == null) {
                throw new IllegalArgumentException("Unknown package: " + packageName);
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            }
            final PackageSetting ps = (PackageSetting) pkg.mExtras;
            if (ps == null
                    || filterAppAccessLPr(ps, Binder.getCallingUid(), userId)) {
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            final BasePermission bp = mSettings.mPermissions.get(name);
            final BasePermission bp = mSettings.mPermissions.get(name);
            if (bp == null) {
            if (bp == null) {
                throw new IllegalArgumentException("Unknown permission: " + name);
                throw new IllegalArgumentException("Unknown permission: " + name);
@@ -5523,12 +5527,7 @@ public class PackageManagerService extends IPackageManager.Stub
                return;
                return;
            }
            }
            SettingBase sb = (SettingBase) pkg.mExtras;
            final PermissionsState permissionsState = ps.getPermissionsState();
            if (sb == null) {
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            final PermissionsState permissionsState = sb.getPermissionsState();
            final int flags = permissionsState.getPermissionFlags(name, userId);
            final int flags = permissionsState.getPermissionFlags(name, userId);
            if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) {
            if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) {
@@ -5681,15 +5680,12 @@ public class PackageManagerService extends IPackageManager.Stub
            if (bp == null) {
            if (bp == null) {
                return 0;
                return 0;
            }
            }
            final SettingBase sb = (SettingBase) pkg.mExtras;
            final PackageSetting ps = (PackageSetting) pkg.mExtras;
            if (sb == null) {
            if (ps == null
                return 0;
                    || filterAppAccessLPr(ps, callingUid, userId)) {
            }
            if (sb instanceof PackageSetting
                    && filterAppAccessLPr((PackageSetting) sb, callingUid, userId)) {
                return 0;
                return 0;
            }
            }
            PermissionsState permissionsState = sb.getPermissionsState();
            PermissionsState permissionsState = ps.getPermissionsState();
            return permissionsState.getPermissionFlags(name, userId);
            return permissionsState.getPermissionFlags(name, userId);
        }
        }
    }
    }
@@ -5703,7 +5699,8 @@ public class PackageManagerService extends IPackageManager.Stub
        enforceGrantRevokeRuntimePermissionPermissions("updatePermissionFlags");
        enforceGrantRevokeRuntimePermissionPermissions("updatePermissionFlags");
        enforceCrossUserPermission(Binder.getCallingUid(), userId,
        final int callingUid = Binder.getCallingUid();
        enforceCrossUserPermission(callingUid, userId,
                true /* requireFullPermission */, true /* checkShell */,
                true /* requireFullPermission */, true /* checkShell */,
                "updatePermissionFlags");
                "updatePermissionFlags");
@@ -5721,18 +5718,18 @@ public class PackageManagerService extends IPackageManager.Stub
            if (pkg == null) {
            if (pkg == null) {
                throw new IllegalArgumentException("Unknown package: " + packageName);
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            }
            final PackageSetting ps = (PackageSetting) pkg.mExtras;
            if (ps == null
                    || filterAppAccessLPr(ps, callingUid, userId)) {
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            final BasePermission bp = mSettings.mPermissions.get(name);
            final BasePermission bp = mSettings.mPermissions.get(name);
            if (bp == null) {
            if (bp == null) {
                throw new IllegalArgumentException("Unknown permission: " + name);
                throw new IllegalArgumentException("Unknown permission: " + name);
            }
            }
            SettingBase sb = (SettingBase) pkg.mExtras;
            PermissionsState permissionsState = ps.getPermissionsState();
            if (sb == null) {
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            PermissionsState permissionsState = sb.getPermissionsState();
            boolean hadState = permissionsState.getRuntimePermissionState(name, userId) != null;
            boolean hadState = permissionsState.getRuntimePermissionState(name, userId) != null;
@@ -5776,11 +5773,11 @@ public class PackageManagerService extends IPackageManager.Stub
            final int packageCount = mPackages.size();
            final int packageCount = mPackages.size();
            for (int pkgIndex = 0; pkgIndex < packageCount; pkgIndex++) {
            for (int pkgIndex = 0; pkgIndex < packageCount; pkgIndex++) {
                final PackageParser.Package pkg = mPackages.valueAt(pkgIndex);
                final PackageParser.Package pkg = mPackages.valueAt(pkgIndex);
                SettingBase sb = (SettingBase) pkg.mExtras;
                final PackageSetting ps = (PackageSetting) pkg.mExtras;
                if (sb == null) {
                if (ps == null) {
                    continue;
                    continue;
                }
                }
                PermissionsState permissionsState = sb.getPermissionsState();
                PermissionsState permissionsState = ps.getPermissionsState();
                changed |= permissionsState.updatePermissionFlagsForAllPermissions(
                changed |= permissionsState.updatePermissionFlagsForAllPermissions(
                        userId, flagMask, flagValues);
                        userId, flagMask, flagValues);
            }
            }
@@ -9634,6 +9631,8 @@ public class PackageManagerService extends IPackageManager.Stub
    public void reconcileSecondaryDexFiles(String packageName) {
    public void reconcileSecondaryDexFiles(String packageName) {
        if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
        if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
            return;
            return;
        } else if (isInstantApp(packageName, UserHandle.getCallingUserId())) {
            return;
        }
        }
        mDexManager.reconcileSecondaryDexFiles(packageName);
        mDexManager.reconcileSecondaryDexFiles(packageName);
    }
    }
@@ -14412,8 +14411,8 @@ public class PackageManagerService extends IPackageManager.Stub
            int userId) {
            int userId) {
        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
        PackageSetting pkgSetting;
        PackageSetting pkgSetting;
        final int uid = Binder.getCallingUid();
        final int callingUid = Binder.getCallingUid();
        enforceCrossUserPermission(uid, userId,
        enforceCrossUserPermission(callingUid, userId,
                true /* requireFullPermission */, true /* checkShell */,
                true /* requireFullPermission */, true /* checkShell */,
                "setApplicationHiddenSetting for user " + userId);
                "setApplicationHiddenSetting for user " + userId);
@@ -14432,6 +14431,9 @@ public class PackageManagerService extends IPackageManager.Stub
                if (pkgSetting == null) {
                if (pkgSetting == null) {
                    return false;
                    return false;
                }
                }
                if (filterAppAccessLPr(pkgSetting, callingUid, userId)) {
                    return false;
                }
                // Do not allow "android" is being disabled
                // Do not allow "android" is being disabled
                if ("android".equals(packageName)) {
                if ("android".equals(packageName)) {
                    Slog.w(TAG, "Cannot hide package: android");
                    Slog.w(TAG, "Cannot hide package: android");
@@ -14448,7 +14450,7 @@ public class PackageManagerService extends IPackageManager.Stub
                    return false;
                    return false;
                }
                }
                // Only allow protected packages to hide themselves.
                // Only allow protected packages to hide themselves.
                if (hidden && !UserHandle.isSameApp(uid, pkgSetting.appId)
                if (hidden && !UserHandle.isSameApp(callingUid, pkgSetting.appId)
                        && mProtectedPackages.isPackageStateProtected(userId, packageName)) {
                        && mProtectedPackages.isPackageStateProtected(userId, packageName)) {
                    Slog.w(TAG, "Not hiding protected package: " + packageName);
                    Slog.w(TAG, "Not hiding protected package: " + packageName);
                    return false;
                    return false;
@@ -14565,6 +14567,20 @@ public class PackageManagerService extends IPackageManager.Stub
                if (pkgSetting == null) {
                if (pkgSetting == null) {
                    return PackageManager.INSTALL_FAILED_INVALID_URI;
                    return PackageManager.INSTALL_FAILED_INVALID_URI;
                }
                }
                if (!canViewInstantApps(callingUid, UserHandle.getUserId(callingUid))) {
                    // only allow the existing package to be used if it's installed as a full
                    // application for at least one user
                    boolean installAllowed = false;
                    for (int checkUserId : sUserManager.getUserIds()) {
                        installAllowed = !pkgSetting.getInstantApp(checkUserId);
                        if (installAllowed) {
                            break;
                        }
                    }
                    if (!installAllowed) {
                        return PackageManager.INSTALL_FAILED_INVALID_URI;
                    }
                }
                if (!pkgSetting.getInstalled(userId)) {
                if (!pkgSetting.getInstalled(userId)) {
                    pkgSetting.setInstalled(true, userId);
                    pkgSetting.setInstalled(true, userId);
                    pkgSetting.setHidden(false, userId);
                    pkgSetting.setHidden(false, userId);
@@ -14588,7 +14604,7 @@ public class PackageManagerService extends IPackageManager.Stub
                }
                }
                sendPackageAddedForUser(packageName, pkgSetting, userId);
                sendPackageAddedForUser(packageName, pkgSetting, userId);
                synchronized (mPackages) {
                synchronized (mPackages) {
                    updateSequenceNumberLP(packageName, new int[]{ userId });
                    updateSequenceNumberLP(pkgSetting, new int[]{ userId });
                }
                }
            }
            }
        } finally {
        } finally {
@@ -14634,7 +14650,8 @@ public class PackageManagerService extends IPackageManager.Stub
    public String[] setPackagesSuspendedAsUser(String[] packageNames, boolean suspended,
    public String[] setPackagesSuspendedAsUser(String[] packageNames, boolean suspended,
            int userId) {
            int userId) {
        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
        enforceCrossUserPermission(Binder.getCallingUid(), userId,
        final int callingUid = Binder.getCallingUid();
        enforceCrossUserPermission(callingUid, userId,
                true /* requireFullPermission */, true /* checkShell */,
                true /* requireFullPermission */, true /* checkShell */,
                "setPackagesSuspended for user " + userId);
                "setPackagesSuspended for user " + userId);
@@ -14655,7 +14672,8 @@ public class PackageManagerService extends IPackageManager.Stub
                final int appId;
                final int appId;
                synchronized (mPackages) {
                synchronized (mPackages) {
                    final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
                    final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
                    if (pkgSetting == null) {
                    if (pkgSetting == null
                            || filterAppAccessLPr(pkgSetting, callingUid, userId)) {
                        Slog.w(TAG, "Could not find package setting for package \"" + packageName
                        Slog.w(TAG, "Could not find package setting for package \"" + packageName
                                + "\". Skipping suspending/un-suspending.");
                                + "\". Skipping suspending/un-suspending.");
                        unactionedPackages.add(packageName);
                        unactionedPackages.add(packageName);
@@ -15065,6 +15083,10 @@ public class PackageManagerService extends IPackageManager.Stub
        boolean result = false;
        boolean result = false;
        synchronized (mPackages) {
        synchronized (mPackages) {
            final PackageSetting ps = mSettings.mPackages.get(packageName);
            if (filterAppAccessLPr(ps, Binder.getCallingUid(), UserHandle.getCallingUserId())) {
                return false;
            }
            result = mSettings.updateIntentFilterVerificationStatusLPw(packageName, status, userId);
            result = mSettings.updateIntentFilterVerificationStatusLPw(packageName, status, userId);
        }
        }
        if (result) {
        if (result) {
@@ -15165,7 +15187,9 @@ public class PackageManagerService extends IPackageManager.Stub
        // writer
        // writer
        synchronized (mPackages) {
        synchronized (mPackages) {
            PackageSetting targetPackageSetting = mSettings.mPackages.get(targetPackage);
            PackageSetting targetPackageSetting = mSettings.mPackages.get(targetPackage);
            if (targetPackageSetting == null) {
            if (targetPackageSetting == null
                    || filterAppAccessLPr(
                            targetPackageSetting, callingUid, UserHandle.getUserId(callingUid))) {
                throw new IllegalArgumentException("Unknown target package: " + targetPackage);
                throw new IllegalArgumentException("Unknown target package: " + targetPackage);
            }
            }
@@ -15246,7 +15270,9 @@ public class PackageManagerService extends IPackageManager.Stub
            if (ps == null) {
            if (ps == null) {
                throw new IllegalArgumentException("Unknown target package " + packageName);
                throw new IllegalArgumentException("Unknown target package " + packageName);
            }
            }
            if (filterAppAccessLPr(ps, Binder.getCallingUid(), UserHandle.getCallingUserId())) {
                throw new IllegalArgumentException("Unknown target package " + packageName);
            }
            if (!Objects.equals(callerPackageName, ps.installerPackageName)) {
            if (!Objects.equals(callerPackageName, ps.installerPackageName)) {
                throw new IllegalArgumentException("Calling package " + callerPackageName
                throw new IllegalArgumentException("Calling package " + callerPackageName
                        + " is not installer for " + packageName);
                        + " is not installer for " + packageName);
@@ -18268,7 +18294,7 @@ public class PackageManagerService extends IPackageManager.Stub
            }
            }
            if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
            if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
                updateSequenceNumberLP(pkgName, res.newUsers);
                updateSequenceNumberLP(ps, res.newUsers);
                updateInstantAppInstallerLocked(pkgName);
                updateInstantAppInstallerLocked(pkgName);
            }
            }
        }
        }
@@ -18494,8 +18520,7 @@ public class PackageManagerService extends IPackageManager.Stub
        final int callingUid = Binder.getCallingUid();
        final int callingUid = Binder.getCallingUid();
        mContext.enforceCallingOrSelfPermission(
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.DELETE_PACKAGES, null);
                android.Manifest.permission.DELETE_PACKAGES, null);
        final int hasAccessInstantApps = mContext.checkCallingOrSelfPermission(
        final boolean canViewInstantApps = canViewInstantApps(callingUid, userId);
                android.Manifest.permission.ACCESS_INSTANT_APPS);
        Preconditions.checkNotNull(versionedPackage);
        Preconditions.checkNotNull(versionedPackage);
        Preconditions.checkNotNull(observer);
        Preconditions.checkNotNull(observer);
        Preconditions.checkArgumentInRange(versionedPackage.getVersionCode(),
        Preconditions.checkArgumentInRange(versionedPackage.getVersionCode(),
@@ -18566,7 +18591,7 @@ public class PackageManagerService extends IPackageManager.Stub
                    final boolean targetIsInstantApp =
                    final boolean targetIsInstantApp =
                            ps.getInstantApp(UserHandle.getUserId(callingUid));
                            ps.getInstantApp(UserHandle.getUserId(callingUid));
                    doDeletePackage = !targetIsInstantApp
                    doDeletePackage = !targetIsInstantApp
                            || hasAccessInstantApps == PackageManager.PERMISSION_GRANTED;
                            || canViewInstantApps;
                }
                }
                if (doDeletePackage) {
                if (doDeletePackage) {
                    if (!deleteAllUsers) {
                    if (!deleteAllUsers) {
@@ -18877,7 +18902,7 @@ public class PackageManagerService extends IPackageManager.Stub
                    if (pkg != null) {
                    if (pkg != null) {
                        mInstantAppRegistry.onPackageUninstalledLPw(pkg, info.removedUsers);
                        mInstantAppRegistry.onPackageUninstalledLPw(pkg, info.removedUsers);
                    }
                    }
                    updateSequenceNumberLP(packageName, info.removedUsers);
                    updateSequenceNumberLP(uninstalledPs, info.removedUsers);
                    updateInstantAppInstallerLocked(packageName);
                    updateInstantAppInstallerLocked(packageName);
                }
                }
            }
            }
@@ -21234,7 +21259,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
        // Limit who can change which apps
        // Limit who can change which apps
        if (!UserHandle.isSameApp(callingUid, pkgSetting.appId)) {
        if (!UserHandle.isSameApp(callingUid, pkgSetting.appId)) {
            // Don't allow apps that don't have permission to modify other apps
            // Don't allow apps that don't have permission to modify other apps
            if (!allowedByPermission) {
            if (!allowedByPermission
                    || filterAppAccessLPr(pkgSetting, callingUid, userId)) {
                throw new SecurityException(
                throw new SecurityException(
                        "Attempt to change component state; "
                        "Attempt to change component state; "
                        + "pid=" + Binder.getCallingPid()
                        + "pid=" + Binder.getCallingPid()
@@ -21321,7 +21347,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
                }
                }
            }
            }
            scheduleWritePackageRestrictionsLocked(userId);
            scheduleWritePackageRestrictionsLocked(userId);
            updateSequenceNumberLP(packageName, new int[] { userId });
            updateSequenceNumberLP(pkgSetting, new int[] { userId });
            final long callingId = Binder.clearCallingIdentity();
            final long callingId = Binder.clearCallingIdentity();
            try {
            try {
                updateInstantAppInstallerLocked(packageName);
                updateInstantAppInstallerLocked(packageName);
@@ -21418,7 +21444,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
                true /* requireFullPermission */, true /* checkShell */, "stop package");
                true /* requireFullPermission */, true /* checkShell */, "stop package");
        // writer
        // writer
        synchronized (mPackages) {
        synchronized (mPackages) {
            if (mSettings.setPackageStoppedStateLPw(this, packageName, stopped,
            final PackageSetting ps = mSettings.mPackages.get(packageName);
            if (!filterAppAccessLPr(ps, callingUid, userId)
                    && mSettings.setPackageStoppedStateLPw(this, packageName, stopped,
                            allowedByPermission, callingUid, userId)) {
                            allowedByPermission, callingUid, userId)) {
                scheduleWritePackageRestrictionsLocked(userId);
                scheduleWritePackageRestrictionsLocked(userId);
            }
            }
@@ -21427,11 +21455,16 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
    @Override
    @Override
    public String getInstallerPackageName(String packageName) {
    public String getInstallerPackageName(String packageName) {
        if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
        final int callingUid = Binder.getCallingUid();
        if (getInstantAppPackageName(callingUid) != null) {
            return null;
            return null;
        }
        }
        // reader
        // reader
        synchronized (mPackages) {
        synchronized (mPackages) {
            final PackageSetting ps = mSettings.mPackages.get(packageName);
            if (filterAppAccessLPr(ps, callingUid, UserHandle.getUserId(callingUid))) {
                return null;
            }
            return mSettings.getInstallerPackageNameLPr(packageName);
            return mSettings.getInstallerPackageNameLPr(packageName);
        }
        }
    }
    }
@@ -24183,7 +24216,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
    @Override
    @Override
    public boolean isPackageSignedByKeySet(String packageName, KeySet ks) {
    public boolean isPackageSignedByKeySet(String packageName, KeySet ks) {
        if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
        final int callingUid = Binder.getCallingUid();
        if (getInstantAppPackageName(callingUid) != null) {
            return false;
            return false;
        }
        }
        if (packageName == null || ks == null) {
        if (packageName == null || ks == null) {
@@ -24191,7 +24225,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
        }
        }
        synchronized(mPackages) {
        synchronized(mPackages) {
            final PackageParser.Package pkg = mPackages.get(packageName);
            final PackageParser.Package pkg = mPackages.get(packageName);
            if (pkg == null) {
            if (pkg == null
                    || filterAppAccessLPr((PackageSetting) pkg.mExtras, callingUid,
                            UserHandle.getUserId(callingUid))) {
                Slog.w(TAG, "KeySet requested for unknown package: " + packageName);
                Slog.w(TAG, "KeySet requested for unknown package: " + packageName);
                throw new IllegalArgumentException("Unknown package: " + packageName);
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            }
@@ -24206,7 +24242,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
    @Override
    @Override
    public boolean isPackageSignedByKeySetExactly(String packageName, KeySet ks) {
    public boolean isPackageSignedByKeySetExactly(String packageName, KeySet ks) {
        if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
        final int callingUid = Binder.getCallingUid();
        if (getInstantAppPackageName(callingUid) != null) {
            return false;
            return false;
        }
        }
        if (packageName == null || ks == null) {
        if (packageName == null || ks == null) {
@@ -24214,7 +24251,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
        }
        }
        synchronized(mPackages) {
        synchronized(mPackages) {
            final PackageParser.Package pkg = mPackages.get(packageName);
            final PackageParser.Package pkg = mPackages.get(packageName);
            if (pkg == null) {
            if (pkg == null
                    || filterAppAccessLPr((PackageSetting) pkg.mExtras, callingUid,
                            UserHandle.getUserId(callingUid))) {
                Slog.w(TAG, "KeySet requested for unknown package: " + packageName);
                Slog.w(TAG, "KeySet requested for unknown package: " + packageName);
                throw new IllegalArgumentException("Unknown package: " + packageName);
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            }