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