Fix parsing equivalence for new permission and flag

Mirror changes which introduced a new ActivityInfo flag, and a new
compatibility permission to address the inconsistent between parser
v1 and v2.

Fix: 207090919
Fix: 207093895
Test: atest AndroidPackageInfoFlagBehaviorTest
Test: atest AndroidPackageParsingTestBase
Change-Id: I19aa4ad6f57bf27e7d3baab301f375585c37d25f
This commit is contained in:
Jackal Guo
2021-11-24 15:16:02 +08:00
parent 4aa280fe1f
commit f268946f13
2 changed files with 31 additions and 7 deletions

View File

@@ -16,17 +16,18 @@
package com.android.server.pm.parsing
import android.Manifest
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.content.pm.PackageParser
import android.platform.test.annotations.Postsubmit
import com.android.internal.util.ArrayUtils
import com.android.server.pm.parsing.AndroidPackageInfoFlagBehaviorTest.Companion.Param.Companion.appInfo
import com.android.server.pm.parsing.AndroidPackageInfoFlagBehaviorTest.Companion.Param.Companion.pkgInfo
import com.android.server.pm.parsing.pkg.AndroidPackage
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
@@ -91,9 +92,18 @@ class AndroidPackageInfoFlagBehaviorTest : AndroidPackageParsingTestBase() {
listOf(it.configPreferences, it.reqFeatures, it.featureGroups)
},
pkgInfo(PackageManager.GET_PERMISSIONS) {
listOf(it.permissions, it.requestedPermissions, it.requestedPermissionsFlags)
listOf(
it.permissions,
// Strip compatibility permission added in T
it.requestedPermissions?.filter { x ->
x != Manifest.permission.POST_NOTIFICATIONS
}?.ifEmpty { null }?.toTypedArray(),
// Strip the flag from compatibility permission added in T
it.requestedPermissionsFlags?.filterIndexed { index, _ ->
index != ArrayUtils.indexOf(it.requestedPermissions,
Manifest.permission.POST_NOTIFICATIONS)
}?.ifEmpty { null }?.toTypedArray())
},
appInfo(PackageManager.GET_META_DATA) { listOf(it.metaData) },
appInfo(PackageManager.GET_SHARED_LIBRARY_FILES) {
listOf(it.sharedLibraryFiles, it.sharedLibraryFiles)

View File

@@ -16,6 +16,7 @@
package com.android.server.pm.parsing
import android.Manifest
import android.content.Context
import android.content.pm.ActivityInfo
import android.content.pm.ApplicationInfo
@@ -34,6 +35,7 @@ import android.os.Environment
import android.os.Process
import android.util.SparseArray
import androidx.test.platform.app.InstrumentationRegistry
import com.android.internal.util.ArrayUtils
import com.android.server.pm.PackageManagerService
import com.android.server.pm.parsing.pkg.AndroidPackage
import com.android.server.pm.pkg.PackageStateInternal
@@ -329,7 +331,10 @@ open class AndroidPackageParsingTestBase {
.ignored("Update for fixing b/128526493 and the testing is no longer valid")}
enabled=${this.enabled}
exported=${this.exported}
flags=${Integer.toBinaryString(this.flags)}
flags=${Integer.toBinaryString(
// Strip flag added in T
this.flags and (ActivityInfo.FLAG_CAN_DISPLAY_ON_REMOTE_DEVICES.inv()))
}
icon=${this.icon}
labelRes=${this.labelRes}
launchMode=${this.launchMode}
@@ -501,13 +506,22 @@ open class AndroidPackageParsingTestBase {
receivers=${this.receivers?.joinToString { it.dumpToString() }
.ignored("Checked separately in test")}
reqFeatures=${this.reqFeatures?.joinToString { it.dumpToString() }}
requestedPermissions=${this.requestedPermissions?.contentToString()}
requestedPermissions=${
// Strip compatibility permission added in T
this.requestedPermissions?.filter { x ->
x != Manifest.permission.POST_NOTIFICATIONS
}?.ifEmpty { null }?.joinToString()
}
requestedPermissionsFlags=${
this.requestedPermissionsFlags?.map {
// Strip the flag from compatibility permission added in T
this.requestedPermissionsFlags?.filterIndexed { index, _ ->
index != ArrayUtils.indexOf(requestedPermissions,
Manifest.permission.POST_NOTIFICATIONS)
}?.map {
// Newer flags are stripped
it and (PackageInfo.REQUESTED_PERMISSION_REQUIRED
or PackageInfo.REQUESTED_PERMISSION_GRANTED)
}?.joinToString()
}?.ifEmpty { null }?.joinToString()
}
requiredAccountType=${this.requiredAccountType}
requiredForAllUsers=${this.requiredForAllUsers}