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

Commit c7bd7ffb authored by Gazal Agarwal's avatar Gazal Agarwal
Browse files

Delegate bugreport consent for system apps.

For system apps with the required permission and an in-built consent page, the report will be approved and the bugreport consent popup will be skipped.

Bug: 324046728
PWG consultation: b/285006273
Test: Build and flash image. Trigger the Send Feedback flow from settings. Ensure the OS bugreport consent popup is skipped. Check logs to verify consent was delegated.

atest CtsRootBugreportTestCases

Flag: android.os.allow_consentless_bugreport_delegated_consent

Change-Id: I720531386a21f32e5dafcd4d9994d4a54c7921bc
parent 24a5e6b6
Loading
Loading
Loading
Loading
+26 −6
Original line number Diff line number Diff line
@@ -304,16 +304,16 @@ class PendingReports {
            denyReportBeforeAddingRec(listener, callingPackage);
            return;
        }
        AttributionSource attributionSource =
                    new AttributionSource.Builder(callingUid)
                            .setPackageName(callingPackage)
                            .build();

        // Only with userdebug/eng build: it could check capture consentless bugreport permission
        // and approve the report when it's granted.
        boolean captureConsentlessBugreportOnUserdebugBuildGranted = false;
        if ((Build.IS_USERDEBUG || Build.IS_ENG)
                && (flags & IncidentManager.FLAG_ALLOW_CONSENTLESS_BUGREPORT) != 0) {
            AttributionSource attributionSource =
                    new AttributionSource.Builder(callingUid)
                            .setPackageName(callingPackage)
                            .build();
            captureConsentlessBugreportOnUserdebugBuildGranted =
                    mPermissionManager.checkPermissionForDataDelivery(
                            Manifest.permission.CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD,
@@ -321,12 +321,32 @@ class PendingReports {
                            /* message= */ null)
                            == PERMISSION_GRANTED;
        }
        if (captureConsentlessBugreportOnUserdebugBuildGranted) {

        // Allow system apps to skip the consent dialog and use their in-built consent mechanism
        // instead.
        boolean captureConsentlessBugreportDelegatedConsentGranted = false;
        if ((flags & IncidentManager.FLAG_ALLOW_CONSENTLESS_BUGREPORT) != 0) {
            captureConsentlessBugreportDelegatedConsentGranted =
                    mPermissionManager.checkPermissionForDataDelivery(
                                    Manifest.permission
                                            .CAPTURE_CONSENTLESS_BUGREPORT_DELEGATED_CONSENT,
                                    attributionSource,
                                    /* message= */ null)
                            == PERMISSION_GRANTED;
        }

        if (captureConsentlessBugreportOnUserdebugBuildGranted
                || captureConsentlessBugreportDelegatedConsentGranted) {
            try {
                PendingReportRec rec =
                        new PendingReportRec(
                                callingPackage, receiverClass, reportId, flags, listener);
                if (captureConsentlessBugreportOnUserdebugBuildGranted) {
                    Log.d(TAG, "approving consentless report: " + rec.getUri());
                }
                if (captureConsentlessBugreportDelegatedConsentGranted) {
                    Log.d(TAG, "delegating consent for report: " + rec.getUri());
                }
                listener.onReportApproved();
                return;
            } catch (RemoteException e) {
+10 −0
Original line number Diff line number Diff line
{
  "postsubmit": [
    {
      "name": "CtsRootBugreportTestCases"
    },
    {
      "name": "BugreportManagerTestCases"
    }
  ]
}
 No newline at end of file