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

Commit e0cf4e60 authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Add PermissionGrantRequestResultReported atom

Also add a prototype for a future system-api accessible metrics file
that will be auto-generated from atoms.proto

Test: - ./out/host/linux-x86/bin/statsd_testdrive -p com.google.android.permissoncontroller 170
      - triggered permission request
Bug: 123594188, 123663448
Change-Id: Icede6ff1f12ca79ebad6267c045a4fb3a9955402
parent f9a25e52
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -48449,6 +48449,7 @@ package android.util {
    method public static boolean logEvent(int);
    method public static boolean logStart(int);
    method public static boolean logStop(int);
    method public static void write(int, @NonNull java.lang.Object...);
  }
  public class StringBuilderPrinter implements android.util.Printer {
+15 −0
Original line number Diff line number Diff line
@@ -9204,6 +9204,21 @@ package android.util {
    method public int getUid();
  }
  public class StatsLogAtoms {
    field public static final int PERMISSION_GRANT_REQUEST_RESULT_REPORTED = 170; // 0xaa
    field public static final int PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__AUTO_DENIED = 8; // 0x8
    field public static final int PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__AUTO_GRANTED = 5; // 0x5
    field public static final int PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__IGNORED = 1; // 0x1
    field public static final int PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__IGNORED_POLICY_FIXED = 3; // 0x3
    field public static final int PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__IGNORED_USER_FIXED = 2; // 0x2
    field public static final int PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__USER_DENIED = 6; // 0x6
    field public static final int PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__USER_DENIED_WITH_PREJUDICE = 7; // 0x7
    field public static final int PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__USER_GRANTED = 4; // 0x4
  }
  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef(prefix="PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__", value={android.util.StatsLogAtoms.PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__IGNORED, android.util.StatsLogAtoms.PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__IGNORED_USER_FIXED, android.util.StatsLogAtoms.PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__IGNORED_POLICY_FIXED, android.util.StatsLogAtoms.PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__USER_GRANTED, android.util.StatsLogAtoms.PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__AUTO_GRANTED, android.util.StatsLogAtoms.PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__USER_DENIED, android.util.StatsLogAtoms.PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__USER_DENIED_WITH_PREJUDICE, android.util.StatsLogAtoms.PERMISSION_GRANT_REQUEST_RESULT_REPORTED__RESULT__AUTO_DENIED}) public static @interface StatsLogAtoms.PermissionGrantRequestResultReported_Result {
  }
}
package android.view {
+43 −0
Original line number Diff line number Diff line
@@ -236,6 +236,7 @@ message Atom {
        BluetoothSmpPairingEventReported bluetooth_smp_pairing_event_reported = 167;
        ScreenTimeoutExtensionReported screen_timeout_extension_reported = 168;
        ProcessStartTime process_start_time = 169;
        PermissionGrantRequestResultReported permission_grant_request_result_reported = 170;
    }

    // Pulled events will start at field 10000.
@@ -5096,6 +5097,48 @@ message SeStateChanged {
    optional string terminal = 3;
}

/**
 * Information about a permission grant request
 */
message PermissionGrantRequestResultReported {
    // unique value identifying an API call. A API call might result in multiple of these atoms
    optional int64 request_id = 1;

    // UID of package requesting the permission grant
    optional int32 requesting_uid = 2 [(is_uid) = true];

    // Name of package requesting the permission grant
    optional string requesting_package_name = 3;

    // The permission to be granted
    optional string permission_name = 4;

    // If the permission was explicitly requested via the API or added by the system
    optional bool is_implicit = 5;

    enum Result {
        UNDEFINED = 0;
        // permission request was ignored
        IGNORED = 1;
        // permission request was ignored because it was user fixed
        IGNORED_USER_FIXED = 2;
        // permission request was ignored because it was policy fixed
        IGNORED_POLICY_FIXED = 3;
        // permission was granted by user action
        USER_GRANTED = 4;
        // permission was automatically granted
        AUTO_GRANTED = 5;
        // permission was denied by user action
        USER_DENIED = 6;
        // permission was denied with prejudice by the user
        USER_DENIED_WITH_PREJUDICE = 7;
        // permission was automatically denied
        AUTO_DENIED = 8;
    }
    // The result of the permission grant
    optional Result result = 6;
}

/**
 * Logs when Omapi API used
 * Logged from:
+17 −4
Original line number Diff line number Diff line
@@ -32,7 +32,8 @@ import com.google.common.io.Files;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
@@ -60,6 +61,7 @@ public class TestDrive {
    };
    private static final Logger LOGGER = Logger.getLogger(TestDrive.class.getName());

    private String mAdditionalAllowedPackage;
    private final Set<Long> mTrackedMetrics = new HashSet<>();

    public static void main(String[] args) {
@@ -69,11 +71,16 @@ public class TestDrive {
        String remoteConfigPath = null;

        if (args.length < 1) {
            LOGGER.log(Level.SEVERE, "Usage: ./test_drive <atomId1> <atomId2> ... <atomIdN>");
            LOGGER.log(Level.SEVERE, "Usage: ./test_drive [-p additional_allowed_package] "
                    + "<atomId1> <atomId2> ... <atomIdN>");
            return;
        }

        for (int i = 0; i < args.length; i++) {
        if (args.length >= 3 && args[0].equals("-p")) {
            testDrive.mAdditionalAllowedPackage = args[1];
        }

        for (int i = testDrive.mAdditionalAllowedPackage == null ? 0 : 2; i < args.length; i++) {
            try {
                int atomId = Integer.valueOf(args[i]);
                if (Atom.getDescriptor().findFieldByNumber(atomId) == null) {
@@ -137,9 +144,15 @@ public class TestDrive {
        long metricId = METRIC_ID_BASE;
        long atomMatcherId = ATOM_MATCHER_ID_BASE;

        ArrayList<String> allowedSources = new ArrayList<>();
        Collections.addAll(allowedSources, ALLOWED_LOG_SOURCES);
        if (mAdditionalAllowedPackage != null) {
            allowedSources.add(mAdditionalAllowedPackage);
        }

        StatsdConfig.Builder builder = StatsdConfig.newBuilder();
        builder
            .addAllAllowedLogSource(Arrays.asList(ALLOWED_LOG_SOURCES))
            .addAllAllowedLogSource(allowedSources)
            .setHashStringsInMetricReport(false);

        for (int atomId : atomIds) {
+15 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.util;

import android.annotation.NonNull;
import android.os.IStatsManager;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -113,4 +114,18 @@ public final class StatsLog extends StatsLogInternal {
        sService = IStatsManager.Stub.asInterface(ServiceManager.getService("stats"));
        return sService;
    }

    /**
     * Add a log to the stats log.
     *
     * @param id The id of the atom
     * @param params The parameters of the atom's message.
     */
    public static void write(int id, @NonNull Object... params) {
        switch (id) {
            case PERMISSION_GRANT_REQUEST_RESULT_REPORTED:
                write(id, (long) params[0], (int) params[1], (String) params[2], (String) params[3],
                        (boolean) params[4], (int) params[5]);
        }
    }
}
Loading