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

Commit 922417db authored by Kunal Malhotra's avatar Kunal Malhotra Committed by Android (Google) Code Review
Browse files

Merge "FGS Type Metrics"

parents f502fb32 2b09f153
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -160,6 +160,7 @@ package android {
    field public static final String LOCAL_MAC_ADDRESS = "android.permission.LOCAL_MAC_ADDRESS";
    field public static final String LOCATION_BYPASS = "android.permission.LOCATION_BYPASS";
    field public static final String LOCK_DEVICE = "android.permission.LOCK_DEVICE";
    field public static final String LOG_PROCESS_ACTIVITIES = "android.permission.LOG_PROCESS_ACTIVITIES";
    field public static final String LOOP_RADIO = "android.permission.LOOP_RADIO";
    field public static final String MANAGE_ACCESSIBILITY = "android.permission.MANAGE_ACCESSIBILITY";
    field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
@@ -534,12 +535,23 @@ package android.app {
    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidImportance(int);
    method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void killProcessesWhenImperceptible(@NonNull int[], @NonNull String);
    method @RequiresPermission(android.Manifest.permission.KILL_UID) public void killUid(int, String);
    method @RequiresPermission(android.Manifest.permission.LOG_PROCESS_ACTIVITIES) public void noteForegroundResourceUse(int, int, int, int);
    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener);
    method public void setDeviceLocales(@NonNull android.os.LocaleList);
    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public static void setPersistentVrThread(int);
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public boolean startProfile(@NonNull android.os.UserHandle);
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public boolean stopProfile(@NonNull android.os.UserHandle);
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean switchUser(@NonNull android.os.UserHandle);
    field public static final int FOREGROUND_SERVICE_API_EVENT_BEGIN = 1; // 0x1
    field public static final int FOREGROUND_SERVICE_API_EVENT_END = 2; // 0x2
    field public static final int FOREGROUND_SERVICE_API_TYPE_BLUETOOTH = 2; // 0x2
    field public static final int FOREGROUND_SERVICE_API_TYPE_CAMERA = 1; // 0x1
    field public static final int FOREGROUND_SERVICE_API_TYPE_CDM = 9; // 0x9
    field public static final int FOREGROUND_SERVICE_API_TYPE_LOCATION = 3; // 0x3
    field public static final int FOREGROUND_SERVICE_API_TYPE_MEDIA_PLAYBACK = 4; // 0x4
    field public static final int FOREGROUND_SERVICE_API_TYPE_MICROPHONE = 6; // 0x6
    field public static final int FOREGROUND_SERVICE_API_TYPE_PHONE_CALL = 7; // 0x7
    field public static final int FOREGROUND_SERVICE_API_TYPE_USB = 8; // 0x8
    field public static final int PROCESS_CAPABILITY_FOREGROUND_CAMERA = 2; // 0x2
    field public static final int PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1; // 0x1
    field public static final int PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 4; // 0x4
+128 −0
Original line number Diff line number Diff line
@@ -636,6 +636,105 @@ public class ActivityManager {
    @Retention(RetentionPolicy.SOURCE)
    public @interface ProcessCapability {}

    /**
     * Used to log FGS API events from CAMERA API
     * @hide
     */
    @SystemApi
    public static final int FOREGROUND_SERVICE_API_TYPE_CAMERA = 1;

    /**
     * Used to log FGS API events from BLUETOOTH API, used
     * with FGS type of CONNECTED_DEVICE
     * @hide
     */
    @SystemApi
    public static final int FOREGROUND_SERVICE_API_TYPE_BLUETOOTH = 2;
    /**
     * Used to log FGS API events from Location API.
     * @hide
     */
    @SystemApi
    public static final int FOREGROUND_SERVICE_API_TYPE_LOCATION = 3;
    /**
     * Used to log FGS API events from media playback API
     * @hide
     */
    @SystemApi
    public static final int FOREGROUND_SERVICE_API_TYPE_MEDIA_PLAYBACK = 4;
    /**
     * Used to log FGS API events from Audio API
     * @hide
     */
    public static final int FOREGROUND_SERVICE_API_TYPE_AUDIO = 5;
    /**
     * Used to log FGS API events from microphone API
     * @hide
     */
    @SystemApi
    public static final int FOREGROUND_SERVICE_API_TYPE_MICROPHONE = 6;
    /**
     * Used to log FGS API events from phone API
     * @hide
     */
    @SystemApi
    public static final int FOREGROUND_SERVICE_API_TYPE_PHONE_CALL = 7;
    /**
     * Used to log FGS API events from USB API
     * @hide
     */
    @SystemApi
    public static final int FOREGROUND_SERVICE_API_TYPE_USB = 8;
    /**
     * Used to log FGS API events from CDM API
     * @hide
     */
    @SystemApi
    public static final int FOREGROUND_SERVICE_API_TYPE_CDM = 9;

    /**
     * Constants used to denote what API type
     * is creating an API event for logging.
     * @hide
     */
    @IntDef(flag = false, prefix = { "FOREGROUND_SERVICE_API_TYPE_" }, value = {
            FOREGROUND_SERVICE_API_TYPE_CAMERA,
            FOREGROUND_SERVICE_API_TYPE_BLUETOOTH,
            FOREGROUND_SERVICE_API_TYPE_LOCATION,
            FOREGROUND_SERVICE_API_TYPE_MEDIA_PLAYBACK,
            FOREGROUND_SERVICE_API_TYPE_AUDIO,
            FOREGROUND_SERVICE_API_TYPE_MICROPHONE,
            FOREGROUND_SERVICE_API_TYPE_PHONE_CALL,
            FOREGROUND_SERVICE_API_TYPE_USB,
            FOREGROUND_SERVICE_API_TYPE_CDM,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ForegroundServiceApiType {}

    /**
     * Used to log a start event for an FGS API
     * @hide
     */
    @SystemApi
    public static final int FOREGROUND_SERVICE_API_EVENT_BEGIN = 1;
    /**
     * Used to log a stop event for an FGS API
     * @hide
     */
    @SystemApi
    public static final int FOREGROUND_SERVICE_API_EVENT_END = 2;
    /**
     * Constants used to denote API state
     * during an API event for logging.
     * @hide
     */
    @IntDef(flag = false, prefix = { "FOREGROUND_SERVICE_API_EVENT_" }, value = {
            FOREGROUND_SERVICE_API_EVENT_BEGIN,
            FOREGROUND_SERVICE_API_EVENT_END,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ForegroundServiceApiEvent {}

    /** @hide Process does not have any capability */
    @SystemApi
    public static final int PROCESS_CAPABILITY_NONE = 0;
@@ -5501,6 +5600,35 @@ public class ActivityManager {
        }
    }

    /**
     * Internal method for logging API starts. Used with
     * FGS metrics logging. Is called by APIs that are
     * used with FGS to log an API event (eg when
     * the camera starts).
     * @hide
     *
     */
    @SystemApi
    @RequiresPermission(android.Manifest.permission.LOG_PROCESS_ACTIVITIES)
    public void noteForegroundResourceUse(@ForegroundServiceApiType int apiType,
            @ForegroundServiceApiEvent int apiEvent, int uid, int pid) {
        try {
            switch (apiEvent) {
                case FOREGROUND_SERVICE_API_EVENT_BEGIN:
                    getService().logFgsApiBegin(apiType, uid, pid);
                    break;
                case FOREGROUND_SERVICE_API_EVENT_END:
                    getService().logFgsApiEnd(apiType, uid, pid);
                    break;
                default:
                    throw new IllegalArgumentException("Argument of "
                            + apiType + " not supported for foreground resource use logging");
            }
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
    }

    /**
     * @return The reason code of whether or not the given UID should be exempted from background
     * restrictions here.
+17 −0
Original line number Diff line number Diff line
@@ -982,4 +982,21 @@ public abstract class ActivityManagerInternal {
     * while it's being created.
     */
    public abstract boolean startProfileEvenWhenDisabled(@UserIdInt int userId);

    /**
     * Internal method for logging foreground service API journey start.
     * Used with FGS metrics logging
     *
     * @hide
     */
    public abstract void logFgsApiBegin(int apiType, int uid, int pid);

    /**
     * Internal method for logging foreground service API journey end.
     * Used with FGS metrics logging
     *
     * @hide
     */
    public abstract void logFgsApiEnd(int apiType, int uid, int pid);

}
+9 −0
Original line number Diff line number Diff line
@@ -873,4 +873,13 @@ interface IActivityManager {

    /** Returns if the service is a short-service is still "alive" and past the timeout. */
    boolean shouldServiceTimeOut(in ComponentName className, in IBinder token);

    /** Logs start of an API call to associate with an FGS, used for FGS Type Metrics */
    oneway void logFgsApiBegin(int apiType, int appUid, int appPid);

    /** Logs stop of an API call to associate with an FGS, used for FGS Type Metrics */
    oneway void logFgsApiEnd(int apiType, int appUid, int appPid);

    /** Logs API state change to associate with an FGS, used for FGS Type Metrics */
    oneway void logFgsApiStateChanged(int apiType, int state, int appUid, int appPid);
}
+5 −0
Original line number Diff line number Diff line
@@ -7599,6 +7599,11 @@
    <permission android:name="android.permission.CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD"
                android:protectionLevel="internal|appop" />

    <!-- @SystemApi Allows to call APIs that log process lifecycle events
         @hide -->
    <permission android:name="android.permission.LOG_PROCESS_ACTIVITIES"
                android:protectionLevel="signature|privileged" />

    <!-- Attribution for Geofencing service. -->
    <attribution android:tag="GeofencingService" android:label="@string/geofencing_service"/>
    <!-- Attribution for Country Detector. -->
Loading