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

Commit 1104fc26 authored by Yu-Han Yang's avatar Yu-Han Yang
Browse files

Add isSystem to Location Op dumpsys logging

Also guard the logging with LOCATION_OPS check which was missing
previously.

Example logs:
    09-10 13:40:29.602 I PrivacyLog: Location Op: com.google.android.gms(10146) importance=125 isFg=true isSystem=true
    09-10 13:40:31.219 I PrivacyLog: Location Op: com.google.android.apps.maps(10209) importance=100 isFg=true isSystem=false
    09-10 13:40:35.996 I PrivacyLog: Location Op: com.google.android.apps.location.flpdebugger(10153) importance=100 isFg=true isSystem=false
    09-10 13:40:39.594 I PrivacyLog: Location Op: com.google.android.gms(10146) importance=100 isFg=true isSystem=true
    09-10 13:40:44.664 I PrivacyLog: Location Op: com.google.android.apps.maps(10209) importance=400 isFg=false isSystem=false
    09-10 13:40:46.021 I PrivacyLog: Location Op: com.google.android.apps.location.flpdebugger(10153) importance=100 isFg=true isSystem=false
    09-10 13:40:56.302 I PrivacyLog: Location Op: com.google.android.GoogleCamera(10138) importance=100 isFg=true isSystem=false

Bug: 440396862
Test: on device
Flag: EXEMPT logging only
Change-Id: I707cd85a15f250a71d4df3de90220e87b0422a2e
parent d0075dd9
Loading
Loading
Loading
Loading
+23 −16
Original line number Diff line number Diff line
@@ -138,17 +138,21 @@ constructor(
                    ) {
                        logger.logUpdatedItemFromAppOps(code, uid, packageName, active)

                        if (code in OPS_LOCATION) {
                            val procInfo =
                                (activityManager.runningAppProcesses ?: emptyList()).find {
                                    it.uid == uid
                                }
                        val importance = procInfo?.importance ?: -1 // Use -1 if process not found
                            val importance =
                                procInfo?.importance ?: -1 // Use -1 if process not found
                            logger.logLocationAppOps(
                                uid,
                                packageName,
                                importance,
                                !isBackgroundApp(uid),
                                isSystemApp(code, uid, packageName),
                            )
                        }

                        dispatchOnPrivacyItemsChanged()
                    }
@@ -441,7 +445,10 @@ constructor(
     * make sure to update PermissionUsageHelper when changing this method.
     */
    private fun isSystemApp(item: AppOpItem): Boolean {
        val user = UserHandle.getUserHandleForUid(item.uid)
        return isSystemApp(item.code, item.uid, item.packageName)
    }
    private fun isSystemApp(code: Int, uid: Int, packageName: String): Boolean {
        val user = UserHandle.getUserHandleForUid(uid)

        // Don't show apps belonging to background users except managed users.
        var foundUser = false
@@ -454,17 +461,17 @@ constructor(
            return true
        }

        val permission = AppOpsManager.opToPermission(item.code)
        val permission = AppOpsManager.opToPermission(code)
        val permissionFlags: Int =
            packageManager.getPermissionFlags(permission, item.packageName, user)
            packageManager.getPermissionFlags(permission, packageName, user)
        val isSystem =
            if (
                PermissionChecker.checkPermissionForPreflight(
                    context,
                    permission,
                    PermissionChecker.PID_UNKNOWN,
                    item.uid,
                    item.packageName,
                    uid,
                    packageName,
                ) == PermissionChecker.PERMISSION_GRANTED
            ) {
                ((permissionFlags and PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED) ==
+9 −2
Original line number Diff line number Diff line
@@ -47,16 +47,23 @@ class PrivacyLogger @Inject constructor(
        })
    }

    fun logLocationAppOps(uid: Int, packageName: String, importance: Int, isForeground: Boolean) {
    fun logLocationAppOps(
        uid: Int,
        packageName: String,
        importance: Int,
        isForeground: Boolean,
        isSystemApp: Boolean
    ) {
        log(
            LogLevel.INFO, {
                int1 = uid
                int2 = importance
                str1 = packageName
                bool1 = isForeground
                bool2 = isSystemApp
            },
            {
                "Location Op: $str1($int1) importance=$int2 isFg=$bool1"
                "Location Op: $str1($int1) importance=$int2 isFg=$bool1 isSystem=$bool2"
            })
    }