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