AndroidManifest.xml

  1<?xml version="1.0" encoding="utf-8"?>
  2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3    xmlns:tools="http://schemas.android.com/tools">
  4
  5    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
  6    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  7    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  8    <uses-permission android:name="android.permission.INTERNET" />
  9    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 10    <uses-permission android:name="android.permission.WAKE_LOCK" />
 11    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 12    <uses-permission android:name="android.permission.VIBRATE" />
 13    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
 14    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 15    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 16    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 17    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
 18
 19    <uses-feature
 20        android:name="android.hardware.location"
 21        android:required="false" />
 22    <uses-feature
 23        android:name="android.hardware.location.gps"
 24        android:required="false" />
 25    <uses-feature
 26        android:name="android.hardware.location.network"
 27        android:required="false" />
 28
 29    <uses-permission android:name="android.permission.CAMERA" />
 30    <uses-permission android:name="android.permission.RECORD_AUDIO" />
 31    <uses-permission android:name="android.permission.BLUETOOTH" />
 32    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 33    <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
 34    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
 35    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
 36
 37    <!--    New permissions required to run as foreground service on Android 14.
 38            SYSTEM_EXEMPTED is used when the app is on the doze allow list. This is normal
 39            and the expected default behaviour. The other two hijack RECORD_AUDIO and CAMERA if they
 40            happen to be granted. -->
 41    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
 42    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED" />
 43    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
 44    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" />
 45    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
 46
 47    <!-- this foreground service type permission is exclusively used for import and export backup -->
 48    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
 49
 50    <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
 51
 52    <uses-feature
 53        android:name="android.hardware.camera"
 54        android:required="false" />
 55    <uses-feature
 56        android:name="android.hardware.camera.autofocus"
 57        android:required="false" />
 58
 59    <uses-feature
 60        android:name="android.hardware.microphone"
 61        android:required="false" />
 62
 63    <queries>
 64        <package android:name="org.sufficientlysecure.keychain" />
 65        <package android:name="org.torproject.android" />
 66
 67        <intent>
 68            <action android:name="eu.siacs.conversations.location.request" />
 69        </intent>
 70        <intent>
 71            <action android:name="eu.siacs.conversations.location.show" />
 72        </intent>
 73        <intent>
 74            <action android:name="android.intent.action.VIEW" />
 75        </intent>
 76        <intent>
 77            <action android:name="org.unifiedpush.android.connector.MESSAGE" />
 78        </intent>
 79    </queries>
 80
 81    <application
 82        android:name=".Conversations"
 83        android:allowBackup="true"
 84        android:appCategory="social"
 85        android:dataExtractionRules="@xml/data_extraction_rules"
 86        android:fullBackupContent="@xml/backup_content"
 87        android:hardwareAccelerated="true"
 88        android:icon="@mipmap/new_launcher"
 89        android:label="@string/app_name"
 90        android:largeHeap="true"
 91        android:localeConfig="@xml/locales_config"
 92        android:networkSecurityConfig="@xml/network_security_configuration"
 93        android:preserveLegacyExternalStorage="true"
 94        android:requestLegacyExternalStorage="true"
 95        android:theme="@style/Theme.Conversations3"
 96        tools:targetApi="tiramisu">
 97
 98        <meta-data
 99            android:name="com.google.android.gms.car.application"
