1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (C) 2006 The Android Open Source Project
3
4     Licensed under the Apache License, Version 2.0 (the "License");
5     you may not use this file except in compliance with the License.
6     You may obtain a copy of the License at
7
8          http://www.apache.org/licenses/LICENSE-2.0
9
10     Unless required by applicable law or agreed to in writing, software
11     distributed under the License is distributed on an "AS IS" BASIS,
12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13     See the License for the specific language governing permissions and
14     limitations under the License.
15-->
16
17<manifest xmlns:android="http://schemas.android.com/apk/res/android"
18          package="com.android.contacts"
19          android:versionCode="10731"
20          android:versionName="1.7.31">
21
22    <uses-sdk
23        android:minSdkVersion="21"
24        android:targetSdkVersion="29"/>
25
26    <original-package android:name="com.android.contacts"/>
27
28    <!-- Contacts permission listed first because order determines
29         order that permissions are requested with some OEMs -->
30    <uses-permission android:name="android.permission.READ_CONTACTS"/>
31    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
32    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
33    <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
34    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
35    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
36    <uses-permission android:name="android.permission.CALL_PHONE"/>
37    <uses-permission android:name="android.permission.READ_PROFILE"/>
38    <uses-permission android:name="android.permission.WRITE_PROFILE"/>
39    <uses-permission android:name="android.permission.INTERNET"/>
40    <uses-permission android:name="android.permission.NFC"/>
41    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
42    <uses-permission android:name="android.permission.WAKE_LOCK"/>
43    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
44    <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
45    <uses-permission android:name="android.permission.VIBRATE"/>
46    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
47    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
48    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
49    <!-- Following used for Contact metadata syncing -->
50    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
51    <!-- Following used for getting the status of the contacts sync adapter -->
52    <uses-permission android:name="android.permission.READ_SYNC_STATS"/>
53    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
54    <!-- Required in P to run Service.startForeground() -->
55    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
56
57    <uses-feature
58        android:name="android.hardware.telephony"
59        android:required="false"/>
60
61    <application
62        android:name="com.android.contacts.ContactsApplication"
63        android:hardwareAccelerated="true"
64        android:icon="@mipmap/ic_contacts_launcher"
65        android:label="@string/applicationLabel"
66        android:supportsRtl="true"
67        android:taskAffinity="android.task.contacts"
68        android:usesCleartextTraffic="false">
69        <!-- The main Contacts activity with the contact list, favorites, and groups. -->
70        <activity
71            android:name=".activities.PeopleActivity"
72            android:alwaysRetainTaskState="true"
73            android:launchMode="singleTop"
74            android:resizeableActivity="true"
75            android:theme="@style/LaunchScreenTheme"
76            android:visibleToInstantApps="true"
77            >
78            <intent-filter>
79                <action android:name="android.intent.action.MAIN"/>
80
81                <category android:name="android.intent.category.DEFAULT"/>
82                <category android:name="android.intent.category.LAUNCHER"/>
83                <category android:name="android.intent.category.BROWSABLE"/>
84                <category android:name="android.intent.category.APP_CONTACTS"/>
85            </intent-filter>
86            <intent-filter>
87                <action android:name="com.android.contacts.action.LIST_DEFAULT"/>
88
89                <category android:name="android.intent.category.DEFAULT"/>
90                <category android:name="android.intent.category.TAB"/>
91            </intent-filter>
92
93            <intent-filter>
94                <action android:name="com.android.contacts.action.LIST_CONTACTS"/>
95
96                <category android:name="android.intent.category.DEFAULT"/>
97                <category android:name="android.intent.category.TAB"/>
98            </intent-filter>
99
100            <intent-filter>
101                <action android:name="com.android.contacts.action.LIST_ALL_CONTACTS"/>
102
103                <category android:name="android.intent.category.DEFAULT"/>
104                <category android:name="android.intent.category.TAB"/>
105            </intent-filter>
106
107            <intent-filter>
108                <action android:name="com.android.contacts.action.LIST_CONTACTS_WITH_PHONES"/>
109
110                <category android:name="android.intent.category.DEFAULT"/>
111                <category android:name="android.intent.category.TAB"/>
112            </intent-filter>
113
114            <intent-filter>
115                <action android:name="com.android.contacts.action.LIST_STARRED"/>
116
117                <category android:name="android.intent.category.DEFAULT"/>
118                <category android:name="android.intent.category.TAB"/>
119            </intent-filter>
120
121            <intent-filter>
122                <action android:name="com.android.contacts.action.LIST_FREQUENT"/>
123
124                <category android:name="android.intent.category.DEFAULT"/>
125                <category android:name="android.intent.category.TAB"/>
126            </intent-filter>
127
128            <intent-filter>
129                <action android:name="com.android.contacts.action.LIST_STREQUENT"/>
130
131                <category android:name="android.intent.category.DEFAULT"/>
132                <category android:name="android.intent.category.TAB"/>
133            </intent-filter>
134
135            <intent-filter>
136                <action android:name="android.intent.action.SEARCH"/>
137                <category android:name="android.intent.category.DEFAULT"/>
138                <data android:mimeType="vnd.android.cursor.dir/contact"/>
139            </intent-filter>
140
141            <intent-filter>
142                <action android:name="android.intent.action.SEARCH"/>
143                <category android:name="android.intent.category.DEFAULT"/>
144            </intent-filter>
145
146            <intent-filter>
147                <action android:name="android.intent.action.VIEW"/>
148                <category android:name="android.intent.category.DEFAULT"/>
149
150                <data android:mimeType="vnd.android.cursor.dir/person"/>
151                <data android:mimeType="vnd.android.cursor.dir/contact"/>
152                <data android:mimeType="vnd.android.cursor.item/group"/>
153            </intent-filter>
154
155            <intent-filter>
156                <action android:name="android.intent.action.EDIT"/>
157                <category android:name="android.intent.category.DEFAULT"/>
158                <data android:mimeType="vnd.android.cursor.item/group"/>
159            </intent-filter>
160
161            <intent-filter>
162                <action android:name="android.intent.action.INSERT"/>
163                <category android:name="android.intent.category.DEFAULT"/>
164                <data android:mimeType="vnd.android.cursor.dir/group"/>
165            </intent-filter>
166
167            <meta-data
168                android:name="android.app.searchable"
169                android:resource="@xml/searchable"
170                />
171
172            <meta-data
173                android:name="android.app.shortcuts"
174                android:resource="@xml/shortcuts"
175                />
176
177        </activity>
178
179        <activity
180            android:name=".activities.ContactSelectionActivity"
181            android:clearTaskOnLaunch="true"
182            android:launchMode="singleTop"
183            android:theme="@style/ContactPickerTheme"
184            android:uiOptions="splitActionBarWhenNarrow"
185            android:windowSoftInputMode="adjustResize"
186            android:visibleToInstantApps="true">
187            <meta-data android:name="android.app.shortcuts.new_config"
188                android:value="true" />
189            <intent-filter>
190                <action android:name="android.intent.action.INSERT_OR_EDIT"/>
191                <category android:name="android.intent.category.DEFAULT"/>
192
193                <data android:mimeType="vnd.android.cursor.item/person"/>
194                <data android:mimeType="vnd.android.cursor.item/contact"/>
195                <data android:mimeType="vnd.android.cursor.item/raw_contact"/>
196            </intent-filter>
197
198            <intent-filter>
199                <action android:name="android.intent.action.PICK"/>
200                <category android:name="android.intent.category.DEFAULT"/>
201
202                <data android:mimeType="vnd.android.cursor.dir/contact"/>
203                <data android:mimeType="vnd.android.cursor.dir/person"/>
204                <data android:mimeType="vnd.android.cursor.dir/phone_v2"/>
205                <data android:mimeType="vnd.android.cursor.dir/phone"/>
206                <data android:mimeType="vnd.android.cursor.dir/postal-address_v2"/>
207                <data android:mimeType="vnd.android.cursor.dir/postal-address"/>
208                <data android:mimeType="vnd.android.cursor.dir/email_v2"/>
209                <data android:mimeType="vnd.android.cursor.dir/group"/>
210            </intent-filter>
211
212            <intent-filter>
213                <action android:name="android.intent.action.GET_CONTENT"/>
214                <category android:name="android.intent.category.DEFAULT"/>
215
216                <data android:mimeType="vnd.android.cursor.item/contact"/>
217                <data android:mimeType="vnd.android.cursor.item/person"/>
218                <data android:mimeType="vnd.android.cursor.item/phone_v2"/>
219                <data android:mimeType="vnd.android.cursor.item/phone"/>
220                <data android:mimeType="vnd.android.cursor.item/postal-address_v2"/>
221                <data android:mimeType="vnd.android.cursor.item/postal-address"/>
222            </intent-filter>
223
224            <intent-filter>
225                <action android:name="com.android.contacts.action.JOIN_CONTACT"/>
226                <category android:name="android.intent.category.DEFAULT"/>
227            </intent-filter>
228        </activity>
229
230        <!-- Backwards compatibility: somebody may have hard coded this activity name -->
231        <activity-alias
232            android:name="ContactsListActivity"
233            android:targetActivity=".activities.PeopleActivity"
234            />
235
236        <!-- Backwards compatibility: "Contacts" from Honeycomb -->
237        <activity-alias
238            android:name=".activities.ContactsFrontDoor"
239            android:exported="true"
240            android:targetActivity=".activities.PeopleActivity"
241            />
242
243        <!-- Backwards compatibility: "Contacts" from Gingerbread and earlier -->
244        <activity-alias
245            android:name="DialtactsContactsEntryActivity"
246            android:exported="true"
247            android:targetActivity=".activities.PeopleActivity"
248            />
249
250        <!-- Used to set options -->
251        <activity
252            android:name=".preference.ContactsPreferenceActivity"
253            android:exported="false"
254            android:label="@string/activity_title_settings"
255            android:launchMode="singleTop"
256            android:theme="@style/ContactsPreferencesTheme"/>
257
258        <activity
259            android:name=".activities.LicenseActivity"
260            android:exported="true"
261            android:label="@string/activity_title_licenses"
262            android:theme="@style/ContactsPreferencesTheme"/>
263
264        <!-- Used to filter contacts list by account -->
265        <activity
266            android:name=".list.AccountFilterActivity"
267            android:label="@string/activity_title_contacts_filter"
268            android:theme="@style/ContactListFilterTheme"/>
269
270        <!-- Used to select display and sync groups -->
271        <activity
272            android:name=".list.CustomContactListFilterActivity"
273            android:label="@string/custom_list_filter"
274            android:theme="@style/ContactListFilterTheme"/>
275
276        <activity
277            android:name=".activities.RequestPermissionsActivity"
278            android:exported="false"
279            android:theme="@style/PeopleTheme"/>
280
281        <activity
282            android:name=".activities.RequestImportVCardPermissionsActivity"
283            android:exported="false"
284            android:theme="@style/PeopleTheme"/>
285
286        <activity
287            android:name=".activities.ShowOrCreateActivity"
288            android:theme="@android:style/Theme.Material.Light.Dialog.NoActionBar">
289
290            <intent-filter>
291                <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT"/>
292                <category android:name="android.intent.category.DEFAULT"/>
293
294                <data android:scheme="mailto"/>
295                <data android:scheme="tel"/>
296            </intent-filter>
297        </activity>
298
299        <activity
300            android:name=".quickcontact.QuickContactActivity"
301            android:excludeFromRecents="true"
302            android:launchMode="singleTop"
303            android:taskAffinity=""
304            android:theme="@style/Theme.QuickContact"
305            android:windowSoftInputMode="stateUnchanged">
306
307            <intent-filter>
308                <action android:name="com.android.contacts.action.QUICK_CONTACT"/>
309                <action android:name="android.provider.action.QUICK_CONTACT"/>
310
311                <category android:name="android.intent.category.DEFAULT"/>
312
313                <data android:mimeType="vnd.android.cursor.item/contact"/>
314                <data android:mimeType="vnd.android.cursor.item/person"/>
315            </intent-filter>
316
317            <intent-filter>
318                <action android:name="android.intent.action.VIEW"/>
319                <category android:name="android.intent.category.DEFAULT"/>
320
321                <data android:mimeType="vnd.android.cursor.item/person"/>
322                <data android:mimeType="vnd.android.cursor.item/contact"/>
323                <data android:mimeType="vnd.android.cursor.item/raw_contact"/>
324            </intent-filter>
325        </activity>
326
327        <receiver
328            android:name=".quickcontact.QuickContactBroadcastReceiver"
329            android:exported="false"/>
330
331        <!-- Responsible for creating notification channels when boot is completed or when app is
332        re-installed -->
333        <receiver android:name=".interactions.OnBootOrUpgradeReceiver">
334            <intent-filter>
335                <action android:name="android.intent.action.BOOT_COMPLETED" />
336                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
337            </intent-filter>
338        </receiver>
339
340        <activity-alias
341            android:name="ContactShortcut"
342            android:icon="@drawable/logo_quick_contacts_color_44in48dp"
343            android:label="@string/shortcutContact"
344            android:targetActivity=".activities.ContactSelectionActivity">
345
346            <intent-filter>
347                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
348                <category android:name="android.intent.category.DEFAULT"/>
349            </intent-filter>
350
351        </activity-alias>
352
353        <activity-alias
354            android:name="alias.DialShortcut"
355            android:icon="@drawable/logo_quick_contacts_dialer_color_44in48dp"
356            android:label="@string/shortcutDialContact"
357            android:targetActivity=".activities.ContactSelectionActivity">
358
359            <intent-filter>
360                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
361
362                <category android:name="android.intent.category.DEFAULT"/>
363                <category android:name="android.intent.category.CAR_MODE"/>
364            </intent-filter>
365
366        </activity-alias>
367
368        <activity-alias
369            android:name="alias.MessageShortcut"
370            android:icon="@drawable/logo_quick_contacts_mail_color_44in48dp"
371            android:label="@string/shortcutMessageContact"
372            android:targetActivity=".activities.ContactSelectionActivity">
373
374            <intent-filter>
375                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
376                <category android:name="android.intent.category.DEFAULT"/>
377            </intent-filter>
378
379        </activity-alias>
380
381        <!-- Accounts changed prompt that can appear when creating a new contact. -->
382        <activity
383            android:name=".activities.ContactEditorAccountsChangedActivity"
384            android:exported="false"
385            android:theme="@style/ContactEditorAccountsChangedActivityTheme"
386            android:windowSoftInputMode="adjustResize"/>
387
388        <!-- Edit or create a contact with only the most important fields displayed initially. -->
389        <activity
390            android:name=".activities.ContactEditorActivity"
391            android:theme="@style/EditorActivityTheme">
392
393            <intent-filter>
394                <action android:name="android.intent.action.INSERT"/>
395                <category android:name="android.intent.category.DEFAULT"/>
396
397                <data android:mimeType="vnd.android.cursor.dir/person"/>
398                <data android:mimeType="vnd.android.cursor.dir/contact"/>
399                <data android:mimeType="vnd.android.cursor.dir/raw_contact"/>
400            </intent-filter>
401        </activity>
402
403        <!-- Keep support for apps that expect the Compact editor -->
404        <activity-alias
405            android:name="com.android.contacts.activities.CompactContactEditorActivity"
406            android:exported="true"
407            android:targetActivity=".activities.ContactEditorActivity">
408            <intent-filter android:priority="-1">
409                <action android:name="android.intent.action.INSERT"/>
410                <category android:name="android.intent.category.DEFAULT"/>
411
412                <data android:mimeType="vnd.android.cursor.dir/person"/>
413                <data android:mimeType="vnd.android.cursor.dir/contact"/>
414                <data android:mimeType="vnd.android.cursor.dir/raw_contact"/>
415            </intent-filter>
416        </activity-alias>
417
418        <activity
419            android:name=".activities.ContactEditorSpringBoardActivity"
420            android:theme="@style/TransparentThemeAppCompat">
421
422            <intent-filter>
423                <action android:name="android.intent.action.EDIT"/>
424                <category android:name="android.intent.category.DEFAULT"/>
425
426                <data android:mimeType="vnd.android.cursor.item/person"/>
427                <data android:mimeType="vnd.android.cursor.item/contact"/>
428                <data android:mimeType="vnd.android.cursor.item/raw_contact"/>
429            </intent-filter>
430        </activity>
431
432        <activity android:name=".test.FragmentTestActivity">
433            <intent-filter>
434                <category android:name="android.intent.category.TEST"/>
435            </intent-filter>
436        </activity>
437
438        <!-- Stub service used to keep our process alive long enough for
439             background threads to finish their operations. -->
440        <service
441            android:name=".util.EmptyService"
442            android:exported="false"/>
443
444        <!-- Service to save a contact -->
445        <service
446            android:name=".ContactSaveService"
447            android:exported="false"/>
448
449        <!-- Service to import contacts from the SIM card -->
450        <service
451            android:name=".SimImportService"
452            android:exported="false"/>
453
454        <!-- Attaches a photo to a contact. Started from external applications -->
455        <activity
456            android:name=".activities.AttachPhotoActivity"
457            android:label="@string/attach_photo_dialog_title"
458            android:taskAffinity="">
459            <intent-filter>
460                <action android:name="android.intent.action.ATTACH_DATA"/>
461                <data android:mimeType="image/*"/>
462                <category android:name="android.intent.category.DEFAULT"/>
463            </intent-filter>
464        </activity>
465
466        <!-- vCard related -->
467        <activity
468            android:name=".vcard.ImportVCardActivity"
469            android:configChanges="orientation|screenSize|keyboardHidden"
470            android:theme="@style/BackgroundOnlyTheme">
471            <intent-filter>
472                <action android:name="android.intent.action.VIEW"/>
473
474                <data android:mimeType="text/directory"/>
475                <data android:mimeType="text/vcard"/>
476                <data android:mimeType="text/x-vcard"/>
477
478                <category android:name="android.intent.category.DEFAULT"/>
479            </intent-filter>
480        </activity>
481
482        <activity
483            android:name=".vcard.NfcImportVCardActivity"
484            android:configChanges="orientation|screenSize|keyboardHidden"
485            android:theme="@style/BackgroundOnlyTheme">
486            <intent-filter>
487                <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
488
489                <data android:mimeType="text/vcard"/>
490                <data android:mimeType="text/x-vcard"/>
491
492                <category android:name="android.intent.category.DEFAULT"/>
493            </intent-filter>
494        </activity>
495
496        <activity
497            android:name=".vcard.CancelActivity"
498            android:theme="@style/BackgroundOnlyTheme"/>
499
500        <activity
501            android:name=".vcard.SelectAccountActivity"
502            android:theme="@style/BackgroundOnlyTheme"/>
503
504        <activity
505            android:name=".vcard.ExportVCardActivity"
506            android:theme="@style/BackgroundOnlyTheme"/>
507
508        <activity
509            android:name=".vcard.ShareVCardActivity"
510            android:theme="@style/BackgroundOnlyTheme"/>
511
512        <activity
513            android:name=".activities.SimImportActivity"
514            android:label="@string/sim_import_title"
515            android:theme="@style/PeopleThemeAppCompat.FullScreenDialog.SimImportActivity"/>
516
517
518        <service
519            android:name=".vcard.VCardService"
520            android:exported="false"/>
521        <!-- end vCard related -->
522
523        <!-- Intercept Dialer Intents for devices without a phone.
524             This activity should have the same intent filters as the DialtactsActivity,
525             so that its capturing the same events. Omit android.intent.category.LAUNCHER, because
526             we don't want this to show up in the Launcher. The priorities of the intent-filters
527             are set lower, so that the user does not see a disambig dialog -->
528        <activity
529            android:name="com.android.contacts.NonPhoneActivity"
530            android:theme="@style/NonPhoneActivityTheme">
531            <intent-filter android:priority="-1">
532                <action android:name="android.intent.action.MAIN"/>
533
534                <category android:name="android.intent.category.DEFAULT"/>
535                <category android:name="android.intent.category.BROWSABLE"/>
536            </intent-filter>
537            <intent-filter android:priority="-1">
538                <action android:name="android.intent.action.VIEW"/>
539
540                <category android:name="android.intent.category.DEFAULT"/>
541                <category android:name="android.intent.category.BROWSABLE"/>
542
543                <data android:scheme="tel"/>
544            </intent-filter>
545            <intent-filter android:priority="-1">
546                <action android:name="android.intent.action.VIEW"/>
547
548                <category android:name="android.intent.category.DEFAULT"/>
549                <category android:name="android.intent.category.BROWSABLE"/>
550
551                <data android:mimeType="vnd.android.cursor.dir/calls"/>
552            </intent-filter>
553        </activity>
554
555        <activity
556            android:name="com.android.contacts.dialog.CallSubjectDialog"
557            android:theme="@style/Theme.CallSubjectDialogTheme"
558            android:windowSoftInputMode="stateVisible|adjustResize">
559            <intent-filter>
560                <action android:name="android.intent.action.VIEW"/>
561            </intent-filter>
562        </activity>
563
564        <!-- Service that is exclusively for the Phone application that sends out a view
565             notification. This service might be removed in future versions of the app.
566
567             This is called explicitly by the phone app via package name and class.
568             (PhoneUtils.sendViewNotificationAsync()).  If this service moves, then phone
569             needs to be changed as well.
570        -->
571        <service
572            android:name=".ViewNotificationService"
573            android:exported="true"
574            android:permission="android.permission.WRITE_CONTACTS">
575            <intent-filter>
576                <action android:name="com.android.contacts.VIEW_NOTIFICATION"/>
577                <data android:mimeType="vnd.android.cursor.item/contact"/>
578            </intent-filter>
579        </service>
580
581        <!-- Service used to run JobScheduler jobs -->
582        <service
583            android:name="com.android.contacts.ContactsJobService"
584            android:permission="android.permission.BIND_JOB_SERVICE"/>
585
586        <provider
587            android:name="androidx.core.content.FileProvider"
588            android:authorities="@string/contacts_file_provider_authority"
589            android:exported="false"
590            android:grantUriPermissions="true">
591            <meta-data
592                android:name="android.support.FILE_PROVIDER_PATHS"
593                android:resource="@xml/file_paths"/>
594        </provider>
595
596        <meta-data
597            android:name="android.nfc.disable_beam_default"
598            android:value="true"/>
599
600    </application>
601</manifest>
602