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

Commit 65c14b73 authored by Harini Rajan's avatar Harini Rajan
Browse files

Clean up `replaceBodySensorPermissionEnabled` flag

This change ties the inclusion of new health permissions in
`AppOpsManager`, `ForegroundServiceTypePolicy`, and
`DefaultPermissionGrantPolicy` to the Android B SDK level.

Flag: NONE cleaning up flag
Bug: 360781841
Change-Id: I5874481b463f695ef3d0579fdb7f94420c03001e
parent e5bc2710
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -738,14 +738,14 @@ package android.app {
    field @FlaggedApi("android.permission.flags.ranging_permission_enabled") public static final String OPSTR_RANGING = "android:ranging";
    field @FlaggedApi("android.view.contentprotection.flags.rapid_clear_notifications_by_listener_app_op_enabled") public static final String OPSTR_RAPID_CLEAR_NOTIFICATIONS_BY_LISTENER = "android:rapid_clear_notifications_by_listener";
    field public static final String OPSTR_READ_CLIPBOARD = "android:read_clipboard";
    field @FlaggedApi("android.permission.flags.replace_body_sensor_permission_enabled") public static final String OPSTR_READ_HEART_RATE = "android:read_heart_rate";
    field public static final String OPSTR_READ_HEART_RATE = "android:read_heart_rate";
    field public static final String OPSTR_READ_ICC_SMS = "android:read_icc_sms";
    field public static final String OPSTR_READ_MEDIA_AUDIO = "android:read_media_audio";
    field public static final String OPSTR_READ_MEDIA_IMAGES = "android:read_media_images";
    field public static final String OPSTR_READ_MEDIA_VIDEO = "android:read_media_video";
    field public static final String OPSTR_READ_MEDIA_VISUAL_USER_SELECTED = "android:read_media_visual_user_selected";
    field @FlaggedApi("android.permission.flags.replace_body_sensor_permission_enabled") public static final String OPSTR_READ_OXYGEN_SATURATION = "android:read_oxygen_saturation";
    field @FlaggedApi("android.permission.flags.replace_body_sensor_permission_enabled") public static final String OPSTR_READ_SKIN_TEMPERATURE = "android:read_skin_temperature";
    field public static final String OPSTR_READ_OXYGEN_SATURATION = "android:read_oxygen_saturation";
    field public static final String OPSTR_READ_SKIN_TEMPERATURE = "android:read_skin_temperature";
    field public static final String OPSTR_READ_WRITE_HEALTH_DATA = "android:read_write_health_data";
    field public static final String OPSTR_RECEIVE_AMBIENT_TRIGGER_AUDIO = "android:receive_ambient_trigger_audio";
    field public static final String OPSTR_RECEIVE_EMERGENCY_BROADCAST = "android:receive_emergency_broadcast";
+6 −14
Original line number Diff line number Diff line
@@ -2647,17 +2647,14 @@ public class AppOpsManager {

    /** @hide Access to read heart rate sensor. */
    @SystemApi
    @FlaggedApi(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
    public static final String OPSTR_READ_HEART_RATE = "android:read_heart_rate";

    /** @hide Access to read oxygen saturation. */
    @SystemApi
    @FlaggedApi(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
    public static final String OPSTR_READ_OXYGEN_SATURATION = "android:read_oxygen_saturation";

    /** @hide Access to read skin temperature. */
    @SystemApi
    @FlaggedApi(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
    public static final String OPSTR_READ_SKIN_TEMPERATURE = "android:read_skin_temperature";

    /** @hide Access to ranging */
@@ -2793,9 +2790,9 @@ public class AppOpsManager {
            // Notifications
            OP_POST_NOTIFICATION,
            // Health
            Flags.replaceBodySensorPermissionEnabled() ? OP_READ_HEART_RATE : OP_NONE,
            Flags.replaceBodySensorPermissionEnabled() ? OP_READ_SKIN_TEMPERATURE : OP_NONE,
            Flags.replaceBodySensorPermissionEnabled() ? OP_READ_OXYGEN_SATURATION : OP_NONE,
            OP_READ_HEART_RATE,
            OP_READ_SKIN_TEMPERATURE,
            OP_READ_OXYGEN_SATURATION,
            // Android XR
            android.xr.Flags.xrManifestEntries() ? OP_EYE_TRACKING_COARSE : OP_NONE,
            android.xr.Flags.xrManifestEntries() ? OP_EYE_TRACKING_FINE : OP_NONE,
@@ -3318,22 +3315,17 @@ public class AppOpsManager {
                OPSTR_RECEIVE_SENSITIVE_NOTIFICATIONS, "RECEIVE_SENSITIVE_NOTIFICATIONS")
                .setDefaultMode(MODE_IGNORED).build(),
        new AppOpInfo.Builder(OP_READ_HEART_RATE, OPSTR_READ_HEART_RATE, "READ_HEART_RATE")
            .setPermission(Flags.replaceBodySensorPermissionEnabled() ?
                HealthPermissions.READ_HEART_RATE : null)
            .setPermission(HealthPermissions.READ_HEART_RATE)
            .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
        new AppOpInfo.Builder(OP_READ_SKIN_TEMPERATURE, OPSTR_READ_SKIN_TEMPERATURE,
            "READ_SKIN_TEMPERATURE").setPermission(
                Flags.replaceBodySensorPermissionEnabled()
                    ? HealthPermissions.READ_SKIN_TEMPERATURE : null)
            "READ_SKIN_TEMPERATURE").setPermission(HealthPermissions.READ_SKIN_TEMPERATURE)
            .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
        new AppOpInfo.Builder(OP_RANGING, OPSTR_RANGING, "RANGING")
            .setPermission(Flags.rangingPermissionEnabled()?
                Manifest.permission.RANGING : null)
            .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
        new AppOpInfo.Builder(OP_READ_OXYGEN_SATURATION, OPSTR_READ_OXYGEN_SATURATION,
            "READ_OXYGEN_SATURATION").setPermission(
                Flags.replaceBodySensorPermissionEnabled()
                    ? HealthPermissions.READ_OXYGEN_SATURATION : null)
            "READ_OXYGEN_SATURATION").setPermission(HealthPermissions.READ_OXYGEN_SATURATION)
            .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
        new AppOpInfo.Builder(OP_WRITE_SYSTEM_PREFERENCES, OPSTR_WRITE_SYSTEM_PREFERENCES,
            "WRITE_SYSTEM_PREFERENCES").setPermission(
+3 −7
Original line number Diff line number Diff line
@@ -514,13 +514,9 @@ public abstract class ForegroundServiceTypePolicy {
        permissions.add(new RegularPermission(Manifest.permission.ACTIVITY_RECOGNITION));
        permissions.add(new RegularPermission(Manifest.permission.HIGH_SAMPLING_RATE_SENSORS));

        if (android.permission.flags.Flags.replaceBodySensorPermissionEnabled()) {
        permissions.add(new RegularPermission(HealthPermissions.READ_HEART_RATE));
        permissions.add(new RegularPermission(HealthPermissions.READ_SKIN_TEMPERATURE));
        permissions.add(new RegularPermission(HealthPermissions.READ_OXYGEN_SATURATION));
        } else {
            permissions.add(new RegularPermission(Manifest.permission.BODY_SENSORS));
        }

        return permissions.toArray(new ForegroundServiceTypePermission[permissions.size()]);
    }
+6 −6
Original line number Diff line number Diff line
@@ -81,16 +81,16 @@ public class ParsedPermissionUtils {
                    R.styleable.AndroidManifestPermission_backgroundPermission)) {
                final boolean isApkInApex = (flags & PARSE_APK_IN_APEX) != 0;
                final boolean canUseBackgroundPermissionAttr =
                    "android".equals(packageName) ||
                        (Flags.replaceBodySensorPermissionEnabled() && isApkInApex);
                        "android".equals(packageName) || isApkInApex;
                if (canUseBackgroundPermissionAttr) {
                    permission.setBackgroundPermission(sa.getNonResourceString(
                        R.styleable.AndroidManifestPermission_backgroundPermission));
                } else {
                    String allowedPackages = "'android'"
                        + (Flags.replaceBodySensorPermissionEnabled() ? " and APK_IN_APEX" : "");
                    Slog.w(TAG, packageName + " defines a background permission. Only the "
                        + allowedPackages + " packages can do that.");
                    Slog.w(
                            TAG,
                            packageName
                                    + " defines a background permission. Only the 'android' and"
                                    + " APK_IN_APEX packages can do that.");
                }
            }

+3 −5
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ import android.os.Process;
import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.permission.PermissionManager;
import android.permission.flags.Flags;
import android.print.PrintManager;
import android.provider.CalendarContract;
import android.provider.ContactsContract;
@@ -220,11 +219,10 @@ final class DefaultPermissionGrantPolicy {
        SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS);
        SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS_BACKGROUND);

        if (Flags.replaceBodySensorPermissionEnabled()) {

        SENSORS_PERMISSIONS.add(HealthPermissions.READ_HEART_RATE);
        SENSORS_PERMISSIONS.add(HealthPermissions.READ_HEALTH_DATA_IN_BACKGROUND);
    }
    }

    private static final Set<String> STORAGE_PERMISSIONS = new ArraySet<>();
    static {
Loading