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

Commit 402a38ae authored by Hai Zhang's avatar Hai Zhang
Browse files

Fix system crash when APK gets deleted.

Fixes: 282984463
Test: StagedInstallInternalTest
Change-Id: Id5ac64718c5fe347683bc80449a13cf85a940689
parent 84be7d60
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -141,7 +141,11 @@ class AccessPolicy private constructor(
            setDisabledSystemPackageStates(disabledSystemPackageStates)
            packageStates.forEach { (packageName, packageState) ->
                if (packageState.volumeUuid == volumeUuid) {
                    check(packageNames.contains(packageName)) {
                    // The APK for a package on a mounted storage volume may still be unavailable
                    // due to APK being deleted, e.g. after an OTA.
                    check(
                        packageState.androidPackage == null || packageNames.contains(packageName)
                    ) {
                        "Package $packageName on storage volume $volumeUuid didn't receive" +
                            " onPackageAdded() before onStorageVolumeMounted()"
                    }
+4 −10
Original line number Diff line number Diff line
@@ -155,19 +155,13 @@ class AppIdPermissionPolicy : SchemePolicy() {
            evaluatePermissionStateForAllPackages(permissionName, null)
        }

        newState.externalState.packageStates.forEach { (_, packageState) ->
            val androidPackage = packageState.androidPackage
            if (androidPackage == null || androidPackage.volumeUuid != volumeUuid) {
                return@forEach
            }
        packageNames.forEachIndexed { _, packageName ->
            val packageState = newState.externalState.packageStates[packageName]!!
            val installedPackageState = if (isSystemUpdated) packageState else null
            evaluateAllPermissionStatesForPackage(packageState, installedPackageState)
        }
        newState.externalState.packageStates.forEach { (_, packageState) ->
            val androidPackage = packageState.androidPackage
            if (androidPackage == null || androidPackage.volumeUuid != volumeUuid) {
                return@forEach
            }
        packageNames.forEachIndexed { _, packageName ->
            val packageState = newState.externalState.packageStates[packageName]!!
            newState.externalState.userIds.forEachIndexed { _, userId ->
                inheritImplicitPermissionStates(packageState.appId, userId)
            }