1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3        package="com.android.providers.downloads"
4        android:sharedUserId="android.media">
5
6    <!-- Allows access to the Download Manager -->
7    <permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"
8        android:label="@string/permlab_downloadManager"
9        android:description="@string/permdesc_downloadManager"
10        android:protectionLevel="signatureOrSystem" />
11
12    <!-- Allows advanced access to the Download Manager -->
13    <permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED"
14        android:label="@string/permlab_downloadManagerAdvanced"
15        android:description="@string/permdesc_downloadManagerAdvanced"
16        android:protectionLevel="signatureOrSystem" />
17
18    <!-- Allows to send download completed intents -->
19    <permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS"
20        android:label="@string/permlab_downloadCompletedIntent"
21        android:description="@string/permdesc_downloadCompletedIntent"
22        android:protectionLevel="signature" />
23
24    <!-- Allows to download non-purgeable files to the cache partition through the public API -->
25    <permission android:name="android.permission.DOWNLOAD_CACHE_NON_PURGEABLE"
26        android:label="@string/permlab_downloadCacheNonPurgeable"
27        android:description="@string/permdesc_downloadCacheNonPurgeable"
28        android:protectionLevel="signatureOrSystem"/>
29
30    <!-- Allows to queue downloads without a notification shown while the download runs. -->
31    <permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"
32        android:permissionGroup="android.permission-group.NETWORK"
33        android:label="@string/permlab_downloadWithoutNotification"
34        android:description="@string/permdesc_downloadWithoutNotification"
35        android:protectionLevel="normal"/>
36
37    <!-- Allows an app to access all downloads in the system via the /all_downloads/ URIs.  The
38         protection level could be relaxed in the future to support third-party download
39         managers. -->
40    <permission android:name="android.permission.ACCESS_ALL_DOWNLOADS"
41        android:label="@string/permlab_accessAllDownloads"
42        android:description="@string/permdesc_accessAllDownloads"
43        android:protectionLevel="signature"/>
44
45    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
46    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
47    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
48    <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
49    <uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" />
50    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
51    <uses-permission android:name="android.permission.INTERNET" />
52    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
53    <uses-permission android:name="android.permission.ACCESS_ALL_DOWNLOADS" />
54    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
55    <!-- TODO: replace with READ_NETWORK_POLICY permission when it exists -->
56    <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
57    <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
58    <uses-permission android:name="android.permission.WAKE_LOCK" />
59    <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
60    <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/>
61    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
62    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
63    <uses-permission android:name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"/>
64    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
65
66    <application android:process="android.process.media"
67                 android:label="@string/app_label"
68                 android:icon="@mipmap/ic_launcher_download"
69                 android:allowBackup="false"
70                 android:supportsRtl="true"
71                 android:forceQueryable="true"
72                 android:usesCleartextTraffic="true">
73
74        <provider android:name=".DownloadProvider"
75                  android:authorities="downloads" android:exported="true">
76          <!-- Anyone can access /my_downloads, the provider internally restricts access by UID for
77               these URIs -->
78          <path-permission android:pathPrefix="/my_downloads"
79                           android:permission="android.permission.INTERNET"/>
80          <!-- to access /all_downloads, ACCESS_ALL_DOWNLOADS permission is required -->
81          <path-permission android:pathPrefix="/all_downloads"
82                           android:permission="android.permission.ACCESS_ALL_DOWNLOADS"/>
83          <!-- Temporary, for backwards compatibility -->
84          <path-permission android:pathPrefix="/download"
85                           android:permission="android.permission.INTERNET"/>
86          <!-- Apps with access to /all_downloads/... can grant permissions, allowing them to share
87               downloaded files with other viewers -->
88          <grant-uri-permission android:pathPrefix="/all_downloads/"/>
89          <!-- Apps with access to /my_downloads/... can grant permissions, allowing them to share
90               downloaded files with other viewers -->
91          <grant-uri-permission android:pathPrefix="/my_downloads/"/>
92        </provider>
93
94        <provider
95            android:name=".DownloadStorageProvider"
96            android:label="@string/storage_description"
97            android:authorities="com.android.providers.downloads.documents"
98            android:grantUriPermissions="true"
99            android:exported="true"
100            android:permission="android.permission.MANAGE_DOCUMENTS">
101            <intent-filter>
102                <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
103            </intent-filter>
104        </provider>
105
106        <service
107            android:name=".DownloadJobService"
108            android:exported="true"
109            android:permission="android.permission.BIND_JOB_SERVICE" />
110
111        <service
112            android:name=".DownloadIdleService"
113            android:exported="true"
114            android:permission="android.permission.BIND_JOB_SERVICE" />
115
116        <service
117                android:name=".MediaScanTriggerJob"
118                android:exported="true"
119                android:permission="android.permission.BIND_JOB_SERVICE" />
120
121        <receiver android:name=".DownloadReceiver" android:exported="false">
122            <intent-filter>
123                <action android:name="android.intent.action.BOOT_COMPLETED" />
124                <action android:name="android.intent.action.UID_REMOVED" />
125            </intent-filter>
126            <intent-filter>
127                <action android:name="android.intent.action.MEDIA_MOUNTED" />
128                <data android:scheme="file" />
129            </intent-filter>
130        </receiver>
131    </application>
132</manifest>
133