1<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2          xmlns:tools="http://schemas.android.com/tools"
3        package="com.android.providers.media.module">
4
5    <meta-data
6        android:name="com.android.providers.media.photopicker.data.glide.PickerGlideModule"
7        android:value="GlideModule" />
8
9    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
10    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
11    <uses-permission android:name="android.permission.WAKE_LOCK" />
12    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
13
14    <uses-permission android:name="android.permission.MANAGE_USERS" />
15    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
16    <!-- Permission required  to prompt for the work profile to be turned on -->
17    <uses-permission android:name="android.permission.MODIFY_QUIET_MODE" />
18
19    <uses-permission android:name="android.permission.WATCH_APPOPS" />
20    <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
21    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
22
23    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
24    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
25    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
26    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
27    <uses-permission android:name="android.permission.USE_RESERVED_DISK" android:maxSdkVersion="34" />
28    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
29    <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS" />
30    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
31
32    <!-- Permissions required for reading and logging compat changes -->
33    <uses-permission android:name="android.permission.LOG_COMPAT_CHANGE"/>
34    <uses-permission android:name="android.permission.READ_COMPAT_CHANGE_CONFIG"/>
35
36    <!-- Permissions required for reading device configs -->
37    <uses-permission android:name="android.permission.READ_DEVICE_CONFIG"/>
38
39    <uses-permission android:name="android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND"/>
40
41    <!-- Permissions required for statsd pull metrics -->
42    <uses-permission android:name="android.permission.REGISTER_STATS_PULL_ATOM"/>
43
44    <!-- Permissions required to check if an app is in the foreground or not during IO -->
45    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
46
47    <!-- Permission required to access CloudMediaProviders. Declared by us -->
48    <uses-permission android:name="com.android.providers.media.permission.MANAGE_CLOUD_MEDIA_PROVIDERS" />
49
50    <!-- Permission required to bind to MediaCognitionService. Declared by us -->
51    <uses-permission android:name="com.android.providers.media.permission.BIND_MEDIA_COGNITION_SERVICE" />
52
53    <!-- Permission required to access OEM metadata. Declared by us -->
54    <uses-permission
55        android:name="com.android.providers.media.permission.ACCESS_OEM_METADATA" />
56
57    <!-- Permission required to bind to OemMetadataService -->
58    <uses-permission android:name="com.android.providers.media.permission.BIND_OEM_METADATA_SERVICE" />
59
60    <!-- Allows an application to have access to OWNER_PACKAGE_NAME field of accessible media files.
61         Applications are still required to have read access to media files.
62         <p>Protection level: normal -->
63    <permission android:name="com.android.providers.media.permission.ACCESS_MEDIA_OWNER_PACKAGE_NAME"
64                android:label="@string/permlab_accessMediaOwnerPackageName"
65                android:description="@string/permdesc_accessMediaOwnerPackageName"
66                android:protectionLevel="normal" />
67
68    <permission android:name="com.android.providers.media.permission.MANAGE_CLOUD_MEDIA_PROVIDERS"
69                android:protectionLevel="signature" />
70
71    <permission android:name="com.android.providers.media.permission.BIND_MEDIA_COGNITION_SERVICE"
72                android:protectionLevel="signature"/>
73
74    <permission android:name="com.android.providers.media.permission.ACCESS_OEM_METADATA"
75                android:protectionLevel="signature|privileged" />
76
77    <permission android:name="com.android.providers.media.permission.BIND_OEM_METADATA_SERVICE"
78                android:protectionLevel="signature"/>
79
80    <!-- We use Photo Picker app icon and label for this package. It is necessary for Photo Picker
81         GET_CONTENT take over. Some apps query packages that can handle GET_CONTENT and want to
82         display the icon and label of the package to the user. -->
83    <application
84            android:name="com.android.providers.media.MediaApplication"
85            android:label="@string/picker_app_label"
86            android:icon="@mipmap/picker_app_icon"
87            android:allowBackup="false"
88            android:supportsRtl="true"
89            android:forceQueryable="true"
90            android:usesCleartextTraffic="true"
91            android:crossProfile="true">
92        <provider
93                android:name="com.android.providers.media.MediaProvider"
94                android:authorities="media"
95                android:grantUriPermissions="true"
96                android:forceUriPermissions="true"
97                android:exported="true" />
98
99        <provider
100                android:name="com.android.providers.media.MediaDocumentsProvider"
101                android:label="@string/storage_description"
102                android:authorities="com.android.providers.media.documents"
103                android:grantUriPermissions="true"
104                android:exported="true"
105                android:permission="android.permission.MANAGE_DOCUMENTS">
106            <intent-filter>
107                <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
108            </intent-filter>
109        </provider>
110
111        <provider
112            android:name="com.android.providers.media.photopicker.PhotoPickerProvider"
113            android:authorities="com.android.providers.media.photopicker"
114            android:exported="true"
115            android:permission="com.android.providers.media.permission.MANAGE_CLOUD_MEDIA_PROVIDERS" />
116
117        <provider
118            android:name="com.android.providers.media.photopicker.RemoteVideoPreviewProvider"
119            android:process=":PhotoPicker"
120            android:authorities="com.android.providers.media.remote_video_preview"
121            android:permission="com.android.providers.media.permission.MANAGE_CLOUD_MEDIA_PROVIDERS"
122            android:exported="true" />
123
124        <!-- Don't initialise WorkManager by default at startup -->
125        <provider
126            android:name="androidx.startup.InitializationProvider"
127            android:authorities="${applicationId}.androidx-startup"
128            android:exported="false"
129            tools:node="merge">
130            <meta-data
131                android:name="androidx.work.WorkManagerInitializer"
132                android:value="androidx.startup"
133                tools:node="remove" />
134        </provider>
135
136        <!-- Handles database upgrades after OTAs, then disables itself -->
137        <receiver android:name="com.android.providers.media.MediaUpgradeReceiver"
138            android:exported="true">
139            <!-- This broadcast is sent after the core system has finished
140                 booting, before the home app is launched or BOOT_COMPLETED
141                 is sent. -->
142            <intent-filter>
143                <action android:name="android.intent.action.PRE_BOOT_COMPLETED"/>
144            </intent-filter>
145        </receiver>
146
147        <receiver android:name="com.android.providers.media.MediaReceiver"
148            android:exported="true">
149            <intent-filter>
150                <action android:name="android.intent.action.BOOT_COMPLETED" />
151            </intent-filter>
152            <intent-filter>
153                <action android:name="android.intent.action.LOCALE_CHANGED" />
154            </intent-filter>
155            <intent-filter>
156                <action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
157                <action android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
158                <data android:scheme="package" />
159            </intent-filter>
160            <intent-filter>
161                <action android:name="android.intent.action.MEDIA_MOUNTED" />
162                <data android:scheme="file" />
163            </intent-filter>
164            <intent-filter>
165                <action android:name="android.intent.action.MEDIA_SCANNER_SCAN_FILE" />
166                <data android:scheme="file" />
167            </intent-filter>
168        </receiver>
169
170        <service
171            android:name="com.android.providers.media.IdleService"
172            android:exported="true"
173            android:permission="android.permission.BIND_JOB_SERVICE" />
174
175        <service
176            android:name="com.android.providers.media.MediaService"
177            android:exported="true"
178            android:permission="android.permission.BIND_JOB_SERVICE" />
179
180        <service
181            android:name=
182                "com.android.providers.media.stableuris.job.StableUriIdleMaintenanceService"
183            android:exported="true"
184            android:permission="android.permission.BIND_JOB_SERVICE"/>
185
186        <service android:name="com.android.providers.media.fuse.ExternalStorageServiceImpl"
187                 android:exported="true"
188                 android:permission="android.permission.BIND_EXTERNAL_STORAGE_SERVICE">
189            <intent-filter>
190                <action android:name="android.service.storage.ExternalStorageService" />
191            </intent-filter>
192        </service>
193
194        <activity
195                android:name="com.android.providers.media.PermissionActivity"
196                android:configChanges="orientation|keyboardHidden|screenSize"
197                android:theme="@style/PickerDialogTheme"
198                android:exported="false"
199                android:excludeFromRecents="true" />
200
201        <activity
202                android:name="com.android.providers.media.CacheClearingActivity"
203                android:configChanges="orientation|keyboardHidden|screenSize"
204                android:exported="true"
205                android:theme="@style/CacheClearingAlertDialogTheme"
206                android:finishOnCloseSystemDialogs="true"
207                android:launchMode="singleTop"
208                android:excludeFromRecents="true"
209                android:visibleToInstantApps="true" >
210            <intent-filter android:priority="100">
211                <action android:name="android.os.storage.action.CLEAR_APP_CACHE" />
212                <category android:name="android.intent.category.DEFAULT" />
213            </intent-filter>
214        </activity>
215
216        <activity
217                android:name="com.android.providers.media.photopicker.PhotoPickerActivity"
218                android:process=":PhotoPicker"
219                android:label="@string/picker_app_label"
220                android:theme="@style/PickerDefaultTheme"
221                android:exported="true"
222                android:excludeFromRecents="true"
223                android:colorMode="wideColorGamut">
224            <intent-filter android:priority="100" >
225                <action android:name="android.provider.action.PICK_IMAGES" />
226                <category android:name="android.intent.category.DEFAULT" />
227                <data android:mimeType="image/*" />
228                <data android:mimeType="video/*" />
229            </intent-filter>
230            <intent-filter android:priority="100" >
231                <action android:name="android.provider.action.PICK_IMAGES" />
232                <category android:name="android.intent.category.DEFAULT" />
233            </intent-filter>
234        </activity>
235
236        <activity
237            android:name="com.android.providers.media.photopicker.PhotoPickerSettingsActivity"
238            android:theme="@style/PickerSettingsDefaultTheme"
239            android:launchMode="singleInstance"
240            android:process=":PhotoPicker"
241            android:excludeFromRecents="false"
242            android:exported="true"
243            android:enabled="false" >
244
245            <intent-filter android:priority="100" >
246                <action android:name="android.provider.action.PICK_IMAGES_SETTINGS" />
247                <category android:name="android.intent.category.DEFAULT" />
248            </intent-filter>
249
250            <!-- ============== BEGIN SYSTEM SETTINGS MENU ITEM SECTION ============== -->
251            <intent-filter>
252                <action android:name="com.android.settings.action.IA_SETTINGS"/>
253                <category android:name="android.intent.category.DEFAULT"/>
254            </intent-filter>
255
256            <meta-data
257                android:name="com.android.settings.category"
258                android:value="com.android.settings.category.ia.apps"/>
259            <meta-data
260                android:name="com.android.settings.title"
261                android:resource="@string/picker_settings_system_settings_menu_title"/>
262            <meta-data
263                android:name="com.android.settings.summary_uri"
264                android:value="content://media/get_cloud_provider_label"/>
265            <meta-data
266                android:name="com.android.settings.profile"
267                android:value="primary_profile_only"/>
268            <!-- ============== END BEGIN SYSTEM SETTINGS MENU ITEM SECTION ============== -->
269        </activity>
270
271        <activity-alias
272            android:name="com.android.providers.media.photopicker.PhotoPickerUserSelectActivity"
273            android:targetActivity="com.android.providers.media.photopicker.PhotoPickerActivity"
274            android:permission="android.permission.GRANT_RUNTIME_PERMISSIONS"
275            android:exported="true"
276            android:excludeFromRecents="true"
277            android:enabled="true">
278            <intent-filter android:priority="100">
279               <action android:name="android.provider.action.USER_SELECT_IMAGES_FOR_APP" />
280                <category android:name="android.intent.category.DEFAULT" />
281                <data android:mimeType="image/*" />
282                <data android:mimeType="video/*" />
283            </intent-filter>
284            <intent-filter android:priority="100">
285                <action android:name="android.provider.action.USER_SELECT_IMAGES_FOR_APP" />
286                <category android:name="android.intent.category.DEFAULT" />
287            </intent-filter>
288        </activity-alias>
289
290        <activity-alias
291            android:name="com.android.providers.media.photopicker.PhotoPickerGetContentActivity"
292            android:targetActivity="com.android.providers.media.photopicker.PhotoPickerActivity"
293            android:exported="true"
294            android:excludeFromRecents="true"
295            android:enabled="true">
296            <intent-filter android:priority="105" >
297                <action android:name="android.intent.action.GET_CONTENT" />
298                <category android:name="android.intent.category.OPENABLE" />
299                <category android:name="android.intent.category.DEFAULT" />
300                <data android:mimeType="image/*" />
301                <data android:mimeType="video/*" />
302            </intent-filter>
303        </activity-alias>
304
305    </application>
306</manifest>
307