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    <uses-sdk tools:overrideLibrary="androidx.heifwriter" />
 64
 65    <queries>
 66        <package android:name="org.sufficientlysecure.keychain" />
 67        <package android:name="org.torproject.android" />
 68
 69        <intent>
 70            <action android:name="eu.siacs.conversations.location.request" />
 71        </intent>
 72        <intent>
 73            <action android:name="eu.siacs.conversations.location.show" />
 74        </intent>
 75        <intent>
 76            <action android:name="android.intent.action.VIEW" />
 77        </intent>
 78        <intent>
 79            <action android:name="org.unifiedpush.android.connector.MESSAGE" />
 80        </intent>
 81    </queries>
 82
 83    <application
 84        android:name=".Conversations"
 85        android:allowBackup="true"
 86        android:appCategory="social"
 87        android:dataExtractionRules="@xml/data_extraction_rules"
 88        android:fullBackupContent="@xml/backup_content"
 89        android:hardwareAccelerated="true"
 90        android:icon="@mipmap/new_launcher"
 91        android:label="@string/app_name"
 92        android:largeHeap="true"
 93        android:localeConfig="@xml/locales_config"
 94        android:networkSecurityConfig="@xml/network_security_configuration"
 95        android:preserveLegacyExternalStorage="true"
 96        android:requestLegacyExternalStorage="true"
 97        android:theme="@style/Theme.Conversations3"
 98        tools:targetApi="tiramisu">
 99
