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