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

Commit f268946f authored by Jackal Guo's avatar Jackal Guo
Browse files

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
parent 4aa280fe
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -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)
+18 −4
Original line number Diff line number Diff line
@@ -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}