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

Commit 6621b2b5 authored by Jing Ji's avatar Jing Ji Committed by Android (Google) Code Review
Browse files

Merge "Add foreground service type "fileManagement""

parents 8d4b0389 8ef80d30
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ package android {
    field public static final String FOREGROUND_SERVICE_CAMERA = "android.permission.FOREGROUND_SERVICE_CAMERA";
    field public static final String FOREGROUND_SERVICE_CONNECTED_DEVICE = "android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE";
    field public static final String FOREGROUND_SERVICE_DATA_SYNC = "android.permission.FOREGROUND_SERVICE_DATA_SYNC";
    field public static final String FOREGROUND_SERVICE_FILE_MANAGEMENT = "android.permission.FOREGROUND_SERVICE_FILE_MANAGEMENT";
    field public static final String FOREGROUND_SERVICE_HEALTH = "android.permission.FOREGROUND_SERVICE_HEALTH";
    field public static final String FOREGROUND_SERVICE_LOCATION = "android.permission.FOREGROUND_SERVICE_LOCATION";
    field public static final String FOREGROUND_SERVICE_MEDIA_PLAYBACK = "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK";
@@ -12470,6 +12471,7 @@ package android.content.pm {
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_CAMERA}, anyOf={android.Manifest.permission.CAMERA}, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_CAMERA = 64; // 0x40
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE}, anyOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.CHANGE_NETWORK_STATE, android.Manifest.permission.CHANGE_WIFI_STATE, android.Manifest.permission.CHANGE_WIFI_MULTICAST_STATE, android.Manifest.permission.NFC, android.Manifest.permission.TRANSMIT_IR}, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE = 16; // 0x10
    field @Deprecated @RequiresPermission(value=android.Manifest.permission.FOREGROUND_SERVICE_DATA_SYNC, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_DATA_SYNC = 1; // 0x1
    field @RequiresPermission(android.Manifest.permission.FOREGROUND_SERVICE_FILE_MANAGEMENT) public static final int FOREGROUND_SERVICE_TYPE_FILE_MANAGEMENT = 4096; // 0x1000
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_HEALTH}, anyOf={android.Manifest.permission.ACTIVITY_RECOGNITION, android.Manifest.permission.BODY_SENSORS, android.Manifest.permission.HIGH_SAMPLING_RATE_SENSORS}, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_HEALTH = 256; // 0x100
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_LOCATION}, anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_LOCATION = 8; // 0x8
    field public static final int FOREGROUND_SERVICE_TYPE_MANIFEST = -1; // 0xffffffff