100        <meta-data
101            android:name="com.google.android.gms.car.application"
102            android:resource="@xml/automotive_app_desc" />
103
104        <!-- The warning that systemExempted requires alarm permission is incorrect because doze white list is sufficient -->
105        <service
106            android:name=".services.XmppConnectionService"
107            android:exported="false"
108            android:foregroundServiceType="specialUse|systemExempted|microphone|camera"
109            tools:ignore="ForegroundServicePermission">
110            <property
111                android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
112                android:value="xmpp-im" />
113        </service>
114
115        <service
116            android:name="androidx.work.impl.foreground.SystemForegroundService"
117            android:foregroundServiceType="dataSync"
118            tools:node="merge" />
119
120        <service
121            android:name=".services.CallIntegrationConnectionService"
122            android:exported="true"
123            android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
124            <intent-filter>
125                <action android:name="android.telecom.ConnectionService" />
126            </intent-filter>
127        </service>
128
129        <receiver
130            android:name=".receiver.SystemEventReceiver"
131            android:exported="false">
132            <intent-filter>
133                <action android:name="android.intent.action.BOOT_COMPLETED" />
134                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
135                <action
136                    android:name="android.net.conn.CONNECTIVITY_CHANGE"
137                    tools:ignore="BatteryLife" />
138                <action android:name="android.intent.action.ACTION_SHUTDOWN" />
139                <action android:name="android.media.RINGER_MODE_CHANGED" />
140            </intent-filter>
141        </receiver>
142
143        <receiver
144            android:name=".receiver.UnifiedPushDistributor"
145            android:enabled="false"
146            android:exported="true">
147            <intent-filter>
148                <action android:name="org.unifiedpush.android.distributor.REGISTER" />
149                <action android:name="org.unifiedpush.android.distributor.UNREGISTER" />
150                <action android:name="org.unifiedpush.android.distributor.feature.BYTES_MESSAGE" />
151                <action android:name="org.unifiedpush.android.distributor.feature.MESSENGER" />
152                <action android:name="org.unifiedpush.android.distributor.feature.APP_VALIDATION" />
153            </intent-filter>
154            <intent-filter>
155                <action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
156                <data android:scheme="package" />
157            </intent-filter>
158        </receiver>
159
160        <activity
161            android:name=".ui.ShareLocationActivity"
162            android:label="@string/title_activity_share_location"
163            android:exported="false" />
164        <activity
165            android:name=".ui.SearchActivity"
166            android:label="@string/search_messages"
167            android:exported="false" />
168        <activity
169            android:name=".ui.RecordingActivity"
170            android:exported="false"
171            android:configChanges="orientation|screenSize"
172            android:theme="@style/Theme.Conversations3.Dialog" />
173        <activity
174            android:name=".ui.ShowLocationActivity"
175            android:label="@string/title_activity_show_location"
176            android:exported="false" />
177        <activity
178            android:name=".ui.ConversationActivity"
179            android:exported="true"
180            android:theme="@style/Theme.Conversations3.SplashScreen">
181            <intent-filter>
182                <action android:name="android.intent.action.MAIN" />
183                <category android:name="android.intent.category.LAUNCHER" />
184            </intent-filter>
185            <meta-data
186                android:name="android.app.shortcuts"
187                android:resource="@xml/shortcuts" />
188        </activity>
189        <activity
190            android:name=".ui.ConversationsActivity"
191            android:label="@string/app_name"
192            android:exported="false"
193            android:launchMode="singleTask"
194            android:minWidth="300dp"
195            android:minHeight="300dp"
196            android:windowSoftInputMode="stateHidden" />
197        <activity
198            android:name=".ui.ScanActivity"
199            android:exported="false"
200            android:screenOrientation="portrait"
201            android:windowSoftInputMode="stateAlwaysHidden" />
202        <activity
203            android:name=".ui.UriHandlerActivity"
204            android:exported="true">
205            <intent-filter>
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="xmpp" />
212            </intent-filter>
213            <intent-filter android:label="Import Sticker Pack">
214                <action android:name="android.intent.action.VIEW" />
215
216                <category android:name="android.intent.category.DEFAULT" />
217                <category android:name="android.intent.category.BROWSABLE" />
218
219                <data android:scheme="sgnl" />
220                <data android:pathPrefix="/addstickers/" />
221            </intent-filter>
222            <intent-filter android:label="Import Sticker Pack">
223                <action android:name="android.intent.action.VIEW" />
224
225                <category android:name="android.intent.category.DEFAULT" />
226                <category android:name="android.intent.category.BROWSABLE" />
227
228                <data android:scheme="https" />
229                <data android:host="signal.art" />
230                <data android:pathPrefix="/addstickers/" />
231            </intent-filter>
232            <intent-filter android:autoVerify="true">
233                <action android:name="android.intent.action.VIEW" />
234
235                <category android:name="android.intent.category.DEFAULT" />
236                <category android:name="android.intent.category.BROWSABLE" />
237
238                <data android:scheme="https" />
239                <data android:host="conversations.im" />
240                <data android:pathPrefix="/i/" />
241                <data android:pathPrefix="/j/" />
242            </intent-filter>
243            <intent-filter>
244                <action android:name="android.intent.action.SENDTO" />
245
246                <category android:name="android.intent.category.DEFAULT" />
247
248                <data android:scheme="imto" />
249                <data android:host="jabber" />
250            </intent-filter>
251            <intent-filter>
252                <action android:name="android.intent.action.SENDTO" />
253
254                <category android:name="android.intent.category.DEFAULT" />
255
256                <data android:scheme="imto" />
257                <data android:host="xmpp" />
258            </intent-filter>
259        </activity>
260        <activity
261            android:name=".ui.StartConversationActivity"
262            android:exported="true"
263            android:label="@string/title_activity_new_chat"
264            android:launchMode="singleTop">
265            <intent-filter>
266                <action android:name="android.intent.action.VIEW" />
267            </intent-filter>
268        </activity>
269        <activity
270            android:name=".ui.activity.SettingsActivity"
271            android:exported="true"
272            android:label="@string/title_activity_settings">
273            <intent-filter>
274                <action android:name="android.intent.action.MAIN" />
275                <category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
276            </intent-filter>
277        </activity>
278        <activity
279            android:name=".ui.ChooseContactActivity"
280            android:label="@string/title_activity_choose_contact"
281            android:exported="false" />
282        <activity
283            android:name=".ui.BlocklistActivity"
284            android:label="@string/title_activity_block_list"
285            android:exported="false" />
286        <activity
287            android:name=".ui.ChangePasswordActivity"
288            android:label="@string/change_password_on_server"
289            android:exported="false" />
290        <activity
291            android:name=".ui.ChooseAccountForProfilePictureActivity"
292            android:enabled="false"
293            android:exported="true"
294            android:label="@string/choose_account">
295            <intent-filter android:label="@string/set_profile_picture">
296                <action android:name="android.intent.action.ATTACH_DATA" />
297                <category android:name="android.intent.category.DEFAULT" />
298
299                <data android:mimeType="image/*" />
300            </intent-filter>
301        </activity>
302        <activity
303            android:name=".ui.ShareViaAccountActivity"
304            android:label="@string/title_activity_share_via_account"
305            android:exported="false"
306            android:launchMode="singleTop" />
307        <activity
308            android:name=".ui.EditAccountActivity"
309            android:exported="false"
310            android:launchMode="singleTop"
311            android:windowSoftInputMode="stateHidden|adjustResize" />
312        <activity
313            android:name=".ui.ConferenceDetailsActivity"
314            android:label="@string/action_muc_details"
315            android:exported="false"
316            android:windowSoftInputMode="stateHidden" />
317        <activity
318            android:name=".ui.ContactDetailsActivity"
319            android:exported="false"
320            android:windowSoftInputMode="stateHidden" />
321        <activity
322            android:name=".ui.PublishProfilePictureActivity"
323            android:label="@string/mgmt_account_publish_avatar"
324            android:exported="false"
325            android:windowSoftInputMode="stateHidden" />
326        <activity
327            android:name=".ui.PublishGroupChatProfilePictureActivity"
328            android:label="@string/group_chat_avatar"
329            android:exported="false" />
330        <activity
331            android:name=".ui.ShareWithActivity"
332            android:exported="true"
333            android:launchMode="singleTop">
334
335            <intent-filter>
336                <action android:name="android.intent.action.SEND" />
337                <action android:name="android.intent.action.SEND_MULTIPLE" />
338
339                <category android:name="android.intent.category.DEFAULT" />
340
341                <data android:mimeType="text/plain" />
342            </intent-filter>
343
344            <intent-filter>
345                <action android:name="android.intent.action.SEND" />
346                <action android:name="android.intent.action.SEND_MULTIPLE" />
347
348                <category android:name="android.intent.category.DEFAULT" />
349
350                <data android:mimeType="*/*" />
351            </intent-filter>
352
353            <meta-data
354                android:name="android.service.chooser.chooser_target_service"
355                android:value="androidx.sharetarget.ChooserTargetServiceCompat" />
356        </activity>
357        <activity
358            android:name=".ui.TrustKeysActivity"
359            android:label="@string/trust_omemo_fingerprints"
360            android:exported="false"
361            android:windowSoftInputMode="stateAlwaysHidden" />
362        <activity
363            android:name=".ui.AboutActivity"
364            android:exported="false"
365            android:parentActivityName=".ui.activity.SettingsActivity">
366            <meta-data
367                android:name="android.support.PARENT_ACTIVITY"
368                android:value="eu.siacs.conversations.ui.activity.SettingsActivity" />
369        </activity>
370        <activity
371            android:name="com.canhub.cropper.CropImageActivity"
372            android:theme="@style/Base.Theme.AppCompat" />
373        <activity
374            android:name=".ui.MemorizingActivity"
375            android:exported="false" />
376
377        <activity
378            android:name=".ui.MediaBrowserActivity"
379            android:label="@string/media_browser" />
380        <activity android:name=".ui.AddReactionActivity" />
381
382        <provider
383            android:name="androidx.core.content.FileProvider"
384            android:authorities="${applicationId}.files"
385            android:exported="false"
386            android:grantUriPermissions="true">
387            <meta-data
388                android:name="android.support.FILE_PROVIDER_PATHS"
389                android:resource="@xml/file_paths" />
390        </provider>
391        <provider
392            android:name=".services.BarcodeProvider"
393            android:authorities="${applicationId}.barcodes"
394            android:exported="false"
395            android:grantUriPermissions="true" />
396
397        <activity
398            android:name=".ui.ShortcutActivity"
399            android:exported="true"
400            android:label="@string/contact">
401            <intent-filter>
402                <action android:name="android.intent.action.CREATE_SHORTCUT" />
403            </intent-filter>
404        </activity>
405        <activity android:name=".ui.ViewProfilePictureActivity"
406            android:theme="@style/Theme.Conversations3.Dark"/>
407        <activity
408            android:name=".ui.MucUsersActivity"
409            android:label="@string/group_chat_members"
410            android:exported="false" />
411        <activity
412            android:name=".ui.ChannelDiscoveryActivity"
413            android:label="@string/discover_channels"
414            android:exported="false" />
415        <activity
416            android:name=".ui.RtpSessionActivity"
417            android:exported="false"
418            android:autoRemoveFromRecents="true"
419            android:launchMode="singleInstance"
420            android:supportsPictureInPicture="true" />
421        <activity
422            android:name=".ui.ImportBackupActivity"
423            android:exported="true"
424            android:label="@string/restore_backup"
425            android:launchMode="singleTask">
426            <intent-filter>
427                <action android:name="android.intent.action.VIEW" />
428                <category android:name="android.intent.category.DEFAULT" />
429
430                <data android:mimeType="application/vnd.conversations.backup" />
431                <data android:scheme="content" />
432            </intent-filter>
433            <intent-filter>
434                <action android:name="android.intent.action.VIEW" />
435                <category android:name="android.intent.category.DEFAULT" />
436
437                <data android:mimeType="application/vnd.conversations.backup" />
438                <data android:scheme="file" />
439            </intent-filter>
440            <intent-filter>
441                <action android:name="android.intent.action.VIEW" />
442
443                <category android:name="android.intent.category.DEFAULT" />
444                <category android:name="android.intent.category.BROWSABLE" />
445
446                <data android:scheme="content" />
447                <data android:host="*" />
448                <data android:mimeType="*/*" />
449                <data android:pathPattern=".*\\.ceb" />
450                <data android:pathPattern=".*\\..*\\.ceb" />
451                <data android:pathPattern=".*\\..*\\..*\\.ceb" />
452                <data android:pathPattern=".*\\..*\\..*\\..*\\.ceb" />
453                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ceb" />
454                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
455                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
456            </intent-filter>
457            <intent-filter>
458                <action android:name="android.intent.action.VIEW" />
459
460                <category android:name="android.intent.category.DEFAULT" />
461                <category android:name="android.intent.category.BROWSABLE" />
462
463                <data android:scheme="file" />
464                <data android:host="*" />
465                <data android:mimeType="*/*" />
466                <data android:pathPattern=".*\\.ceb" />
467                <data android:pathPattern=".*\\..*\\.ceb" />
468                <data android:pathPattern=".*\\..*\\..*\\.ceb" />
469                <data android:pathPattern=".*\\..*\\..*\\..*\\.ceb" />
470                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ceb" />
471                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
472                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
473            </intent-filter>
474        </activity>
475    </application>
476
477</manifest>