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

Commit 6d0713e4 authored by Jordan Jozwiak's avatar Jordan Jozwiak Committed by Android (Google) Code Review
Browse files

Merge "Use op uid for current user" into main

parents cc2d187f 643c5298
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -3022,18 +3022,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.