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="10417"
20    android:versionName="1.4.17">
21
22    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="24" />
23    <original-package android:name="com.android.contacts" />
24
25    <uses-permission android:name="android.permission.CALL_PHONE" />
26    <uses-permission android:name="android.permission.READ_CONTACTS" />
27    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
28    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
29    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
30    <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED" />
31    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
32    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
33    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
34    <uses-permission android:name="android.permission.READ_PROFILE" />
35    <uses-permission android:name="android.permission.WRITE_PROFILE" />
36    <uses-permission android:name="android.permission.INTERNET" />
37    <uses-permission android:name="android.permission.NFC" />
38    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
39    <uses-permission android:name="android.permission.WAKE_LOCK" />
40    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
41    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
42    <uses-permission android:name="android.permission.VIBRATE" />
43    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
44    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
45    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
46    <!-- Following used for QuickContacts -->
47    <uses-permission android:name="android.permission.READ_CALL_LOG" />
48    <uses-permission android:name="android.permission.READ_SMS" />
49    <uses-permission android:name="android.permission.READ_CALENDAR" />
50    <uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL" />
51    <!-- Following used for Contact metadata syncing -->
52    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
53
54    <application
55        android:name="com.android.contacts.ContactsApplication"
56        android:label="@string/applicationLabel"
57        android:icon="@mipmap/ic_contacts_launcher"
58        android:taskAffinity="android.task.contacts"
59        android:hardwareAccelerated="true"
60        android:supportsRtl="true"
61        android:usesCleartextTraffic="false"
62    >
63
64        <!-- The main Contacts activity with the contact list, favorites, and groups. -->
65        <activity android:name=".activities.PeopleActivity"
66            android:label="@string/launcherActivityLabel"
67            android:theme="@style/PeopleTheme"
68            android:clearTaskOnLaunch="true"
69            android:launchMode="singleTop"
70            android:resizeableActivity="true"
71        >
72            <intent-filter>
73                <action android:name="android.intent.action.MAIN" />
74                <category android:name="android.intent.category.DEFAULT" />
75                <category android:name="android.intent.category.LAUNCHER" />
76                <category android:name="android.intent.category.BROWSABLE" />
77                <category android:name="android.intent.category.APP_CONTACTS" />
78            </intent-filter>
79            <intent-filter>
80                <action android:name="com.android.contacts.action.LIST_DEFAULT" />
81                <category android:name="android.intent.category.DEFAULT" />
82                <category android:name="android.intent.category.TAB" />
83            </intent-filter>
84
85            <intent-filter>
86                <action android:name="com.android.contacts.action.LIST_CONTACTS" />
87                <category android:name="android.intent.category.DEFAULT" />
88                <category android:name="android.intent.category.TAB" />
89            </intent-filter>
90
91            <intent-filter>
92                <action android:name="com.android.contacts.action.LIST_ALL_CONTACTS" />
93                <category android:name="android.intent.category.DEFAULT" />
94                <category android:name="android.intent.category.TAB" />
95            </intent-filter>
96
97            <intent-filter>
98                <action android:name="com.android.contacts.action.LIST_CONTACTS_WITH_PHONES" />
99                <category android:name="android.intent.category.DEFAULT" />
100                <category android:name="android.intent.category.TAB" />
101            </intent-filter>
102
103            <intent-filter android:label="@string/starredList">
104                <action android:name="com.android.contacts.action.LIST_STARRED" />
105                <category android:name="android.intent.category.DEFAULT" />
106                <category android:name="android.intent.category.TAB" />
107            </intent-filter>
108
109            <intent-filter android:label="@string/frequentList">
110                <action android:name="com.android.contacts.action.LIST_FREQUENT" />
111                <category android:name="android.intent.category.DEFAULT" />
112                <category android:name="android.intent.category.TAB" />
113            </intent-filter>
114
115            <intent-filter android:label="@string/strequentList">
116                <action android:name="com.android.contacts.action.LIST_STREQUENT" />
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="android.intent.action.SEARCH" />
123                <category android:name="android.intent.category.DEFAULT" />
124                <data android:mimeType="vnd.android.cursor.dir/contact" />
125            </intent-filter>
126
127            <intent-filter>
128                <action android:name="android.intent.action.SEARCH" />
129                <category android:name="android.intent.category.DEFAULT" />
130            </intent-filter>
131
132            <intent-filter>
133                <action android:name="android.intent.action.VIEW" />
134                <category android:name="android.intent.category.DEFAULT" />
135                <data android:mimeType="vnd.android.cursor.dir/person" />
136                <data android:mimeType="vnd.android.cursor.dir/contact" />
137            </intent-filter>
138
139            <meta-data android:name="android.app.searchable"
140                android:resource="@xml/searchable"
141            />
142        </activity>
143
144        <activity android:name=".activities.ContactSelectionActivity"
145            android:label="@string/launcherActivityLabel"
146            android:theme="@style/ContactPickerTheme"
147            android:launchMode="singleTop"
148            android:clearTaskOnLaunch="true"
149            android:uiOptions="splitActionBarWhenNarrow"
150            android:windowSoftInputMode="adjustResize">
151            <intent-filter>
152                <action android:name="android.intent.action.INSERT_OR_EDIT" />
153                <category android:name="android.intent.category.DEFAULT" />
154                <data android:mimeType="vnd.android.cursor.item/person" />
155                <data android:mimeType="vnd.android.cursor.item/contact" />
156                <data android:mimeType="vnd.android.cursor.item/raw_contact" />
157            </intent-filter>
158
159            <intent-filter>
160                <action android:name="android.intent.action.PICK" />
161                <category android:name="android.intent.category.DEFAULT" />
162                <data android:mimeType="vnd.android.cursor.dir/contact" />
163                <data android:mimeType="vnd.android.cursor.dir/person" />
164                <data android:mimeType="vnd.android.cursor.dir/phone_v2" />
165                <data android:mimeType="vnd.android.cursor.dir/phone" />
166                <data android:mimeType="vnd.android.cursor.dir/postal-address_v2" />
167                <data android:mimeType="vnd.android.cursor.dir/postal-address" />
168                <data android:mimeType="vnd.android.cursor.dir/email_v2" />
169            </intent-filter>
170
171            <intent-filter>
172                <action android:name="android.intent.action.GET_CONTENT" />
173                <category android:name="android.intent.category.DEFAULT" />
174                <data android:mimeType="vnd.android.cursor.item/contact" />
175                <data android:mimeType="vnd.android.cursor.item/person" />
176                <data android:mimeType="vnd.android.cursor.item/phone_v2" />
177                <data android:mimeType="vnd.android.cursor.item/phone" />
178                <data android:mimeType="vnd.android.cursor.item/postal-address_v2" />
179                <data android:mimeType="vnd.android.cursor.item/postal-address" />
180            </intent-filter>
181
182            <intent-filter>
183                <action android:name="com.android.contacts.action.JOIN_CONTACT" />
184                <category android:name="android.intent.category.DEFAULT" />
185            </intent-filter>
186        </activity>
187
188        <!-- Backwards compatibility: somebody may have hard coded this activity name -->
189        <activity-alias android:name="ContactsListActivity"
190            android:targetActivity=".activities.PeopleActivity"
191        />
192
193        <!-- Backwards compatibility: "Contacts" from Honeycomb -->
194        <activity-alias android:name=".activities.ContactsFrontDoor"
195            android:targetActivity=".activities.PeopleActivity"
196            android:exported="true"
197        />
198
199        <!-- Backwards compatibility: "Contacts" from Gingerbread and earlier -->
200        <activity-alias android:name="DialtactsContactsEntryActivity"
201            android:targetActivity=".activities.PeopleActivity"
202            android:exported="true"
203        />
204
205        <!-- Used to set options -->
206        <activity
207            android:name=".common.preference.ContactsPreferenceActivity"
208            android:label="@string/activity_title_settings"
209            android:theme="@style/ContactsPreferencesTheme"
210            android:exported="false"/>
211
212        <activity android:name=".common.activity.LicenseActivity"
213            android:label="@string/activity_title_licenses"
214            android:theme="@style/ContactsPreferencesTheme"
215            android:exported="false" />
216
217        <!-- Used to filter contacts list by account -->
218        <activity
219            android:name=".common.list.AccountFilterActivity"
220            android:label="@string/activity_title_contacts_filter"
221            android:theme="@style/ContactListFilterTheme" />
222
223        <!-- Used to select display and sync groups -->
224        <activity
225            android:name=".common.list.CustomContactListFilterActivity"
226            android:label="@string/custom_list_filter"
227            android:theme="@style/ContactListFilterTheme" />
228
229        <activity
230            android:name=".common.activity.RequestPermissionsActivity"
231            android:label="@string/launcherActivityLabel"
232            android:theme="@style/PeopleTheme"
233            android:exported="false"/>
234
235        <activity
236            android:name=".common.activity.RequestDesiredPermissionsActivity"
237            android:label="@string/launcherActivityLabel"
238            android:theme="@style/PeopleTheme"
239            android:exported="false"/>
240
241        <activity
242            android:name=".common.activity.RequestImportVCardPermissionsActivity"
243            android:label="@string/launcherActivityLabel"
244            android:theme="@style/PeopleTheme"
245            android:exported="false"/>
246
247        <activity
248            android:name=".activities.ShowOrCreateActivity"
249            android:label="@string/launcherActivityLabel"
250            android:theme="@android:style/Theme.Material.Light.Dialog.NoActionBar">
251
252            <intent-filter>
253                <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT" />
254                <category android:name="android.intent.category.DEFAULT" />
255                <data android:scheme="mailto" />
256                <data android:scheme="tel" />
257            </intent-filter>
258        </activity>
259
260        <!-- Views the details of a single group -->
261        <activity android:name=".activities.GroupDetailActivity"
262            android:label=""
263            android:theme="@style/DetailActivityTheme"/>
264
265        <!-- Create a new or edit an existing group -->
266        <activity
267            android:name=".activities.GroupEditorActivity"
268            android:theme="@style/EditorActivityTheme"
269            android:windowSoftInputMode="adjustResize" />
270
271        <activity
272            android:name=".quickcontact.QuickContactActivity"
273            android:label="@string/quickContactActivityLabel"
274            android:theme="@style/Theme.QuickContact"
275            android:launchMode="singleTop"
276            android:excludeFromRecents="true"
277            android:taskAffinity=""
278            android:windowSoftInputMode="stateUnchanged">
279
280            <intent-filter>
281                <action android:name="com.android.contacts.action.QUICK_CONTACT" />
282                <action android:name="android.provider.action.QUICK_CONTACT" />
283                <category android:name="android.intent.category.DEFAULT" />
284                <data android:mimeType="vnd.android.cursor.item/contact" />
285                <data android:mimeType="vnd.android.cursor.item/person" />
286            </intent-filter>
287
288            <intent-filter>
289                <action android:name="android.intent.action.VIEW" />
290                <category android:name="android.intent.category.DEFAULT" />
291                <data android:mimeType="vnd.android.cursor.item/person" />
292                <data android:mimeType="vnd.android.cursor.item/contact" />
293                <data android:mimeType="vnd.android.cursor.item/raw_contact" />
294            </intent-filter>
295        </activity>
296
297        <receiver
298            android:name=".quickcontact.QuickContactBroadcastReceiver"
299            android:exported="false" />
300
301        <activity-alias android:name="ContactShortcut"
302            android:targetActivity=".activities.ContactSelectionActivity"
303            android:label="@string/shortcutContact"
304            android:icon="@drawable/logo_quick_contacts_color_44in48dp">
305
306            <intent-filter>
307                <action android:name="android.intent.action.CREATE_SHORTCUT" />
308                <category android:name="android.intent.category.DEFAULT" />
309            </intent-filter>
310
311        </activity-alias>
312
313        <activity-alias android:name="alias.DialShortcut"
314            android:targetActivity=".activities.ContactSelectionActivity"
315            android:label="@string/shortcutDialContact"
316            android:icon="@drawable/logo_quick_contacts_dialer_color_44in48dp">
317
318            <intent-filter>
319                <action android:name="android.intent.action.CREATE_SHORTCUT" />
320                <category android:name="android.intent.category.DEFAULT" />
321                <category android:name="android.intent.category.CAR_MODE" />
322            </intent-filter>
323
324        </activity-alias>
325
326        <activity-alias android:name="alias.MessageShortcut"
327            android:targetActivity=".activities.ContactSelectionActivity"
328            android:label="@string/shortcutMessageContact"
329            android:icon="@drawable/logo_quick_contacts_mail_color_44in48dp">
330
331            <intent-filter>
332                <action android:name="android.intent.action.CREATE_SHORTCUT" />
333                <category android:name="android.intent.category.DEFAULT" />
334            </intent-filter>
335
336        </activity-alias>
337
338        <!-- Confirm that a single detail will be added to an existing contact -->
339        <activity
340            android:name=".activities.ConfirmAddDetailActivity"
341            android:label="@string/activity_title_confirm_add_detail"
342            android:theme="@style/ConfirmAddDetailDialogTheme"
343            android:windowSoftInputMode="adjustResize"
344            android:exported="false"/>
345
346        <!-- Accounts changed prompt that can appear when creating a new contact. -->
347        <activity
348            android:name=".activities.ContactEditorAccountsChangedActivity"
349            android:theme="@style/ContactEditorAccountsChangedActivityTheme"
350            android:windowSoftInputMode="adjustResize"
351            android:exported="false"/>
352
353        <!-- Edit or create a contact with only the most important fields displayed initially. -->
354        <activity
355            android:name=".activities.CompactContactEditorActivity"
356            android:label="@string/editContactActivityLabel"
357            android:theme="@style/EditorActivityTheme"
358            android:windowSoftInputMode="stateHidden|adjustResize">
359
360            <intent-filter android:label="@string/editContactDescription">
361                <action android:name="android.intent.action.EDIT" />
362                <category android:name="android.intent.category.DEFAULT" />
363                <data android:mimeType="vnd.android.cursor.item/person" />
364                <data android:mimeType="vnd.android.cursor.item/contact" />
365                <data android:mimeType="vnd.android.cursor.item/raw_contact" />
366            </intent-filter>
367            <intent-filter android:label="@string/insertContactDescription">
368                <action android:name="android.intent.action.INSERT" />
369                <category android:name="android.intent.category.DEFAULT" />
370                <data android:mimeType="vnd.android.cursor.dir/person" />
371                <data android:mimeType="vnd.android.cursor.dir/contact" />
372                <data android:mimeType="vnd.android.cursor.dir/raw_contact" />
373            </intent-filter>
374        </activity>
375
376        <!-- Edit or create a contact with all fields displayed. -->
377        <activity
378            android:name=".activities.ContactEditorActivity"
379            android:label="@string/editContactActivityLabel"
380            android:theme="@style/EditorActivityTheme"
381            android:windowSoftInputMode="stateHidden|adjustResize"
382            android:exported="false">
383
384            <intent-filter android:label="@string/editContactDescription">
385                <action android:name="com.android.contacts.action.FULL_EDIT" />
386                <category android:name="android.intent.category.DEFAULT" />
387                <data android:mimeType="vnd.android.cursor.item/person" />
388                <data android:mimeType="vnd.android.cursor.item/contact" />
389                <data android:mimeType="vnd.android.cursor.item/raw_contact" />
390            </intent-filter>
391            <intent-filter android:label="@string/insertContactDescription">
392                <action android:name="com.android.contacts.action.FULL_INSERT" />
393                <category android:name="android.intent.category.DEFAULT" />
394                <data android:mimeType="vnd.android.cursor.dir/person" />
395                <data android:mimeType="vnd.android.cursor.dir/contact" />
396                <data android:mimeType="vnd.android.cursor.dir/raw_contact" />
397            </intent-filter>
398        </activity>
399
400        <activity android:name=".common.test.FragmentTestActivity">
401            <intent-filter>
402                <category android:name="android.intent.category.TEST" />
403            </intent-filter>
404        </activity>
405
406        <!-- Stub service used to keep our process alive long enough for
407             background threads to finish their operations. -->
408        <service
409            android:name=".common.util.EmptyService"
410            android:exported="false" />
411
412        <!-- Service to save a contact -->
413        <service
414            android:name=".ContactSaveService"
415            android:exported="false" />
416
417        <!-- Attaches a photo to a contact. Started from external applications -->
418        <activity android:name=".activities.AttachPhotoActivity"
419            android:label="@string/attach_photo_dialog_title"
420            android:taskAffinity="">
421            <intent-filter>
422                <action android:name="android.intent.action.ATTACH_DATA" />
423                <data android:mimeType="image/*" />
424                <category android:name="android.intent.category.DEFAULT" />
425            </intent-filter>
426        </activity>
427
428        <!-- vCard related -->
429        <activity android:name=".common.vcard.ImportVCardActivity"
430            android:label="@string/launcherActivityLabel"
431            android:configChanges="orientation|screenSize|keyboardHidden"
432            android:theme="@style/BackgroundOnlyTheme">
433            <intent-filter>
434                <action android:name="android.intent.action.VIEW" />
435                <data android:mimeType="text/directory" />
436                <data android:mimeType="text/vcard" />
437                <data android:mimeType="text/x-vcard" />
438                <category android:name="android.intent.category.DEFAULT" />
439            </intent-filter>
440        </activity>
441
442        <activity android:name=".common.vcard.NfcImportVCardActivity"
443            android:label="@string/launcherActivityLabel"
444            android:configChanges="orientation|screenSize|keyboardHidden"
445            android:theme="@style/BackgroundOnlyTheme">
446            <intent-filter>
447                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
448                <data android:mimeType="text/vcard" />
449                <data android:mimeType="text/x-vcard" />
450                <category android:name="android.intent.category.DEFAULT" />
451            </intent-filter>
452        </activity>
453
454        <activity android:name=".common.vcard.CancelActivity"
455            android:label="@string/launcherActivityLabel"
456            android:theme="@style/BackgroundOnlyTheme" />
457
458        <activity android:name=".common.vcard.SelectAccountActivity"
459            android:label="@string/launcherActivityLabel"
460            android:theme="@style/BackgroundOnlyTheme" />
461
462        <activity android:name=".common.vcard.ExportVCardActivity"
463            android:label="@string/launcherActivityLabel"
464            android:theme="@style/BackgroundOnlyTheme" />
465
466        <activity android:name=".common.vcard.ShareVCardActivity"
467                  android:label="@string/launcherActivityLabel"
468                  android:theme="@style/BackgroundOnlyTheme" />
469
470        <service
471            android:name=".common.vcard.VCardService"
472            android:exported="false" />
473        <!-- end vCard related -->
474
475        <!-- Intercept Dialer Intents for devices without a phone.
476             This activity should have the same intent filters as the DialtactsActivity,
477             so that its capturing the same events. Omit android.intent.category.LAUNCHER, because
478             we don't want this to show up in the Launcher. The priorities of the intent-filters
479             are set lower, so that the user does not see a disambig dialog -->
480        <activity
481            android:name="com.android.contacts.NonPhoneActivity"
482            android:theme="@style/NonPhoneActivityTheme"
483            android:label="@string/launcherActivityLabel"
484            >
485            <intent-filter android:priority="-1">
486                <action android:name="android.intent.action.MAIN"/>
487                <category android:name="android.intent.category.DEFAULT"/>
488                <category android:name="android.intent.category.BROWSABLE"/>
489            </intent-filter>
490            <intent-filter android:priority="-1">
491                <action android:name="android.intent.action.VIEW"/>
492                <category android:name="android.intent.category.DEFAULT"/>
493                <category android:name="android.intent.category.BROWSABLE"/>
494                <data android:scheme="tel"/>
495            </intent-filter>
496            <intent-filter android:priority="-1">
497                <action android:name="android.intent.action.VIEW"/>
498                <category android:name="android.intent.category.DEFAULT"/>
499                <category android:name="android.intent.category.BROWSABLE"/>
500                <data android:mimeType="vnd.android.cursor.dir/calls"/>
501            </intent-filter>
502        </activity>
503
504        <activity android:name="com.android.contacts.common.dialog.CallSubjectDialog"
505                  android:theme="@style/Theme.CallSubjectDialogTheme"
506                  android:windowSoftInputMode="stateVisible|adjustResize">
507            <intent-filter>
508                <action android:name="android.intent.action.VIEW"/>
509            </intent-filter>
510        </activity>
511
512        <!-- Service that is exclusively for the Phone application that sends out a view
513             notification. This service might be removed in future versions of the app.
514
515             This is called explicitly by the phone app via package name and class.
516             (PhoneUtils.sendViewNotificationAsync()).  If this service moves, then phone
517             needs to be changed as well.
518        -->
519        <service android:name=".ViewNotificationService"
520                 android:permission="android.permission.WRITE_CONTACTS"
521                 android:exported="true">
522            <intent-filter>
523                <action android:name="com.android.contacts.VIEW_NOTIFICATION"/>
524                <data android:mimeType="vnd.android.cursor.item/contact"/>
525            </intent-filter>
526        </service>
527
528        <!-- Broadcast receiver that passively listens to location updates -->
529        <receiver android:name="com.android.contacts.common.location.CountryDetector$LocationChangedReceiver"/>
530
531        <!-- IntentService to update the user's current country -->
532        <service android:name="com.android.contacts.common.location.UpdateCountryService"
533            android:exported="false"/>
534
535        <provider
536            android:name="android.support.v4.content.FileProvider"
537            android:authorities="@string/contacts_file_provider_authority"
538            android:grantUriPermissions="true"
539            android:exported="false">
540            <meta-data
541                android:name="android.support.FILE_PROVIDER_PATHS"
542                android:resource="@xml/file_paths" />
543        </provider>
544
545        <meta-data android:name="android.nfc.disable_beam_default" android:value="true" />
546    </application>
547</manifest>
548