100            android:resource="@xml/automotive_app_desc" />
101
102        <!-- The warning that systemExempted requires alarm permission is incorrect because doze white list is sufficient -->
103        <service
104            android:name=".services.XmppConnectionService"
105            android:exported="false"
106            android:foregroundServiceType="specialUse|systemExempted|microphone|camera"
107            tools:ignore="ForegroundServicePermission">
108            <property
109                android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
110                android:value="xmpp-im" />
111        </service>
112
113        <service
114            android:name="androidx.work.impl.foreground.SystemForegroundService"
115            android:foregroundServiceType="dataSync"
116            tools:node="merge" />
117
118        <service
119            android:name=".services.CallIntegrationConnectionService"
120            android:exported="true"
121            android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
122            <intent-filter>
123                <action android:name="android.telecom.ConnectionService" />
124            </intent-filter>
125        </service>
126
127        <receiver
128            android:name=".receiver.SystemEventReceiver"
129            android:exported="false">
130            <intent-filter>
131                <action android:name="android.intent.action.BOOT_COMPLETED" />
132                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
133                <action
134                    android:name="android.net.conn.CONNECTIVITY_CHANGE"
135                    tools:ignore="BatteryLife" />
136                <action android:name="android.intent.action.ACTION_SHUTDOWN" />
137                <action android:name="android.media.RINGER_MODE_CHANGED" />
138            </intent-filter>
139        </receiver>
140
141        <receiver
142            android:name=".receiver.UnifiedPushDistributor"
143            android:enabled="false"
144            android:exported="true">
145            <intent-filter>
146                <action android:name="org.unifiedpush.android.distributor.REGISTER" />
147                <action android:name="org.unifiedpush.android.distributor.UNREGISTER" />
148                <action android:name="org.unifiedpush.android.distributor.feature.BYTES_MESSAGE" />
149                <action android:name="org.unifiedpush.android.distributor.feature.MESSENGER" />
150                <action android:name="org.unifiedpush.android.distributor.feature.APP_VALIDATION" />
151            </intent-filter>
152            <intent-filter>
153                <action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
154                <data android:scheme="package" />
155            </intent-filter>
156        </receiver>
157
158        <activity
159            android:name=".ui.ShareLocationActivity"
160            android:label="@string/title_activity_share_location" />
161        <activity
162            android:name=".ui.SearchActivity"
163            android:label="@string/search_messages" />
164        <activity
165            android:name=".ui.RecordingActivity"
166            android:configChanges="orientation|screenSize"
167            android:theme="@style/Theme.Conversations3.Dialog" />
168        <activity
169            android:name=".ui.ShowLocationActivity"
170            android:label="@string/title_activity_show_location" />
171        <activity
172            android:name=".ui.ConversationActivity"
173            android:exported="true"
174            android:theme="@style/Theme.Conversations3.SplashScreen">
175            <intent-filter>
176                <action android:name="android.intent.action.MAIN" />
177                <category android:name="android.intent.category.LAUNCHER" />
178            </intent-filter>
179            <meta-data
180                android:name="android.app.shortcuts"
181                android:resource="@xml/shortcuts" />
182        </activity>
183        <activity
184            android:name=".ui.ConversationsActivity"
185            android:launchMode="singleTask"
186            android:minWidth="300dp"
187            android:minHeight="300dp"
188            android:windowSoftInputMode="stateHidden" />
189        <activity
190            android:name=".ui.ScanActivity"
191            android:screenOrientation="portrait"
192            android:theme="@style/Theme.Conversations3.FullScreen"
193            android:windowSoftInputMode="stateAlwaysHidden" />
194        <activity
195            android:name=".ui.UriHandlerActivity"
196            android:exported="true">
197            <intent-filter>
198                <action android:name="android.intent.action.VIEW" />
199
200                <category android:name="android.intent.category.DEFAULT" />
201                <category android:name="android.intent.category.BROWSABLE" />
202
203                <data android:scheme="xmpp" />
204            </intent-filter>
205            <intent-filter android:autoVerify="true">
206                <action android:name="android.intent.action.VIEW" />
207
208                <category android:name="android.intent.category.DEFAULT" />
209                <category android:name="android.intent.category.BROWSABLE" />
210
211                <data android:scheme="https" />
212                <data android:host="conversations.im" />
213                <data android:pathPrefix="/i/" />
214                <data android:pathPrefix="/j/" />
215            </intent-filter>
216            <intent-filter>
217                <action android:name="android.intent.action.SENDTO" />
218
219                <category android:name="android.intent.category.DEFAULT" />
220
221                <data android:scheme="imto" />
222                <data android:host="jabber" />
223            </intent-filter>
224            <intent-filter>
225                <action android:name="android.intent.action.SENDTO" />
226
227                <category android:name="android.intent.category.DEFAULT" />
228
229                <data android:scheme="imto" />
230                <data android:host="xmpp" />
231            </intent-filter>
232        </activity>
233        <activity
234            android:name=".ui.StartConversationActivity"
235            android:exported="true"
236            android:label="@string/title_activity_new_chat"
237            android:launchMode="singleTop">
238            <intent-filter>
239                <action android:name="android.intent.action.VIEW" />
240            </intent-filter>
241        </activity>
242        <activity
243            android:name=".ui.activity.SettingsActivity"
244            android:exported="true"
245            android:label="@string/title_activity_settings">
246            <intent-filter>
247                <action android:name="android.intent.action.MAIN" />
248                <category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
249            </intent-filter>
250        </activity>
251        <activity
252            android:name=".ui.ChooseContactActivity"
253            android:label="@string/title_activity_choose_contact" />
254        <activity
255            android:name=".ui.BlocklistActivity"
256            android:label="@string/title_activity_block_list" />
257        <activity
258            android:name=".ui.ChangePasswordActivity"
259            android:label="@string/change_password_on_server" />
260        <activity
261            android:name=".ui.ChooseAccountForProfilePictureActivity"
262            android:enabled="false"
263            android:exported="true"
264            android:label="@string/choose_account">
265            <intent-filter android:label="@string/set_profile_picture">
266                <action android:name="android.intent.action.ATTACH_DATA" />
267                <category android:name="android.intent.category.DEFAULT" />
268
269                <data android:mimeType="image/*" />
270            </intent-filter>
271        </activity>
272        <activity
273            android:name=".ui.ShareViaAccountActivity"
274            android:label="@string/title_activity_share_via_account"
275            android:launchMode="singleTop" />
276        <activity
277            android:name=".ui.EditAccountActivity"
278            android:exported="false"
279            android:launchMode="singleTop"
280            android:windowSoftInputMode="stateHidden|adjustResize" />
281        <activity
282            android:name=".ui.ConferenceDetailsActivity"
283            android:label="@string/action_muc_details"
284            android:windowSoftInputMode="stateHidden" />
285        <activity
286            android:name=".ui.ContactDetailsActivity"
287            android:windowSoftInputMode="stateHidden" />
288        <activity
289            android:name=".ui.PublishProfilePictureActivity"
290            android:label="@string/mgmt_account_publish_avatar"
291            android:windowSoftInputMode="stateHidden" />
292        <activity
293            android:name=".ui.PublishGroupChatProfilePictureActivity"
294            android:label="@string/group_chat_avatar" />
295        <activity
296            android:name=".ui.ShareWithActivity"
297            android:exported="true"
298            android:launchMode="singleTop">
299
300            <intent-filter>
301                <action android:name="android.intent.action.SEND" />
302                <action android:name="android.intent.action.SEND_MULTIPLE" />
303
304                <category android:name="android.intent.category.DEFAULT" />
305
306                <data android:mimeType="text/plain" />
307            </intent-filter>
308
309            <intent-filter>
310                <action android:name="android.intent.action.SEND" />
311                <action android:name="android.intent.action.SEND_MULTIPLE" />
312
313                <category android:name="android.intent.category.DEFAULT" />
314
315                <data android:mimeType="*/*" />
316            </intent-filter>
317
318            <meta-data
319                android:name="android.service.chooser.chooser_target_service"
320                android:value="androidx.sharetarget.ChooserTargetServiceCompat" />
321        </activity>
322        <activity
323            android:name=".ui.TrustKeysActivity"
324            android:label="@string/trust_omemo_fingerprints"
325            android:windowSoftInputMode="stateAlwaysHidden" />
326        <activity
327            android:name=".ui.AboutActivity"
328            android:parentActivityName=".ui.activity.SettingsActivity">
329            <meta-data
330                android:name="android.support.PARENT_ACTIVITY"
331                android:value="eu.siacs.conversations.ui.activity.SettingsActivity" />
332        </activity>
333        <activity
334            android:name="com.canhub.cropper.CropImageActivity"
335            android:theme="@style/Base.Theme.AppCompat" />
336        <activity android:name=".ui.MemorizingActivity" />
337
338        <activity
339            android:name=".ui.MediaBrowserActivity"
340            android:label="@string/media_browser" />
341        <activity android:name=".ui.AddReactionActivity" />
342
343        <provider
344            android:name="androidx.core.content.FileProvider"
345            android:authorities="${applicationId}.files"
346            android:exported="false"
347            android:grantUriPermissions="true">
348            <meta-data
349                android:name="android.support.FILE_PROVIDER_PATHS"
350                android:resource="@xml/file_paths" />
351        </provider>
352        <provider
353            android:name=".services.BarcodeProvider"
354            android:authorities="${applicationId}.barcodes"
355            android:exported="false"
356            android:grantUriPermissions="true" />
357
358        <activity
359            android:name=".ui.ShortcutActivity"
360            android:exported="true"
361            android:label="@string/contact">
362            <intent-filter>
363                <action android:name="android.intent.action.CREATE_SHORTCUT" />
364            </intent-filter>
365        </activity>
366        <activity
367            android:name=".ui.MucUsersActivity"
368            android:label="@string/group_chat_members" />
369        <activity
370            android:name=".ui.ChannelDiscoveryActivity"
371            android:label="@string/discover_channels" />
372        <activity
373            android:name=".ui.RtpSessionActivity"
374            android:autoRemoveFromRecents="true"
375            android:launchMode="singleInstance"
376            android:supportsPictureInPicture="true" />
377        <activity
378            android:name=".ui.ImportBackupActivity"
379            android:exported="true"
380            android:label="@string/restore_backup"
381            android:launchMode="singleTask">
382            <intent-filter>
383                <action android:name="android.intent.action.VIEW" />
384                <category android:name="android.intent.category.DEFAULT" />
385
386                <data android:mimeType="application/vnd.conversations.backup" />
387                <data android:scheme="content" />
388            </intent-filter>
389            <intent-filter>
390                <action android:name="android.intent.action.VIEW" />
391                <category android:name="android.intent.category.DEFAULT" />
392
393                <data android:mimeType="application/vnd.conversations.backup" />
394                <data android:scheme="file" />
395            </intent-filter>
396            <intent-filter>
397                <action android:name="android.intent.action.VIEW" />
398
399                <category android:name="android.intent.category.DEFAULT" />
400                <category android:name="android.intent.category.BROWSABLE" />
401
402                <data android:scheme="content" />
403                <data android:host="*" />
404                <data android:mimeType="*/*" />
405                <data android:pathPattern=".*\\.ceb" />
406                <data android:pathPattern=".*\\..*\\.ceb" />
407                <data android:pathPattern=".*\\..*\\..*\\.ceb" />
408                <data android:pathPattern=".*\\..*\\..*\\..*\\.ceb" />
409                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ceb" />
410                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
411                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
412            </intent-filter>
413            <intent-filter>
414                <action android:name="android.intent.action.VIEW" />
415
416                <category android:name="android.intent.category.DEFAULT" />
417                <category android:name="android.intent.category.BROWSABLE" />
418
419                <data android:scheme="file" />
420                <data android:host="*" />
421                <data android:mimeType="*/*" />
422                <data android:pathPattern=".*\\.ceb" />
423                <data android:pathPattern=".*\\..*\\.ceb" />
424                <data android:pathPattern=".*\\..*\\..*\\.ceb" />
425                <data android:pathPattern=".*\\..*\\..*\\..*\\.ceb" />
426                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ceb" />
427                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
428                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
429            </intent-filter>
430        </activity>
431    </application>
432
433</manifest>