@@ -146,21 +146,19 @@ internal class PackageValidator(context: Context) {
146146 */
147147 private fun buildCallerInfo (callingPackage : String ): CallerPackageInfo ? {
148148 val packageInfo = getPackageInfo(callingPackage) ? : return null
149+ val applicationInfo = packageInfo.applicationInfo ? : return null
149150
150- val appName = packageInfo. applicationInfo.loadLabel(packageManager).toString()
151- val uid = packageInfo. applicationInfo.uid
151+ val appName = applicationInfo.loadLabel(packageManager).toString()
152+ val uid = applicationInfo.uid
152153 val signature = getSignature(packageInfo)
153154
154- val requestedPermissions = packageInfo.requestedPermissions
155- val permissionFlags = packageInfo.requestedPermissionsFlags
156- val activePermissions = mutableSetOf<String >()
157- requestedPermissions?.forEachIndexed { index, permission ->
158- if (permissionFlags[index] and REQUESTED_PERMISSION_GRANTED != 0 ) {
159- activePermissions + = permission
160- }
161- }
155+ val requestedPermissions = packageInfo.requestedPermissions?.asSequence().orEmpty()
156+ val permissionFlags = packageInfo.requestedPermissionsFlags?.asSequence().orEmpty()
157+ val activePermissions = (requestedPermissions zip permissionFlags)
158+ .filter { (_, flag) -> flag and REQUESTED_PERMISSION_GRANTED != 0 }
159+ .mapTo(mutableSetOf ()) { (permission, _) -> permission }
162160
163- return CallerPackageInfo (appName, callingPackage, uid, signature, activePermissions.toSet() )
161+ return CallerPackageInfo (appName, callingPackage, uid, signature, activePermissions)
164162 }
165163
166164 /* *
@@ -188,15 +186,16 @@ internal class PackageValidator(context: Context) {
188186 * returns `null` as the signature.
189187 */
190188 @Suppress(" deprecation" )
191- private fun getSignature (packageInfo : PackageInfo ): String? =
192- if (packageInfo.signatures == null || packageInfo.signatures.size != 1 ) {
189+ private fun getSignature (packageInfo : PackageInfo ): String? {
190+ val signatures = packageInfo.signatures
191+ return if (signatures == null || signatures.size != 1 ) {
193192 // Security best practices dictate that an app should be signed with exactly one (1)
194193 // signature. Because of this, if there are multiple signatures, reject it.
195194 null
196195 } else {
197- val certificate = packageInfo.signatures[0 ].toByteArray()
198- getSignatureSha256(certificate)
196+ getSignatureSha256(signatures[0 ].toByteArray())
199197 }
198+ }
200199
201200 /* *
202201 * Finds the Android platform signing key signature. This key is never null.
0 commit comments