summaryrefslogtreecommitdiff
path: root/AndroidManifest.xml
blob: 336b250556116cd0f8c6d6c584647fa19fc9a16b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.android.providers.downloads"
        android:sharedUserId="android.media">

    <!-- Allows access to the Download Manager -->
    <permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"
        android:label="@string/permlab_downloadManager"
        android:description="@string/permdesc_downloadManager"
        android:protectionLevel="signatureOrSystem" />

    <!-- Allows advanced access to the Download Manager -->
    <permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED"
        android:label="@string/permlab_downloadManagerAdvanced"
        android:description="@string/permdesc_downloadManagerAdvanced"
        android:protectionLevel="signatureOrSystem" />

    <!-- Allows to send download completed intents -->
    <permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS"
        android:label="@string/permlab_downloadCompletedIntent"
        android:description="@string/permdesc_downloadCompletedIntent"
        android:protectionLevel="signature" />

    <!-- Allows to download non-purgeable files to the cache partition through the public API -->
    <permission android:name="android.permission.DOWNLOAD_CACHE_NON_PURGEABLE"
        android:label="@string/permlab_downloadCacheNonPurgeable"
        android:description="@string/permdesc_downloadCacheNonPurgeable"
        android:protectionLevel="signatureOrSystem"/>

    <!-- Allows to queue downloads without a notification shown while the download runs. -->
    <permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"
        android:permissionGroup="android.permission-group.NETWORK"
        android:label="@string/permlab_downloadWithoutNotification"
        android:description="@string/permdesc_downloadWithoutNotification"
        android:protectionLevel="normal"/>

    <!-- Allows an app to access all downloads in the system via the /all_downloads/ URIs.  The
         protection level could be relaxed in the future to support third-party download
         managers. -->
    <permission android:name="android.permission.ACCESS_ALL_DOWNLOADS"
        android:label="@string/permlab_accessAllDownloads"
        android:description="@string/permdesc_accessAllDownloads"
        android:protectionLevel="signature"/>

    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
    <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
    <uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_ALL_DOWNLOADS" />
    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
    <!-- TODO: replace with READ_NETWORK_POLICY permission when it exists -->
    <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
    <uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
    <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/>
    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"/>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

    <application android:process="android.process.media"
                 android:label="@string/app_label"
                 android:icon="@mipmap/ic_launcher_download"
                 android:allowBackup="false"
                 android:supportsRtl="true"
                 android:forceQueryable="true"
                 android:usesCleartextTraffic="true">

        <provider android:name=".DownloadProvider"
                  android:authorities="downloads" android:exported="true">
          <!-- Anyone can access /my_downloads, the provider internally restricts access by UID for
               these URIs -->
          <path-permission android:pathPrefix="/my_downloads"
                           android:permission="android.permission.INTERNET"/>
          <!-- to access /all_downloads, ACCESS_ALL_DOWNLOADS permission is required -->
          <path-permission android:pathPrefix="/all_downloads"
                           android:permission="android.permission.ACCESS_ALL_DOWNLOADS"/>
          <!-- Temporary, for backwards compatibility -->
          <path-permission android:pathPrefix="/download"
                           android:permission="android.permission.INTERNET"/>
          <!-- Apps with access to /all_downloads/... can grant permissions, allowing them to share
               downloaded files with other viewers -->
          <grant-uri-permission android:pathPrefix="/all_downloads/"/>
          <!-- Apps with access to /my_downloads/... can grant permissions, allowing them to share
               downloaded files with other viewers -->
          <grant-uri-permission android:pathPrefix="/my_downloads/"/>
        </provider>

        <provider
            android:name=".DownloadStorageProvider"
            android:label="@string/storage_description"
            android:authorities="com.android.providers.downloads.documents"
            android:grantUriPermissions="true"
            android:exported="true"
            android:permission="android.permission.MANAGE_DOCUMENTS">
            <intent-filter>
                <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
            </intent-filter>
        </provider>

        <service
            android:name=".DownloadJobService"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE" />

        <service
            android:name=".DownloadIdleService"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE" />

        <service
                android:name=".MediaScanTriggerJob"
                android:exported="true"
                android:permission="android.permission.BIND_JOB_SERVICE" />

        <receiver android:name=".DownloadReceiver" android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.UID_REMOVED" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_MOUNTED" />
                <data android:scheme="file" />
            </intent-filter>
        </receiver>
    </application>
</manifest>