@@ -12478,10 +12480,10 @@ package android.content.pm {
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_MICROPHONE}, anyOf={android.Manifest.permission.CAPTURE_AUDIO_OUTPUT, android.Manifest.permission.RECORD_AUDIO}, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_MICROPHONE = 128; // 0x80
    field @Deprecated public static final int FOREGROUND_SERVICE_TYPE_NONE = 0; // 0x0
    field @RequiresPermission(allOf={android.Manifest.permission.FOREGROUND_SERVICE_PHONE_CALL}, anyOf={android.Manifest.permission.MANAGE_OWN_CALLS}, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_PHONE_CALL = 4; // 0x4
    field @RequiresPermission(value=android.Manifest.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING = 512; // 0x200
    field @RequiresPermission(android.Manifest.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING) public static final int FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING = 512; // 0x200
    field public static final int FOREGROUND_SERVICE_TYPE_SHORT_SERVICE = 2048; // 0x800
    field @RequiresPermission(value=android.Manifest.permission.FOREGROUND_SERVICE_SPECIAL_USE, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_SPECIAL_USE = 1073741824; // 0x40000000
    field @RequiresPermission(value=android.Manifest.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED, conditional=true) public static final int FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED = 1024; // 0x400
    field @RequiresPermission(android.Manifest.permission.FOREGROUND_SERVICE_SPECIAL_USE) public static final int FOREGROUND_SERVICE_TYPE_SPECIAL_USE = 1073741824; // 0x40000000
    field @RequiresPermission(android.Manifest.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED) public static final int FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED = 1024; // 0x400
    field public int flags;
    field public String permission;
  }
+19 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_FILE_MANAGEMENT;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_HEALTH;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_MANIFEST;
@@ -411,6 +412,22 @@ public abstract class ForegroundServiceTypePolicy {
            null /* no type specific permissions */, null /* no type specific permissions */
    );

    /**
     * The policy for the {@link ServiceInfo#FOREGROUND_SERVICE_TYPE_FILE_MANAGEMENT}.
     *
     * @hide
     */
    public static final @NonNull ForegroundServiceTypePolicyInfo FGS_TYPE_POLICY_FILE_MANAGEMENT =
            new ForegroundServiceTypePolicyInfo(
            FOREGROUND_SERVICE_TYPE_FILE_MANAGEMENT,
            ForegroundServiceTypePolicyInfo.INVALID_CHANGE_ID,
            ForegroundServiceTypePolicyInfo.INVALID_CHANGE_ID,
            new ForegroundServiceTypePermissions(new ForegroundServiceTypePermission[] {
                new RegularPermission(Manifest.permission.FOREGROUND_SERVICE_FILE_MANAGEMENT)
            }, true),
            null
    );

    /**
     * The policy for the {@link ServiceInfo#FOREGROUND_SERVICE_TYPE_SPECIAL_USE}.
     *
@@ -1057,6 +1074,8 @@ public abstract class ForegroundServiceTypePolicy {
                    FGS_TYPE_POLICY_SYSTEM_EXEMPTED);
            mForegroundServiceTypePolicies.put(FOREGROUND_SERVICE_TYPE_SHORT_SERVICE,
                    FGS_TYPE_POLICY_SHORT_SERVICE);
            mForegroundServiceTypePolicies.put(FOREGROUND_SERVICE_TYPE_FILE_MANAGEMENT,
                    FGS_TYPE_POLICY_FILE_MANAGEMENT);
            mForegroundServiceTypePolicies.put(FOREGROUND_SERVICE_TYPE_SPECIAL_USE,
                    FGS_TYPE_POLICY_SPECIAL_USE);
        }
+18 −7
Original line number Diff line number Diff line
@@ -331,8 +331,7 @@ public class ServiceInfo extends ComponentInfo
     * Messaging use cases which host local server to relay messages across devices.
     */
    @RequiresPermission(
            value = Manifest.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING,
            conditional = true
            value = Manifest.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING
    )
    public static final int FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING = 1 << 9;

@@ -360,8 +359,7 @@ public class ServiceInfo extends ComponentInfo
     * </p>
     */
    @RequiresPermission(
            value = Manifest.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED,
            conditional = true
            value = Manifest.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED
    )
    public static final int FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED = 1 << 10;

@@ -411,6 +409,17 @@ public class ServiceInfo extends ComponentInfo
     */
    public static final int FOREGROUND_SERVICE_TYPE_SHORT_SERVICE = 1 << 11;

    /**
     * Constant corresponding to {@code fileManagement} in
     * the {@link android.R.attr#foregroundServiceType} attribute.
     * The file management use case which manages files/directories, often involving file I/O
     * across the file system.
     */
    @RequiresPermission(
            value = Manifest.permission.FOREGROUND_SERVICE_FILE_MANAGEMENT
    )
    public static final int FOREGROUND_SERVICE_TYPE_FILE_MANAGEMENT = 1 << 12;

    /**
     * Constant corresponding to {@code specialUse} in
     * the {@link android.R.attr#foregroundServiceType} attribute.
@@ -457,8 +466,7 @@ public class ServiceInfo extends ComponentInfo
     * </pre>
     */
    @RequiresPermission(
            value = Manifest.permission.FOREGROUND_SERVICE_SPECIAL_USE,
            conditional = true
            value = Manifest.permission.FOREGROUND_SERVICE_SPECIAL_USE
    )
    public static final int FOREGROUND_SERVICE_TYPE_SPECIAL_USE = 1 << 30;

@@ -495,7 +503,8 @@ public class ServiceInfo extends ComponentInfo
            FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING,
            FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED,
            FOREGROUND_SERVICE_TYPE_SHORT_SERVICE,
            FOREGROUND_SERVICE_TYPE_SPECIAL_USE
            FOREGROUND_SERVICE_TYPE_FILE_MANAGEMENT,
            FOREGROUND_SERVICE_TYPE_SPECIAL_USE,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ForegroundServiceType {}
@@ -579,6 +588,8 @@ public class ServiceInfo extends ComponentInfo
                return "systemExempted";
            case FOREGROUND_SERVICE_TYPE_SHORT_SERVICE:
                return "shortService";
            case FOREGROUND_SERVICE_TYPE_FILE_MANAGEMENT:
                return "fileManagement";
            case FOREGROUND_SERVICE_TYPE_SPECIAL_USE:
                return "specialUse";
            default:
+9 −0
Original line number Diff line number Diff line
@@ -6285,6 +6285,15 @@
        android:label="@string/permlab_foregroundServiceSystemExempted"
        android:protectionLevel="normal|instant" />

    <!-- Allows a regular application to use {@link android.app.Service#startForeground
         Service.startForeground} with the type "fileManagement".
         <p>Protection level: normal|instant
    -->
    <permission android:name="android.permission.FOREGROUND_SERVICE_FILE_MANAGEMENT"
        android:description="@string/permdesc_foregroundServiceFileManagement"
        android:label="@string/permlab_foregroundServiceFileManagement"
        android:protectionLevel="normal|instant" />

    <!-- Allows a regular application to use {@link android.app.Service#startForeground
         Service.startForeground} with the type "specialUse".
         <p>Protection level: normal|appop|instant
+7 −0
Original line number Diff line number Diff line
@@ -1709,6 +1709,13 @@
           for more details.
        -->
        <flag name="shortService" value="0x800" />
        <!-- The file management use case which manages files/directories, often involving file I/O
            across the file system.
            <p>Requires the app to hold the permission
            {@link android.Manifest.permission#FOREGROUND_SERVICE_FILE_MANAGEMENT} in order to use
            this type.
        -->
        <flag name="fileManagement" value="0x1000" />
        <!-- Use cases that can't be categorized into any other foreground service types, but also
            can't use @link android.app.job.JobInfo.Builder} APIs.
            See {@link android.content.pm.ServiceInfo#FOREGROUND_SERVICE_TYPE_SPECIAL_USE} for the
Loading