• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="utf-8"?>
2<!--
3    Copyright (C) 2015 The Android Open Source Project
4
5    Licensed under the Apache License, Version 2.0 (the "License");
6    you may not use this file except in compliance with the License.
7    You may obtain a copy of the License at
8
9         http://www.apache.org/licenses/LICENSE-2.0
10
11    Unless required by applicable law or agreed to in writing, software
12    distributed under the License is distributed on an "AS IS" BASIS,
13    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14    See the License for the specific language governing permissions and
15    limitations under the License.
16-->
17<manifest xmlns:android="http://schemas.android.com/apk/res/android"
18    package="com.android.messaging"
19    android:installLocation="internalOnly">
20
21    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="28" />
22
23    <!-- Application holds CPU wakelock while working in background -->
24    <uses-permission android:name="android.permission.WAKE_LOCK" />
25    <!-- Application needs SMS/MMS permissions -->
26    <uses-permission android:name="android.permission.READ_SMS"/>
27    <uses-permission android:name="android.permission.WRITE_SMS"/>
28    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
29    <uses-permission android:name="android.permission.RECEIVE_MMS"/>
30    <uses-permission android:name="android.permission.SEND_SMS"/>
31    <!-- Application needs access to MMS network -->
32    <uses-permission android:name="android.permission.INTERNET" />
33    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
34    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
35    <!-- Application needs CONTACT permissions -->
36    <uses-permission android:name="android.permission.READ_CONTACTS"/>
37    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
38    <!-- Application needs to read profiles for the user itself from CP2 -->
39    <uses-permission android:name="android.permission.READ_PROFILE"/>
40    <uses-permission android:name="android.permission.VIBRATE"/>
41    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
42
43    <uses-permission android:name="android.permission.CAMERA" />
44    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
45    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
46    <uses-permission android:name="android.permission.RECORD_AUDIO" />
47    <uses-permission android:name="android.permission.CALL_PHONE" />
48    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
49    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
50
51    <!--  Optional features -->
52    <uses-feature android:name="android.hardware.camera" android:required="false" />
53    <uses-feature android:name="android.hardware.camera.front" android:required="false" />
54    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
55    <uses-feature android:name="android.hardware.microphone" android:required="false" />
56    <uses-feature android:name="android.hardware.screen.portrait" android:required="false" />
57
58    <application
59        android:name="com.android.messaging.BugleApplication"
60        android:allowBackup="false"
61        android:icon="@drawable/ic_launcher"
62        android:label="@string/app_name"
63        android:theme="@style/BugleTheme"
64        android:supportsRtl="true">
65
66        <!-- Displays a list of conversations -->
67        <activity
68            android:name=".ui.conversationlist.ConversationListActivity"
69            android:configChanges="orientation|screenSize|keyboardHidden"
70            android:screenOrientation="user"
71            android:label="@string/app_name"
72            android:theme="@style/BugleTheme.ConversationListActivity">
73            <intent-filter>
74                <action android:name="android.intent.action.MAIN" />
75                <category android:name="android.intent.category.LAUNCHER" />
76                <category android:name="android.intent.category.DEFAULT" />
77                <category android:name="android.intent.category.APP_MESSAGING" />
78            </intent-filter>
79        </activity>
80
81        <activity
82            android:name=".ui.PermissionCheckActivity"
83            android:screenOrientation="portrait"
84            android:configChanges="orientation|screenSize|keyboardHidden" />
85
86        <!-- Launches a conversation (ensures correct app name shown in recents) -->
87        <activity
88            android:name=".ui.conversation.LaunchConversationActivity"
89            android:configChanges="orientation|screenSize|keyboardHidden"
90            android:screenOrientation="user"
91            android:theme="@style/Invisible"
92            android:noHistory="true"
93            android:documentLaunchMode="always">
94            <intent-filter>
95                <action android:name="android.intent.action.VIEW" />
96                <action android:name="android.intent.action.SENDTO" />
97                <category android:name="android.intent.category.DEFAULT" />
98                <category android:name="android.intent.category.BROWSABLE" />
99                <data android:scheme="sms" />
100                <data android:scheme="smsto" />
101            </intent-filter>
102            <intent-filter>
103                <action android:name="android.intent.action.VIEW" />
104                <action android:name="android.intent.action.SENDTO" />
105                <category android:name="android.intent.category.DEFAULT" />
106                <category android:name="android.intent.category.BROWSABLE" />
107                <data android:scheme="mms" />
108                <data android:scheme="mmsto" />
109            </intent-filter>
110        </activity>
111
112        <!-- Displays a list of archived conversations -->
113        <activity
114            android:name=".ui.conversationlist.ArchivedConversationListActivity"
115            android:configChanges="orientation|screenSize|keyboardHidden"
116            android:screenOrientation="user"
117            android:label="@string/archived_activity_title"
118            android:theme="@style/BugleTheme.ArchivedConversationListActivity"
119            android:parentActivityName="com.android.messaging.ui.conversationlist.ConversationListActivity">
120            <meta-data
121                android:name="android.support.PARENT_ACTIVITY"
122                android:value="com.android.messaging.ui.conversationlist.ConversationListActivity" />
123        </activity>
124
125        <!-- Displays the contents of a single conversation -->
126        <activity
127            android:name=".ui.conversation.ConversationActivity"
128            android:configChanges="orientation|screenSize|keyboardHidden"
129            android:screenOrientation="user"
130            android:windowSoftInputMode="stateHidden|adjustResize"
131            android:theme="@style/BugleTheme.ConversationActivity"
132            android:parentActivityName="com.android.messaging.ui.conversationlist.ConversationListActivity">
133            <meta-data
134                android:name="android.support.PARENT_ACTIVITY"
135                android:value="com.android.messaging.ui.conversationlist.ConversationListActivity" />
136        </activity>
137
138        <!-- Blocked Participants -->
139        <activity
140            android:name=".ui.BlockedParticipantsActivity"
141            android:configChanges="orientation|screenSize|keyboardHidden"
142            android:screenOrientation="user"
143            android:label="@string/blocked_contacts_title"
144            android:theme="@style/BugleTheme"
145            android:parentActivityName="com.android.messaging.ui.conversationlist.ConversationListActivity">
146            <meta-data
147                android:name="android.support.PARENT_ACTIVITY"
148                android:value="com.android.messaging.ui.conversationlist.ConversationListActivity" />
149        </activity>
150
151        <!-- Full-screen photo viewer -->
152        <activity
153            android:name=".ui.photoviewer.BuglePhotoViewActivity"
154            android:label="@string/photo_view_activity_title"
155            android:configChanges="orientation|screenSize|keyboardHidden"
156            android:screenOrientation="user"
157            android:theme="@style/BuglePhotoViewTheme"
158        />
159
160        <!-- Settings -->
161        <activity
162            android:name=".ui.appsettings.SettingsActivity"
163            android:label="@string/settings_activity_title"
164            android:theme="@style/BugleTheme.SettingsActivity"
165            android:configChanges="orientation|screenSize|keyboardHidden"
166            android:screenOrientation="user"
167            android:parentActivityName="com.android.messaging.ui.conversationlist.ConversationListActivity">
168            <meta-data
169                android:name="android.support.PARENT_ACTIVITY"
170                android:value="com.android.messaging.ui.conversationlist.ConversationListActivity" />
171        </activity>
172
173        <activity
174            android:name=".ui.appsettings.PerSubscriptionSettingsActivity"
175            android:label="@string/advanced_settings_activity_title"
176            android:theme="@style/BugleTheme.SettingsActivity"
177            android:configChanges="orientation|screenSize|keyboardHidden"
178            android:screenOrientation="user"
179            android:parentActivityName="com.android.messaging.ui.appsettings.SettingsActivity">
180            <meta-data
181                android:name="android.support.PARENT_ACTIVITY"
182                android:value="com.android.messaging.ui.appsettings.SettingsActivity" />
183        </activity>
184
185        <activity
186            android:name=".ui.appsettings.ApplicationSettingsActivity"
187            android:label="@string/general_settings_activity_title"
188            android:theme="@style/BugleTheme.SettingsActivity"
189            android:configChanges="orientation|screenSize|keyboardHidden"
190            android:screenOrientation="user"
191            android:parentActivityName="com.android.messaging.ui.appsettings.SettingsActivity">
192            <meta-data
193                android:name="android.support.PARENT_ACTIVITY"
194                android:value="com.android.messaging.ui.appsettings.SettingsActivity" />
195            <intent-filter>
196                <action android:name="android.intent.action.MAIN" />
197                <category android:name="android.intent.category.DEFAULT" />
198                <category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
199            </intent-filter>
200        </activity>
201
202        <!-- Handles sharing intent -->
203        <activity
204            android:name=".ui.conversationlist.ShareIntentActivity"
205            android:configChanges="orientation|screenSize|keyboardHidden"
206            android:screenOrientation="user"
207            android:theme="@style/BugleTheme.DialogActivity"
208            android:excludeFromRecents="true"
209            android:documentLaunchMode="always">
210            <intent-filter
211                android:label="@string/share_intent_label">
212                <action android:name="android.intent.action.SEND" />
213                <category android:name="android.intent.category.DEFAULT" />
214                <data android:mimeType="text/plain" />
215                <data android:mimeType="text/x-vCard" />
216                <data android:mimeType="text/x-vcard" />
217                <data android:mimeType="image/*" />
218                <data android:mimeType="audio/*" />
219                <data android:mimeType="application/ogg" />
220            </intent-filter>
221            <intent-filter
222                    android:label="@string/share_intent_label">
223                <action android:name="android.intent.action.SEND_MULTIPLE" />
224                <category android:name="android.intent.category.DEFAULT" />
225                <data android:mimeType="image/*" />
226            </intent-filter>
227        </activity>
228
229        <!-- People & Options -->
230        <activity
231            android:name=".ui.conversationsettings.PeopleAndOptionsActivity"
232            android:configChanges="orientation|screenSize|keyboardHidden"
233            android:screenOrientation="user"
234            android:label="@string/people_and_options_activity_title"
235            android:theme="@style/BugleTheme"
236            android:parentActivityName="com.android.messaging.ui.conversation.ConversationActivity">
237            <meta-data
238                android:name="android.support.PARENT_ACTIVITY"
239                android:value="com.android.messaging.ui.conversation.ConversationActivity" />
240        </activity>
241
242         <!-- License -->
243        <activity android:name=".ui.LicenseActivity"
244            android:exported="true"
245            android:theme="@android:style/Theme.Holo.Light.Dialog"
246            android:label="@string/menu_license">
247        </activity>
248
249        <!-- Message Forwarding -->
250        <activity
251            android:name=".ui.conversationlist.ForwardMessageActivity"
252            android:configChanges="orientation|screenSize|keyboardHidden"
253            android:screenOrientation="user"
254            android:label="@string/forward_message_activity_title"
255            android:theme="@style/BugleTheme.DialogActivity">
256        </activity>
257
258        <!-- Entry point for handling remote input/actions. Currently, this is only used by Android
259             Wear to send voice replies. Since that uses PendingIntents, we don't need to export
260             this activity. If we want other apps to be able to use this activity at will,
261             we'll need to guard it with a signature-matching protected permission. We would also
262             need to add an intent filter and remove the android:exported attribute. -->
263        <activity
264            android:name=".ui.RemoteInputEntrypointActivity"
265            android:configChanges="orientation|screenSize|keyboardHidden"
266            android:screenOrientation="user"
267            android:exported="false"
268            android:theme="@style/Invisible">
269        </activity>
270
271        <!-- VCard details -->
272        <activity
273            android:name=".ui.VCardDetailActivity"
274            android:configChanges="orientation|screenSize|keyboardHidden"
275            android:screenOrientation="user"
276            android:label="@string/vcard_detail_activity_title"
277            android:theme="@style/BugleTheme">
278            <meta-data
279                android:name="android.support.PARENT_ACTIVITY"
280                android:value=".ui.conversation.ConversationActivity" />
281        </activity>
282
283        <!-- Attachment chooser -->
284        <activity
285            android:name=".ui.attachmentchooser.AttachmentChooserActivity"
286            android:configChanges="orientation|screenSize|keyboardHidden"
287            android:screenOrientation="user"
288            android:label="@string/attachment_chooser_activity_title"
289            android:theme="@style/BugleTheme"
290            android:parentActivityName="com.android.messaging.ui.conversation.ConversationActivity">
291            <meta-data
292                android:name="android.support.PARENT_ACTIVITY"
293                android:value="com.android.messaging.ui.conversation.ConversationActivity" />
294        </activity>
295
296        <!-- Test activity that we use to host fragments/views. Unfortunately, apparently necessary
297             because Android framework test cases want activity to be in the instrumented package.
298             See http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html
299        -->
300        <activity
301            android:name=".ui.TestActivity"
302            android:configChanges="orientation|screenSize|keyboardHidden">
303        </activity>
304
305        <activity
306            android:name=".ui.debug.DebugMmsConfigActivity"
307            android:configChanges="orientation|screenSize|keyboardHidden"
308            android:screenOrientation="user"
309            android:theme="@style/BugleTheme.DialogActivity"
310            android:exported="false">
311        </activity>
312
313        <provider android:name=".datamodel.MessagingContentProvider" android:label="@string/app_name"
314                  android:authorities="com.android.messaging.datamodel.MessagingContentProvider"
315                  android:exported="false" >
316        </provider>
317
318        <provider android:name=".datamodel.MmsFileProvider"
319                  android:authorities="com.android.messaging.datamodel.MmsFileProvider"
320                  android:grantUriPermissions="true"
321                  android:exported="false" />
322
323        <provider android:name=".datamodel.MediaScratchFileProvider"
324                  android:authorities="com.android.messaging.datamodel.MediaScratchFileProvider"
325                  android:grantUriPermissions="true"
326                  android:exported="false" />
327
328
329        <!-- Action Services -->
330        <service android:name=".datamodel.action.ActionServiceImpl"
331                 android:permission="android.permission.BIND_JOB_SERVICE"
332                 android:exported="true"/>
333        <service android:name=".datamodel.action.BackgroundWorkerService"
334                 android:permission="android.permission.BIND_JOB_SERVICE"
335                 android:exported="true"/>
336
337        <!-- Sms and Mms related items -->
338
339        <!-- Intents for Notification and Pre-KLP Delivery -->
340        <!-- Registered with the highest possible priority (max_int) -->
341        <receiver android:name=".receiver.MmsWapPushReceiver"
342                  android:enabled="false"
343                  android:permission="android.permission.BROADCAST_WAP_PUSH">
344            <intent-filter android:priority="2147483647">
345                <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
346                <data android:mimeType="application/vnd.wap.mms-message" />
347            </intent-filter>
348        </receiver>
349        <receiver android:name=".receiver.SmsReceiver"
350                  android:enabled="false"
351                  android:permission="android.permission.BROADCAST_SMS">
352            <intent-filter android:priority="2147483647">
353                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
354            </intent-filter>
355            <intent-filter android:priority="2147483647">
356                <action android:name="android.provider.Telephony.MMS_DOWNLOADED" />
357            </intent-filter>
358        </receiver>
359
360        <!-- Intents for aborting SMS/MMS broadcasts pre-KLP -->
361        <!-- Registered for a priority just ahead of inbox Messaging apps (2) -->
362        <receiver android:name=".receiver.AbortMmsWapPushReceiver"
363                  android:enabled="false"
364                  android:permission="android.permission.BROADCAST_WAP_PUSH">
365            <intent-filter android:priority="3">
366                <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
367                <data android:mimeType="application/vnd.wap.mms-message" />
368            </intent-filter>
369        </receiver>
370        <receiver android:name=".receiver.AbortSmsReceiver"
371                  android:enabled="false"
372                  android:permission="android.permission.BROADCAST_SMS">
373            <intent-filter android:priority="3">
374                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
375            </intent-filter>
376        </receiver>
377
378        <!-- Intents for KLP+ Delivery -->
379        <receiver android:name=".receiver.MmsWapPushDeliverReceiver"
380                  android:permission="android.permission.BROADCAST_WAP_PUSH">
381            <intent-filter>
382                <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
383                <data android:mimeType="application/vnd.wap.mms-message" />
384            </intent-filter>
385        </receiver>
386        <receiver android:name=".receiver.SmsDeliverReceiver"
387                  android:permission="android.permission.BROADCAST_SMS">
388            <intent-filter>
389                <action android:name="android.provider.Telephony.SMS_DELIVER" />
390            </intent-filter>
391        </receiver>
392
393        <receiver android:name=".receiver.SendStatusReceiver"
394                android:exported="false">
395            <intent-filter>
396                <action android:name="com.android.messaging.receiver.SendStatusReceiver.MESSAGE_SENT" />
397                <data android:scheme="content" />
398            </intent-filter>
399            <intent-filter>
400                <action android:name="com.android.messaging.receiver.SendStatusReceiver.MESSAGE_DELIVERED" />
401            </intent-filter>
402            <intent-filter>
403                <action android:name="com.android.messaging.receiver.SendStatusReceiver.MMS_SENT" />
404                <data android:scheme="content" />
405            </intent-filter>
406            <intent-filter>
407                <action android:name="com.android.messaging.receiver.SendStatusReceiver.MMS_DOWNLOADED" />
408                <data android:scheme="content" />
409            </intent-filter>
410        </receiver>
411
412        <service android:name=".datamodel.NoConfirmationSmsSendService"
413                 android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
414                 android:exported="true" >
415            <intent-filter>
416                <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
417                <category android:name="android.intent.category.DEFAULT" />
418                <data android:scheme="sms" />
419                <data android:scheme="smsto" />
420            </intent-filter>
421        </service>
422
423        <activity android:name=".ui.ClassZeroActivity"
424                  android:configChanges="orientation|screenSize|keyboardHidden"
425                  android:screenOrientation="user"
426                  android:label="@string/class_0_message_activity"
427                  android:theme="@style/BugleTheme.DialogActivity"
428                  android:launchMode="singleTask"
429                  android:excludeFromRecents="true">
430        </activity>
431
432        <activity android:name=".ui.SmsStorageLowWarningActivity"
433                  android:theme="@style/Invisible"
434                  android:configChanges="orientation|screenSize|keyboardHidden" />
435
436        <activity android:name=".ui.appsettings.ApnSettingsActivity"
437                  android:configChanges="orientation|screenSize|keyboardHidden"
438                  android:screenOrientation="user"
439                  android:theme="@style/BugleTheme"
440                  android:parentActivityName="com.android.messaging.ui.appsettings.SettingsActivity" />
441
442        <activity android:name=".ui.appsettings.ApnEditorActivity"
443                  android:configChanges="orientation|screenSize|keyboardHidden"
444                  android:screenOrientation="user"
445                  android:theme="@style/BugleTheme"
446                  android:parentActivityName="com.android.messaging.ui.appsettings.ApnSettingsActivity"/>
447
448        <receiver android:name=".receiver.StorageStatusReceiver">
449            <intent-filter>
450                <action android:name="android.intent.action.DEVICE_STORAGE_LOW" />
451            </intent-filter>
452            <intent-filter>
453                <action android:name="android.intent.action.DEVICE_STORAGE_OK" />
454            </intent-filter>
455        </receiver>
456
457        <receiver android:name=".receiver.BootAndPackageReplacedReceiver">
458            <intent-filter>
459                <action android:name="android.intent.action.BOOT_COMPLETED"/>
460                <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
461                </intent-filter>
462        </receiver>
463
464        <!-- Broadcast receiver that will be notified to reset notifications -->
465        <receiver
466            android:name=".receiver.NotificationReceiver"
467            android:exported="false">
468        </receiver>
469
470        <!-- Broadcast receiver that will be notified for ActionService alarms. -->
471        <receiver
472            android:name=".datamodel.action.ActionServiceImpl$PendingActionReceiver"
473            android:exported="false">
474            <intent-filter>
475                <action android:name="com.android.messaging.datamodel.PENDING_ACTION" />
476            </intent-filter>
477        </receiver>
478
479        <receiver android:name=".receiver.DefaultSmsSubscriptionChangeReceiver">
480            <intent-filter>
481                <action android:name="android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED"/>
482            </intent-filter>
483        </receiver>
484
485        <!-- Widget that displays the conversation list -->
486        <receiver android:name=".widget.BugleWidgetProvider"
487                android:label="@string/widget_conversation_name">
488            <intent-filter>
489                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
490            </intent-filter>
491            <intent-filter>
492                <action android:name="com.android.Bugle.intent.action.ACTION_NOTIFY_CONVERSATIONS_CHANGED" />
493            </intent-filter>
494            <meta-data android:name="android.appwidget.provider"
495                       android:resource="@xml/widget_conversation_list" />
496        </receiver>
497
498        <!-- Widget that displays the messages of a single conversation -->
499        <receiver android:name=".widget.WidgetConversationProvider"
500                android:label="@string/widget_conversation_name">
501            <intent-filter>
502                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
503            </intent-filter>
504            <intent-filter>
505                <action android:name="com.android.Bugle.intent.action.ACTION_NOTIFY_MESSAGES_CHANGED" />
506            </intent-filter>
507            <meta-data android:name="android.appwidget.provider"
508                       android:resource="@xml/widget_conversation" />
509        </receiver>
510
511        <service android:name=".widget.WidgetConversationListService"
512                 android:permission="android.permission.BIND_REMOTEVIEWS"
513                 android:exported="false" />
514
515        <service android:name=".widget.WidgetConversationService"
516                 android:permission="android.permission.BIND_REMOTEVIEWS"
517                 android:exported="false" />
518
519        <activity android:name=".ui.WidgetPickConversationActivity"
520            android:theme="@style/BugleTheme"
521            android:label="@string/app_name" >
522            <intent-filter>
523                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
524            </intent-filter>
525        </activity>
526
527        <service android:name="androidx.appcompat.mms.MmsService"/>
528    </application>
529
530</manifest>
531