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

Commit 643c5298 authored by Jordan Jozwiak's avatar Jordan Jozwiak
Browse files

Use op uid for current user

Make sure that we're using the current user to determine the package uid
in order to properly record phone call usage on a headless system user
device.

Bug: 266955439
Test: Manual testing
Change-Id: I3ddae9a4bf0257207dcd80ce2c5931fc3970b294
parent 8e039798
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -3027,18 +3027,37 @@ public class InCallController extends CallsManagerListenerBase implements
        mIsCallUsingMicrophone = mIsTrackingManagedAliveCall && !isMuted
                && !isCarrierPrivilegedUsingMicDuringVoipCall();
        if (wasUsingMicrophone != mIsCallUsingMicrophone) {
            int opPackageUid = getOpPackageUid();
            if (mIsCallUsingMicrophone) {
                // Note, not checking return value, as this op call is merely for tracing use
                mAppOpsManager.startOp(AppOpsManager.OP_PHONE_CALL_MICROPHONE, myUid(),
                mAppOpsManager.startOp(AppOpsManager.OP_PHONE_CALL_MICROPHONE, opPackageUid,
                        mContext.getOpPackageName(), false, null, null);
                mSensorPrivacyManager.showSensorUseDialog(SensorPrivacyManager.Sensors.MICROPHONE);
            } else {
                mAppOpsManager.finishOp(AppOpsManager.OP_PHONE_CALL_MICROPHONE, myUid(),
                mAppOpsManager.finishOp(AppOpsManager.OP_PHONE_CALL_MICROPHONE, opPackageUid,
                        mContext.getOpPackageName(), null);
            }
        }
    }

    /**
     * Returns the uid of the package in the current user to be used for app ops attribution.
     */
    private int getOpPackageUid() {
        UserHandle user = mCallsManager.getCurrentUserHandle();

        try {
            PackageManager pkgManager = mContext.getPackageManager();
            return pkgManager.getPackageUidAsUser(mContext.getOpPackageName(),
                    user.getIdentifier());
        } catch (PackageManager.NameNotFoundException e) {
            Log.e(this, e, "getPackageForAssociatedUser: could not find package %s"
                    + " for user %s", mContext.getOpPackageName(), user);
            // fallback to current process id - this should not happen
            return myUid();
        }
    }

    /**
     * @return {@code true} if InCallController is tracking a managed call (i.e. not self managed
     * and not external) that is active.