blob: ff0e86a3d7bd5aa43bbaed0a9d93ce2f2fe8c1fd [file] [log] [blame] [edit]
<!--
Copyright 2024 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.android.photopicker">
<!--
This permission identifies Photopicker to MediaProvider and allows access
to private system APIs.
Declared by MediaProvider and requires the 'media' certificate to obtain.
-->
<uses-permission
android:name="com.android.providers.media.permission.MANAGE_CLOUD_MEDIA_PROVIDERS"/>
<!-- Required to inspect network capabilities through ConnectivityManager -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Permissions required for reading device configs -->
<uses-permission android:name="android.permission.READ_DEVICE_CONFIG"/>
<!-- Permissions required for fetching User profiles -->
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
<!--
Required for resolving packages based on their UID for privacy banner
Also required for resolving DocumentsUI and CloudMediaProviders.
-->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
<application
android:name="com.android.photopicker.PhotopickerApplication"
android:icon="@mipmap/photopicker_app_icon"
android:label="@string/photopicker_application_label"
android:crossProfile="true"
android:allowBackup="false"
android:supportsRtl="true">
<activity
android:name="com.android.photopicker.MainActivity"
android:enabled="false"
android:exported="true"
android:theme="@style/Theme.Photopicker"
android:label="@string/photopicker_application_label"
android:windowSoftInputMode="adjustResize"
android:excludeFromRecents="true">
<intent-filter android:priority="110" >
<action android:name="android.provider.action.PICK_IMAGES"/>
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter android:priority="105" >
<action android:name="android.provider.action.PICK_IMAGES"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity-alias
android:name="com.android.photopicker.PhotopickerGetContentActivity"
android:enabled="false"
android:targetActivity="com.android.photopicker.MainActivity"
android:exported="true"
android:excludeFromRecents="true">
<intent-filter android:priority="110" >
<action android:name="android.intent.action.GET_CONTENT"/>
<category android:name="android.intent.category.OPENABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/>
<data android:mimeType="video/*"/>
</intent-filter>
</activity-alias>
<activity-alias
android:name="com.android.photopicker.PhotopickerUserSelectActivity"
android:targetActivity="com.android.photopicker.MainActivity"
android:permission="android.permission.GRANT_RUNTIME_PERMISSIONS"
android:exported="true"
android:enabled="false"
android:excludeFromRecents="true">
<intent-filter android:priority="105">
<action android:name="android.provider.action.USER_SELECT_IMAGES_FOR_APP" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter android:priority="105">
<action android:name="android.provider.action.USER_SELECT_IMAGES_FOR_APP" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
<!--
Receiver that receives broadcasts from MediaProvider when the DeviceConfig is updated.
This is required because Photopicker does not have a persistent process of its own, but
needs to enable or disable various package components based on flag state. MediaProvider
sends broadcasts to Photopicker anytime the DeviceConfig is updated so that Photopicker
can wake up and evaluate its component state.
These broadcasts are scoped to the MANAGE_CLOUD_MEDIA_PROVIDERS permission so that other
apps are unable to eavesdrop on these broadcasts (though they contain no data and are just
a wake up signal).
-->
<receiver android:name="com.android.photopicker.PhotopickerDeviceConfigReceiver"
android:exported="true"
android:enabled="@bool/config_enablePhotopickerDeviceConfigReceiver"
android:permission="com.android.providers.media.permission.MANAGE_CLOUD_MEDIA_PROVIDERS">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</receiver>
<!--
The Embedded Photopicker service that allows external apps to launch an embedded photopicker
experience inside of their own application. This service uses Remote Rendering to provide a
view to the binding application, and renders the view from the photopicker process.
See EmbeddedService and Session classes for the entrypoints into the Embedded Photopicker.
-->
<service android:name="com.android.photopicker.core.embedded.EmbeddedService"
android:exported="true">
<intent-filter>
<action android:name="com.android.photopicker.core.embedded.EmbeddedService.BIND" />
</intent-filter>
</service>
</application>
</manifest>